From fdfe3db698fdf1bb5b99fe1dafe52f8ac8f7ce76 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 8 Feb 2026 22:34:31 +0200 Subject: Fix English language and grammar across gemtext content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Spelling: usefull→useful, alread→already, sessiont→session, propper→proper, standarn→standard (file rename), Developmers→Developers, figjit→fig, dnmcli→nmcli - Grammar: every aliases→alias, it's→its (possessive), main objectives→objective, necessary for accomplish→to accomplish, follow to it as of→follow it as if, Advances come only of you→if you, Defeat is finally give up→giving up, Where are humans there is→Where there are humans, there is, spent→spend, It's not too be→to be, If you they/Of you try→If you try - Phrasing: hook off→knock off, Meditation must nothing be fancy→need not be fancy, we will also setting up→set up, showcases hows→showcases how - Career guide: Safe→Save, kudos'→kudos, automate all away→automate it all away - About: hey→they, simplify English/German titles in novels - F3s: VNC address f0→f2 for third VM, zrepl encrypted doc clarification - Rename: standarn-ml.gmi→standard-ml.gmi with index link updates Co-authored-by: Cursor --- about/index.gmi | 2 +- about/novels.gmi.tpl | 2 +- ...2010-05-07-lazy-evaluation-with-standard-ml.gmi | 102 +++++++++++++++++++++ ...2010-05-07-lazy-evaluation-with-standarn-ml.gmi | 102 --------------------- .../2022-05-27-perl-is-still-a-great-choice.gmi | 2 +- ...2022-05-27-perl-is-still-a-great-choice.gmi.tpl | 2 +- gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi | 4 +- .../2022-09-30-after-a-bad-nights-sleep.gmi.tpl | 4 +- ...-17-career-guide-and-soft-skills-book-notes.gmi | 24 ++--- ...career-guide-and-soft-skills-book-notes.gmi.tpl | 20 ++-- .../2024-06-23-terminal-multiplexing-with-tmux.gmi | 6 +- ...4-06-23-terminal-multiplexing-with-tmux.gmi.tpl | 6 +- ...25-04-05-f3s-kubernetes-with-freebsd-part-4.gmi | 16 ++-- ...4-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl | 16 ++-- ...25-07-14-f3s-kubernetes-with-freebsd-part-6.gmi | 6 +- ...7-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl | 6 +- ...-tmux-popup-editor-for-cursor-agent-prompts.gmi | 2 +- ...x-popup-editor-for-cursor-agent-prompts.gmi.tpl | 2 +- gemfeed/index.gmi | 2 +- index.gmi | 2 +- notes/career-guide-and-soft-skills.gmi | 24 ++--- notes/influence-wihout-authority.gmi | 2 +- notes/influence-wihout-authority.gmi.tpl | 2 +- 23 files changed, 178 insertions(+), 178 deletions(-) create mode 100644 gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi delete mode 100644 gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.gmi diff --git a/about/index.gmi b/about/index.gmi index caf14c60..92107784 100644 --- a/about/index.gmi +++ b/about/index.gmi @@ -5,7 +5,7 @@ * Born in: Germany, currently living in: Sofia, Bulgaria * Profession: Computerist - Solving problems with computers that we wouldn't have without them * Current job: Site Reliability Engineer -* Education: Diplom-Informatiker (FH) (Diploma from a German University of Applied Sciences, before hey had international Bachelor and Masters programs) +* Education: Diplom-Informatiker (FH) (Diploma from a German University of Applied Sciences, before they had international Bachelor and Masters programs) * E-Mail: `paul@nospam.buetow.org` ## My sites diff --git a/about/novels.gmi.tpl b/about/novels.gmi.tpl index 2bb86d2d..63c66d27 100644 --- a/about/novels.gmi.tpl +++ b/about/novels.gmi.tpl @@ -4,7 +4,7 @@ ## Introduction -This site lists my favourite novels I have read. I prefer to read them in German though. You will notice that these are mostly Science Fiction novels. Where possible, this page shows both, english (english) and german (german), titles. +This site lists my favourite novels I have read. I prefer to read them in German though. You will notice that these are mostly Science Fiction novels. Where possible, this page shows both English and German titles. Some were read as paperback, others as eBooks, and some were listened to (Audiobook). For a graphical representation you can also have a look here: diff --git a/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi b/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi new file mode 100644 index 00000000..738d54a8 --- /dev/null +++ b/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi @@ -0,0 +1,102 @@ +# Lazy Evaluation with Standard ML + +> Published at 2010-05-07T08:17:59+01:00 + +``` + + _____|~~\_____ _____________ + _-~ \ | \ + _- | ) \ |__/ \ \ + _- ) | | | \ \ + _- | ) / |--| | | + __-_______________ /__/_______| |_________ +( |---- | | + `---------------'--\\\\ .`--' -Glyde- + `|||| +``` + +In contrast to Haskell, Standard SML does not use lazy evaluation by default but an eager evaluation. + +=> https://en.wikipedia.org/wiki/Eager_evaluation +=> https://en.wikipedia.org/wiki/Lazy_evaluation + + +You can solve specific problems with lazy evaluation easier than with eager evaluation. For example, you might want to list the number Pi or another infinite list of something. With the help of lazy evaluation, each element of the list is calculated when it is accessed first, but not earlier. + +## Emulating lazy evaluation in SML + +However, it is possible to emulate lazy evaluation in most eager evaluation languages. This is how it is done with Standard ML (with some play with an infinite list of natural number tuples filtering out 0 elements): + +``` +type ’a lazy = unit -> ’a; + +fun force (f:’a lazy) = f (); +fun delay x = (fn () => x) : ’a lazy; + +datatype ’a sequ = NIL | CONS of ’a * ’a sequ lazy; + +fun first 0 s = [] + | first n NIL = [] + | first n (CONS (i,r)) = i :: first (n-1) (force r); + +fun filters p NIL = NIL + | filters p (CONS (x,r)) = + if p x + then CONS (x, fn () => filters p (force r)) + else + filters p (force r); + +fun nat_pairs () = + let + fun from_pair (x,0) = + CONS ((x,0), fn () => from_pair (0,x+1)) + | from_pair (up,dn) = + CONS ((up,dn), fn () => from_pair (up+1,dn-1)) + in from_pair (0,0) + end; + +(* Test +val test = first 10 (nat_pairs ()) +*) + +fun nat_pairs_not_null () = + filters (fn (x,y) => x > 0 andalso y > 0) (nat_pairs ()); + +(* Test +val test = first 10 (nat_pairs_not_null ()); +*) +``` + +=> http://smlnj.org/ + +## Real laziness with Haskell + +As Haskell already uses lazy evaluation by default, there is no need to construct a new data type. Lists in Haskell are lazy by default. You will notice that the code is also much shorter and easier to understand than the SML version. + +``` +{- Just to make it look like the ML example -} +first = take +filters = filter + +{- Implementation -} +nat_pairs = from_pair 0 0 + where + from_pair x 0 = [x,0] : from_pair 0 (x+1) + from_pair up dn = [up,dn] : from_pair (up+1) (dn-1) + +{- Test: +first 10 nat_pairs +-} + +nat_pairs_not_null = filters (\[x,y] -> x > 0 && y > 0) nat_pairs + +{- Test: +first 10 nat_pairs_not_null +-} +``` + +=> http://www.haskell.org/ + +E-Mail your comments to `paul@nospam.buetow.org` :-) + +=> ../ Back to the main site diff --git a/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.gmi b/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.gmi deleted file mode 100644 index 738d54a8..00000000 --- a/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.gmi +++ /dev/null @@ -1,102 +0,0 @@ -# Lazy Evaluation with Standard ML - -> Published at 2010-05-07T08:17:59+01:00 - -``` - - _____|~~\_____ _____________ - _-~ \ | \ - _- | ) \ |__/ \ \ - _- ) | | | \ \ - _- | ) / |--| | | - __-_______________ /__/_______| |_________ -( |---- | | - `---------------'--\\\\ .`--' -Glyde- - `|||| -``` - -In contrast to Haskell, Standard SML does not use lazy evaluation by default but an eager evaluation. - -=> https://en.wikipedia.org/wiki/Eager_evaluation -=> https://en.wikipedia.org/wiki/Lazy_evaluation - - -You can solve specific problems with lazy evaluation easier than with eager evaluation. For example, you might want to list the number Pi or another infinite list of something. With the help of lazy evaluation, each element of the list is calculated when it is accessed first, but not earlier. - -## Emulating lazy evaluation in SML - -However, it is possible to emulate lazy evaluation in most eager evaluation languages. This is how it is done with Standard ML (with some play with an infinite list of natural number tuples filtering out 0 elements): - -``` -type ’a lazy = unit -> ’a; - -fun force (f:’a lazy) = f (); -fun delay x = (fn () => x) : ’a lazy; - -datatype ’a sequ = NIL | CONS of ’a * ’a sequ lazy; - -fun first 0 s = [] - | first n NIL = [] - | first n (CONS (i,r)) = i :: first (n-1) (force r); - -fun filters p NIL = NIL - | filters p (CONS (x,r)) = - if p x - then CONS (x, fn () => filters p (force r)) - else - filters p (force r); - -fun nat_pairs () = - let - fun from_pair (x,0) = - CONS ((x,0), fn () => from_pair (0,x+1)) - | from_pair (up,dn) = - CONS ((up,dn), fn () => from_pair (up+1,dn-1)) - in from_pair (0,0) - end; - -(* Test -val test = first 10 (nat_pairs ()) -*) - -fun nat_pairs_not_null () = - filters (fn (x,y) => x > 0 andalso y > 0) (nat_pairs ()); - -(* Test -val test = first 10 (nat_pairs_not_null ()); -*) -``` - -=> http://smlnj.org/ - -## Real laziness with Haskell - -As Haskell already uses lazy evaluation by default, there is no need to construct a new data type. Lists in Haskell are lazy by default. You will notice that the code is also much shorter and easier to understand than the SML version. - -``` -{- Just to make it look like the ML example -} -first = take -filters = filter - -{- Implementation -} -nat_pairs = from_pair 0 0 - where - from_pair x 0 = [x,0] : from_pair 0 (x+1) - from_pair up dn = [up,dn] : from_pair (up+1) (dn-1) - -{- Test: -first 10 nat_pairs --} - -nat_pairs_not_null = filters (\[x,y] -> x > 0 && y > 0) nat_pairs - -{- Test: -first 10 nat_pairs_not_null --} -``` - -=> http://www.haskell.org/ - -E-Mail your comments to `paul@nospam.buetow.org` :-) - -=> ../ Back to the main site diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi index 63e77a0f..0092dcdb 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi @@ -112,7 +112,7 @@ About the first point, using Perl for better "shell" scripts was actually the or Here are some reasons why not to chose Perl and look for "better" alternatives: -* If performance is your main objectives, then Perl might not be the language to use. Perl is a dynamic interpreted language, and it will generally never be as fast as statically typed languages compiled to native binaries (e.g. C/C++/Rust/Haskell) or statically typed languages run in a VM with JIT (e.g. Java) or languages like Golang (statically typed, compiled to a binary but still with a runtime in the binary). Perl might be still faster than the other language listed here in certain circumstances (e.g. faster startup time than Java or faster regular expressions engine), but usually it's not. It's not a problem of Perl, it's a problem of all dynamic scripting languages including Python, Ruby, .... +* If performance is your main objective, then Perl might not be the language to use. Perl is a dynamic interpreted language, and it will generally never be as fast as statically typed languages compiled to native binaries (e.g. C/C++/Rust/Haskell) or statically typed languages run in a VM with JIT (e.g. Java) or languages like Golang (statically typed, compiled to a binary but still with a runtime in the binary). Perl might be still faster than the other language listed here in certain circumstances (e.g. faster startup time than Java or faster regular expressions engine), but usually it's not. It's not a problem of Perl, it's a problem of all dynamic scripting languages including Python, Ruby, .... * Don't use Perl (just yet) if you want to code object-oriented. Perl supports OOP, but it feels clunky and odd to use (blessed references to any data types are objects) and doesn't support real encapsulation out of the box. There are many (many) extensions available on CPAN to make OOP better, but that's totally fragmented. The most popular extension, Moose, comes with a huge dependency tree. But wait for Perl 7. It will maybe come with a new object system (an object system inspired by Raku). * It's possible to write large programs in Perl (make difficult things possible), but it might not be the best choice here. This also leads back to the clunky object system Perl has. You could write your projects in a procedural or functional style (Perl perfectly fits here), but OOP seems to be the gold standard for large projects nowadays. Functional programming requires a different mindset, and pure procedural programming lacks abstractions. * Apply common sense. What is the skill set your team has? What's already widely used and supported at work? Which languages comes with the best modules for the things you want to work on? Maybe Python is the answer (better machine learning modules). Maybe Perl is the better choice (better Bioinformatic modules). Perhaps Ruby is already the de-facto standard at work and everyone knows at least a little Ruby (as it happened to be at my workplace) and Ruby is "good enough" for all the tasks already. But that's not a hindrance to throw in a Perl one-liner once in a while :P. diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl index 8b04d87a..548192ee 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl @@ -105,7 +105,7 @@ About the first point, using Perl for better "shell" scripts was actually the or Here are some reasons why not to chose Perl and look for "better" alternatives: -* If performance is your main objectives, then Perl might not be the language to use. Perl is a dynamic interpreted language, and it will generally never be as fast as statically typed languages compiled to native binaries (e.g. C/C++/Rust/Haskell) or statically typed languages run in a VM with JIT (e.g. Java) or languages like Golang (statically typed, compiled to a binary but still with a runtime in the binary). Perl might be still faster than the other language listed here in certain circumstances (e.g. faster startup time than Java or faster regular expressions engine), but usually it's not. It's not a problem of Perl, it's a problem of all dynamic scripting languages including Python, Ruby, .... +* If performance is your main objective, then Perl might not be the language to use. Perl is a dynamic interpreted language, and it will generally never be as fast as statically typed languages compiled to native binaries (e.g. C/C++/Rust/Haskell) or statically typed languages run in a VM with JIT (e.g. Java) or languages like Golang (statically typed, compiled to a binary but still with a runtime in the binary). Perl might be still faster than the other language listed here in certain circumstances (e.g. faster startup time than Java or faster regular expressions engine), but usually it's not. It's not a problem of Perl, it's a problem of all dynamic scripting languages including Python, Ruby, .... * Don't use Perl (just yet) if you want to code object-oriented. Perl supports OOP, but it feels clunky and odd to use (blessed references to any data types are objects) and doesn't support real encapsulation out of the box. There are many (many) extensions available on CPAN to make OOP better, but that's totally fragmented. The most popular extension, Moose, comes with a huge dependency tree. But wait for Perl 7. It will maybe come with a new object system (an object system inspired by Raku). * It's possible to write large programs in Perl (make difficult things possible), but it might not be the best choice here. This also leads back to the clunky object system Perl has. You could write your projects in a procedural or functional style (Perl perfectly fits here), but OOP seems to be the gold standard for large projects nowadays. Functional programming requires a different mindset, and pure procedural programming lacks abstractions. * Apply common sense. What is the skill set your team has? What's already widely used and supported at work? Which languages comes with the best modules for the things you want to work on? Maybe Python is the answer (better machine learning modules). Maybe Perl is the better choice (better Bioinformatic modules). Perhaps Ruby is already the de-facto standard at work and everyone knows at least a little Ruby (as it happened to be at my workplace) and Ruby is "good enough" for all the tasks already. But that's not a hindrance to throw in a Perl one-liner once in a while :P. diff --git a/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi b/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi index 66c0c25c..7d660517 100644 --- a/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi +++ b/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi @@ -47,7 +47,7 @@ Probably I am already awake early and am unable to fall asleep again. My strateg ## Sweat the small stuff -There's never a shortage of small items to hook off my list. Most of these items don't require my full concentration power, and I will be happy to get them off my list so that the next day, after a good night's sleep, I can immerse myself again in focused, deep work with all concentration powers at hand. +There's never a shortage of small items to knock off my list. Most of these items don't require my full concentration power, and I will be happy to get them off my list so that the next day, after a good night's sleep, I can immerse myself again in focused, deep work with all concentration powers at hand. Examples of "small work items" are: @@ -100,7 +100,7 @@ It's much more challenging to keep the mind "under control" in this state. Every ## Meditate -To keep the good vibe, it helps to meditate for 10 minutes. Meditation must nothing be fancy. It can be just lying on the sofa and observing your thoughts as they come and go. Don't judge your thoughts, as that could put you in a negative mood. It's not necessary to sit in an uncomfortable Yoga pose, and it is not required to chant "Ohhmmmmm". +To keep the good vibe, it helps to meditate for 10 minutes. Meditation need not be fancy. It can be just lying on the sofa and observing your thoughts as they come and go. Don't judge your thoughts, as that could put you in a negative mood. It's not necessary to sit in an uncomfortable Yoga pose, and it is not required to chant "Ohhmmmmm". ## Write things down diff --git a/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi.tpl b/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi.tpl index 02bc0121..d5c006f9 100644 --- a/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi.tpl +++ b/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi.tpl @@ -30,7 +30,7 @@ Probably I am already awake early and am unable to fall asleep again. My strateg ## Sweat the small stuff -There's never a shortage of small items to hook off my list. Most of these items don't require my full concentration power, and I will be happy to get them off my list so that the next day, after a good night's sleep, I can immerse myself again in focused, deep work with all concentration powers at hand. +There's never a shortage of small items to knock off my list. Most of these items don't require my full concentration power, and I will be happy to get them off my list so that the next day, after a good night's sleep, I can immerse myself again in focused, deep work with all concentration powers at hand. Examples of "small work items" are: @@ -83,7 +83,7 @@ It's much more challenging to keep the mind "under control" in this state. Every ## Meditate -To keep the good vibe, it helps to meditate for 10 minutes. Meditation must nothing be fancy. It can be just lying on the sofa and observing your thoughts as they come and go. Don't judge your thoughts, as that could put you in a negative mood. It's not necessary to sit in an uncomfortable Yoga pose, and it is not required to chant "Ohhmmmmm". +To keep the good vibe, it helps to meditate for 10 minutes. Meditation need not be fancy. It can be just lying on the sofa and observing your thoughts as they come and go. Don't judge your thoughts, as that could put you in a negative mood. It's not necessary to sit in an uncomfortable Yoga pose, and it is not required to chant "Ohhmmmmm". ## Write things down diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi index 0799a73a..30246e89 100644 --- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi +++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi @@ -1,4 +1,4 @@ -# "Software Developmers Career Guide and Soft Skills" book notes +# "Software Developers Career Guide and Soft Skills" book notes > Published at 2023-07-17T04:56:20+03:00 @@ -18,7 +18,7 @@ These notes are of two books by "John Sommez" I found helpful. I also added some ## Table of Contents -* ⇢ "Software Developmers Career Guide and Soft Skills" book notes +* ⇢ "Software Developers Career Guide and Soft Skills" book notes * ⇢ ⇢ Improve * ⇢ ⇢ ⇢ Always learn new things * ⇢ ⇢ ⇢ Set goals @@ -80,29 +80,29 @@ That's a trap: If you have to rate yourself, that's a trap. That never works in ### Promotions -The most valuable employees are the ones who make themselves obsolete and automate all away. Keep a safety net of 3 to 6 months of finances. Safe at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spent more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. +The most valuable employees are the ones who make themselves obsolete and automate it all away. Keep a safety net of 3 to 6 months of finances. Save at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spend more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. * Raise or promotion, what's better? Promotion is better as money will follow anyway then. * Take projects no-one wants and make them shine. A promotion will follow. * A promotion is not going to come to you because you deserve it. You have to hunt and ask for it. * Track all kudos (e.g. ask for emails from your colleagues). -* Big corporations HRs don't expect a figjit. That's why it's so important to keep track of your accomplishments and kudos'. +* Big corporations HRs don't expect a fig. That's why it's so important to keep track of your accomplishments and kudos. * If you want a raise be specific how much and know to back your demands. Don't make a thread and no ultimatums. * Best way for a promotion is to switch jobs. You can even switch back with a better salary. ### Finish things -Hard work is necessary for accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. +Hard work is necessary to accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. * Learn to finish things without motivation. Things will pay off when you stick to stuff and eventually motivation can also come back. -* You will fail if you don't plan realistically. Set also a schedule and follow to it as of life depends on it. -* Advances come only of you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. +* You will fail if you don't plan realistically. Set also a schedule and follow it as if life depends on it. +* Advances come only if you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. * Any action is better than no action. If you get stuck you have gained nothing. * You need to know the unknowns. Identify as many unknown not known things as possible. Hard vs fun: Both engage the brain (video games vs work). Some work is hard and other is easy. Hard work is boring. The harsh truth is you have to put in hard and boring work in order to accomplish and be successful. Work won't be always boring though, as joy will follow with mastery. -Defeat is finally give up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. +Defeat is finally giving up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. ## Expand the empire @@ -182,18 +182,18 @@ Intermittent fasting is an effective method to maintain weight and health. But i ## No drama -Avoid drama at work. Where are humans there is drama. You can decide where to spent your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. +Avoid drama at work. Where there are humans, there is drama. You can decide where to spend your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. Don't worry about other people what they do and don't do. You only worry about you. Shut up and get your own things done. But you could help to inspire a not working colleague. * During an argument, take the opponent's position and see how your opinion changes. -* If you they to convince someone else it's an argument. Of you try to find the best solution it is a good resolution. +* If you try to convince someone else it's an argument. If you try to find the best solution it is a good resolution. * If someone is hurting the team let the manager know but phrase it nicely. * How to get rid of a never ending talking person? Set up focus hours officially where you don't want to be interrupted. Present as if it is your defect that you get interrupted easily. * TOXIC PEOPLE: AVOID THEM. RUN. * Boss likes if you get shit done without getting asked all the time about things and also without drama. -You have to learn how to work in a team. Be honest but tactful. It's not too be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. +You have to learn how to work in a team. Be honest but tactful. It's not to be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. # Personal brand @@ -315,7 +315,7 @@ Other book notes of mine are: => ./2024-07-07-the-stoic-challenge-book-notes.gmi 2024-07-07 "The Stoic Challenge" book notes => ./2024-05-01-slow-productivity-book-notes.gmi 2024-05-01 "Slow Productivity" book notes => ./2023-11-11-mind-management-book-notes.gmi 2023-11-11 "Mind Management" book notes -=> ./2023-07-17-career-guide-and-soft-skills-book-notes.gmi 2023-07-17 "Software Developmers Career Guide and Soft Skills" book notes (You are currently reading this) +=> ./2023-07-17-career-guide-and-soft-skills-book-notes.gmi 2023-07-17 "Software Developers Career Guide and Soft Skills" book notes (You are currently reading this) => ./2023-05-06-the-obstacle-is-the-way-book-notes.gmi 2023-05-06 "The Obstacle is the Way" book notes => ./2023-04-01-never-split-the-difference-book-notes.gmi 2023-04-01 "Never split the difference" book notes => ./2023-03-16-the-pragmatic-programmer-book-notes.gmi 2023-03-16 "The Pragmatic Programmer" book notes diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl index 40101547..dc4b22c9 100644 --- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl +++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl @@ -1,4 +1,4 @@ -# "Software Developmers Career Guide and Soft Skills" book notes +# "Software Developers Career Guide and Soft Skills" book notes > Published at 2023-07-17T04:56:20+03:00 @@ -50,29 +50,29 @@ That's a trap: If you have to rate yourself, that's a trap. That never works in ### Promotions -The most valuable employees are the ones who make themselves obsolete and automate all away. Keep a safety net of 3 to 6 months of finances. Safe at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spent more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. +The most valuable employees are the ones who make themselves obsolete and automate it all away. Keep a safety net of 3 to 6 months of finances. Save at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spend more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. * Raise or promotion, what's better? Promotion is better as money will follow anyway then. * Take projects no-one wants and make them shine. A promotion will follow. * A promotion is not going to come to you because you deserve it. You have to hunt and ask for it. * Track all kudos (e.g. ask for emails from your colleagues). -* Big corporations HRs don't expect a figjit. That's why it's so important to keep track of your accomplishments and kudos'. +* Big corporations HRs don't expect a fig. That's why it's so important to keep track of your accomplishments and kudos. * If you want a raise be specific how much and know to back your demands. Don't make a thread and no ultimatums. * Best way for a promotion is to switch jobs. You can even switch back with a better salary. ### Finish things -Hard work is necessary for accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. +Hard work is necessary to accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. * Learn to finish things without motivation. Things will pay off when you stick to stuff and eventually motivation can also come back. -* You will fail if you don't plan realistically. Set also a schedule and follow to it as of life depends on it. -* Advances come only of you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. +* You will fail if you don't plan realistically. Set also a schedule and follow it as if life depends on it. +* Advances come only if you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. * Any action is better than no action. If you get stuck you have gained nothing. * You need to know the unknowns. Identify as many unknown not known things as possible. Hard vs fun: Both engage the brain (video games vs work). Some work is hard and other is easy. Hard work is boring. The harsh truth is you have to put in hard and boring work in order to accomplish and be successful. Work won't be always boring though, as joy will follow with mastery. -Defeat is finally give up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. +Defeat is finally giving up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. ## Expand the empire @@ -152,18 +152,18 @@ Intermittent fasting is an effective method to maintain weight and health. But i ## No drama -Avoid drama at work. Where are humans there is drama. You can decide where to spent your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. +Avoid drama at work. Where there are humans, there is drama. You can decide where to spend your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. Don't worry about other people what they do and don't do. You only worry about you. Shut up and get your own things done. But you could help to inspire a not working colleague. * During an argument, take the opponent's position and see how your opinion changes. -* If you they to convince someone else it's an argument. Of you try to find the best solution it is a good resolution. +* If you try to convince someone else it's an argument. If you try to find the best solution it is a good resolution. * If someone is hurting the team let the manager know but phrase it nicely. * How to get rid of a never ending talking person? Set up focus hours officially where you don't want to be interrupted. Present as if it is your defect that you get interrupted easily. * TOXIC PEOPLE: AVOID THEM. RUN. * Boss likes if you get shit done without getting asked all the time about things and also without drama. -You have to learn how to work in a team. Be honest but tactful. It's not too be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. +You have to learn how to work in a team. Be honest but tactful. It's not to be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. # Personal brand diff --git a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi index 167eb47a..96517a8e 100644 --- a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi +++ b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi @@ -81,7 +81,7 @@ alias ts=tmux::search alias tssh=tmux::cluster_ssh ``` -Note all `tmux::...`; those are custom shell functions doing certain things, and they aren't part of the Tmux distribution. But let's run through every aliases one by one. +Note all `tmux::...`; those are custom shell functions doing certain things, and they aren't part of the Tmux distribution. But let's run through every alias one by one. The first two are pretty straightforward. `tm` is simply a shorthand for `tmux`, so I have to type less, and `tl` lists all Tmux sessions that are currently open. No magic here. @@ -90,7 +90,7 @@ The first two are pretty straightforward. `tm` is simply a shorthand for `tmux`, The `tn` alias is referencing this function: ```bash -# Create new session and if alread exists attach to it +# Create new session and if already exists attach to it tmux::new () { readonly session=$1 local date=date @@ -375,7 +375,7 @@ The first one is that any new window starts in the current directory. The second The third one, `choose-tree`, opens a tree view in Tmux listing all sessions and windows. This one is handy to get a better overview of what is currently running in any local Tmux session. It looks like this (it also allows me to press a hotkey to switch to a particular Tmux window): -=> ./terminal-multiplexing-with-tmux/tmux-tree-view.png Tmux sessiont tree view +=> ./terminal-multiplexing-with-tmux/tmux-tree-view.png Tmux session tree view The last remaining lines in my configuration file are: diff --git a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi.tpl b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi.tpl index 1031da56..bd109308 100644 --- a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi.tpl +++ b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi.tpl @@ -63,7 +63,7 @@ alias ts=tmux::search alias tssh=tmux::cluster_ssh ``` -Note all `tmux::...`; those are custom shell functions doing certain things, and they aren't part of the Tmux distribution. But let's run through every aliases one by one. +Note all `tmux::...`; those are custom shell functions doing certain things, and they aren't part of the Tmux distribution. But let's run through every alias one by one. The first two are pretty straightforward. `tm` is simply a shorthand for `tmux`, so I have to type less, and `tl` lists all Tmux sessions that are currently open. No magic here. @@ -72,7 +72,7 @@ The first two are pretty straightforward. `tm` is simply a shorthand for `tmux`, The `tn` alias is referencing this function: ```bash -# Create new session and if alread exists attach to it +# Create new session and if already exists attach to it tmux::new () { readonly session=$1 local date=date @@ -357,7 +357,7 @@ The first one is that any new window starts in the current directory. The second The third one, `choose-tree`, opens a tree view in Tmux listing all sessions and windows. This one is handy to get a better overview of what is currently running in any local Tmux session. It looks like this (it also allows me to press a hotkey to switch to a particular Tmux window): -=> ./terminal-multiplexing-with-tmux/tmux-tree-view.png Tmux sessiont tree view +=> ./terminal-multiplexing-with-tmux/tmux-tree-view.png Tmux session tree view The last remaining lines in my configuration file are: diff --git a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi index 512657e3..9c06126d 100644 --- a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi +++ b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi @@ -94,7 +94,7 @@ paul@f0:~ % doas vm switch create public paul@f0:~ % doas vm switch add public re0 ``` -Bhyve stores all it's data in the `/bhyve` of the `zroot` ZFS pool: +Bhyve stores all its data in the `/bhyve` of the `zroot` ZFS pool: ```sh paul@f0:~ % zfs list | grep bhyve @@ -205,7 +205,7 @@ paul@f0:/bhyve/rocky % doas vm install rocky Rocky-9.5-x86_64-minimal.iso ### Connect to VNC -For the installation, I opened the VNC client on my Fedora laptop (GNOME comes with a simple VNC client) and manually ran through the base installation for each of the VMs. Again, I am sure this could have been automated a bit more, but there were just three VMs, and it wasn't worth the effort. The three VNC addresses of the VMs were `vnc://f0:5900`, `vnc://f1:5900`, and `vnc://f0:5900`. +For the installation, I opened the VNC client on my Fedora laptop (GNOME comes with a simple VNC client) and manually ran through the base installation for each of the VMs. Again, I am sure this could have been automated a bit more, but there were just three VMs, and it wasn't worth the effort. The three VNC addresses of the VMs were `vnc://f0:5900`, `vnc://f1:5900`, and `vnc://f2:5900`. => ./f3s-kubernetes-with-freebsd-part-4/1.png @@ -263,12 +263,12 @@ END And we configure the IPs accordingly on the VMs themselves by opening a root shell via SSH to the VMs and entering the following commands on each of the VMs: ```sh -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.address 192.168.1.120/24 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.gateway 192.168.1.1 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.DNS 192.168.1.1 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.method manual -[root@r0 ~] % dnmcli connection down enp0s5 -[root@r0 ~] % dnmcli connection up enp0s5 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.address 192.168.1.120/24 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.gateway 192.168.1.1 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.DNS 192.168.1.1 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.method manual +[root@r0 ~] % nmcli connection down enp0s5 +[root@r0 ~] % nmcli connection up enp0s5 [root@r0 ~] % hostnamectl set-hostname r0.lan.buetow.org [root@r0 ~] % cat <>/etc/hosts 192.168.1.120 r0 r0.lan r0.lan.buetow.org diff --git a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl index 68fa1a07..c807b51c 100644 --- a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl +++ b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl @@ -55,7 +55,7 @@ paul@f0:~ % doas vm switch create public paul@f0:~ % doas vm switch add public re0 ``` -Bhyve stores all it's data in the `/bhyve` of the `zroot` ZFS pool: +Bhyve stores all its data in the `/bhyve` of the `zroot` ZFS pool: ```sh paul@f0:~ % zfs list | grep bhyve @@ -166,7 +166,7 @@ paul@f0:/bhyve/rocky % doas vm install rocky Rocky-9.5-x86_64-minimal.iso ### Connect to VNC -For the installation, I opened the VNC client on my Fedora laptop (GNOME comes with a simple VNC client) and manually ran through the base installation for each of the VMs. Again, I am sure this could have been automated a bit more, but there were just three VMs, and it wasn't worth the effort. The three VNC addresses of the VMs were `vnc://f0:5900`, `vnc://f1:5900`, and `vnc://f0:5900`. +For the installation, I opened the VNC client on my Fedora laptop (GNOME comes with a simple VNC client) and manually ran through the base installation for each of the VMs. Again, I am sure this could have been automated a bit more, but there were just three VMs, and it wasn't worth the effort. The three VNC addresses of the VMs were `vnc://f0:5900`, `vnc://f1:5900`, and `vnc://f2:5900`. => ./f3s-kubernetes-with-freebsd-part-4/1.png @@ -224,12 +224,12 @@ END And we configure the IPs accordingly on the VMs themselves by opening a root shell via SSH to the VMs and entering the following commands on each of the VMs: ```sh -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.address 192.168.1.120/24 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.gateway 192.168.1.1 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.DNS 192.168.1.1 -[root@r0 ~] % dnmcli connection modify enp0s5 ipv4.method manual -[root@r0 ~] % dnmcli connection down enp0s5 -[root@r0 ~] % dnmcli connection up enp0s5 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.address 192.168.1.120/24 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.gateway 192.168.1.1 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.DNS 192.168.1.1 +[root@r0 ~] % nmcli connection modify enp0s5 ipv4.method manual +[root@r0 ~] % nmcli connection down enp0s5 +[root@r0 ~] % nmcli connection up enp0s5 [root@r0 ~] % hostnamectl set-hostname r0.lan.buetow.org [root@r0 ~] % cat <>/etc/hosts 192.168.1.120 r0 r0.lan r0.lan.buetow.org diff --git a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi index a08fef2f..415293ed 100644 --- a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi +++ b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi @@ -72,7 +72,7 @@ This is the sixth blog post about the f3s series for self-hosting demands in a h ## Introduction -In the previous posts, we set up a WireGuard mesh network. In the future, we will also setting up a Kubernetes cluster. Kubernetes workloads often require persistent storage for databases, configuration files, and application data. Local storage on each node has significant limitations: +In the previous posts, we set up a WireGuard mesh network. In the future, we will also set up a Kubernetes cluster. Kubernetes workloads often require persistent storage for databases, configuration files, and application data. Local storage on each node has significant limitations: * No data sharing: Pods (once we run Kubernetes) on different nodes can't access the same data * Pod mobility: If a pod moves to another node, it loses access to its data @@ -438,12 +438,12 @@ EOF * `f0_to_f1_nfsdata`: Replicates NFS data every minute for faster failover recovery * `f0_to_f1_freebsd`: Replicates FreeBSD VM every ten minutes (less critical) -The FreeBSD VM is only used for development purposes, so it doesn't require as frequent replication as the NFS data. It's off-topic to this blog series, but it showcases, hows `zrepl`'s flexibility in handling different datasets with varying replication needs. +The FreeBSD VM is only used for development purposes, so it doesn't require as frequent replication as the NFS data. It's off-topic to this blog series, but it showcases how `zrepl`'s flexibility in handling different datasets with varying replication needs. Furthermore: * We're specifically replicating `zdata/enc/nfsdata` instead of the entire `zdata/enc` dataset. This dedicated dataset will contain all the data we later want to expose via NFS, keeping a clear separation between replicated NFS data and other local encrypted data. -* The `send: encrypted: false` option turns off ZFS native encryption for the replication stream. Since we're using a WireGuard tunnel between `f0` and `f1`, the data is already encrypted in transit. Disabling ZFS stream encryption reduces CPU overhead and improves replication performance. +* We use `send: encrypted: true` to keep the replication stream encrypted. While WireGuard already encrypts in transit, this provides additional protection. For reduced CPU overhead, you could set `encrypted: false` since the tunnel is secure. ### Configuring `zrepl` on `f1` (sink) diff --git a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl index bbd935a5..6e20e5b8 100644 --- a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl +++ b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl @@ -12,7 +12,7 @@ This is the sixth blog post about the f3s series for self-hosting demands in a h ## Introduction -In the previous posts, we set up a WireGuard mesh network. In the future, we will also setting up a Kubernetes cluster. Kubernetes workloads often require persistent storage for databases, configuration files, and application data. Local storage on each node has significant limitations: +In the previous posts, we set up a WireGuard mesh network. In the future, we will also set up a Kubernetes cluster. Kubernetes workloads often require persistent storage for databases, configuration files, and application data. Local storage on each node has significant limitations: * No data sharing: Pods (once we run Kubernetes) on different nodes can't access the same data * Pod mobility: If a pod moves to another node, it loses access to its data @@ -378,12 +378,12 @@ EOF * `f0_to_f1_nfsdata`: Replicates NFS data every minute for faster failover recovery * `f0_to_f1_freebsd`: Replicates FreeBSD VM every ten minutes (less critical) -The FreeBSD VM is only used for development purposes, so it doesn't require as frequent replication as the NFS data. It's off-topic to this blog series, but it showcases, hows `zrepl`'s flexibility in handling different datasets with varying replication needs. +The FreeBSD VM is only used for development purposes, so it doesn't require as frequent replication as the NFS data. It's off-topic to this blog series, but it showcases how `zrepl`'s flexibility in handling different datasets with varying replication needs. Furthermore: * We're specifically replicating `zdata/enc/nfsdata` instead of the entire `zdata/enc` dataset. This dedicated dataset will contain all the data we later want to expose via NFS, keeping a clear separation between replicated NFS data and other local encrypted data. -* The `send: encrypted: false` option turns off ZFS native encryption for the replication stream. Since we're using a WireGuard tunnel between `f0` and `f1`, the data is already encrypted in transit. Disabling ZFS stream encryption reduces CPU overhead and improves replication performance. +* We use `send: encrypted: true` to keep the replication stream encrypted. While WireGuard already encrypts in transit, this provides additional protection. For reduced CPU overhead, you could set `encrypted: false` since the tunnel is secure. ### Configuring `zrepl` on `f1` (sink) diff --git a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi index ae6213f0..3f4b2708 100644 --- a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi +++ b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi @@ -77,7 +77,7 @@ And this is how it looks like after sending back the text to the Cursor Agent's => ./tmux-popup-editor-for-cursor-agent-prompts/demo2.png Prefilled prompt text -And here is the full script. It is a bit ugly since it's shell (written with Cursor Agent with GPT-5.2-Codex), and I might (let) rewrite it in Go with propper unit tests, config-file, multi-agent support and release it once I have time. But it works well enough for now. +And here is the full script. It is a bit ugly since it's shell (written with Cursor Agent with GPT-5.2-Codex), and I might (let) rewrite it in Go with proper unit tests, config-file, multi-agent support and release it once I have time. But it works well enough for now. > Update 2026-02-08: This functionality has been integrated into the hexai project (https://codeberg.org/snonux/hexai) with proper multi-agent support for Cursor Agent, Claude Code CLI, and Ampcode. The hexai version includes unit tests, configuration files, and better agent detection. While still experimental, it's more robust than this shell script. See the hexai-tmux-edit command for details. diff --git a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi.tpl b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi.tpl index 1f8a3c9d..85b45096 100644 --- a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi.tpl +++ b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi.tpl @@ -68,7 +68,7 @@ And this is how it looks like after sending back the text to the Cursor Agent's => ./tmux-popup-editor-for-cursor-agent-prompts/demo2.png Prefilled prompt text -And here is the full script. It is a bit ugly since it's shell (written with Cursor Agent with GPT-5.2-Codex), and I might (let) rewrite it in Go with propper unit tests, config-file, multi-agent support and release it once I have time. But it works well enough for now. +And here is the full script. It is a bit ugly since it's shell (written with Cursor Agent with GPT-5.2-Codex), and I might (let) rewrite it in Go with proper unit tests, config-file, multi-agent support and release it once I have time. But it works well enough for now. > Update 2026-02-08: This functionality has been integrated into the hexai project (https://codeberg.org/snonux/hexai) with proper multi-agent support for Cursor Agent, Claude Code CLI, and Ampcode. The hexai version includes unit tests, configuration files, and better agent detection. While still experimental, it's more robust than this shell script. See the hexai-tmux-edit command for details. diff --git a/gemfeed/index.gmi b/gemfeed/index.gmi index 3655bec4..c03a8811 100644 --- a/gemfeed/index.gmi +++ b/gemfeed/index.gmi @@ -95,7 +95,7 @@ => ./2014-03-24-the-fibonacci.pl.c-polyglot.gmi 2014-03-24 - The fibonacci.pl.raku.c Polyglot => ./2011-05-07-perl-daemon-service-framework.gmi 2011-05-07 - Perl Daemon (Service Framework) => ./2010-05-09-the-fype-programming-language.gmi 2010-05-09 - The Fype Programming Language -=> ./2010-05-07-lazy-evaluation-with-standarn-ml.gmi 2010-05-07 - Lazy Evaluation with Standard ML +=> ./2010-05-07-lazy-evaluation-with-standard-ml.gmi 2010-05-07 - Lazy Evaluation with Standard ML => ./2010-04-09-standard-ml-and-haskell.gmi 2010-04-09 - Standard ML and Haskell => ./2009-02-13-sgi-onyx-3200.gmi 2009-02-13 - SGI Onyx 3200 => ./2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi 2008-12-29 - Using my Nokia N95 for fixing my MTA diff --git a/index.gmi b/index.gmi index e8ae7ea7..380e5978 100644 --- a/index.gmi +++ b/index.gmi @@ -123,7 +123,7 @@ Everything you read on this site is my personal opinion and experience. You can => ./gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi 2014-03-24 - The fibonacci.pl.raku.c Polyglot => ./gemfeed/2011-05-07-perl-daemon-service-framework.gmi 2011-05-07 - Perl Daemon (Service Framework) => ./gemfeed/2010-05-09-the-fype-programming-language.gmi 2010-05-09 - The Fype Programming Language -=> ./gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.gmi 2010-05-07 - Lazy Evaluation with Standard ML +=> ./gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi 2010-05-07 - Lazy Evaluation with Standard ML => ./gemfeed/2010-04-09-standard-ml-and-haskell.gmi 2010-04-09 - Standard ML and Haskell => ./gemfeed/2009-02-13-sgi-onyx-3200.gmi 2009-02-13 - SGI Onyx 3200 => ./gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi 2008-12-29 - Using my Nokia N95 for fixing my MTA diff --git a/notes/career-guide-and-soft-skills.gmi b/notes/career-guide-and-soft-skills.gmi index bcf1762b..5c8b4ba3 100644 --- a/notes/career-guide-and-soft-skills.gmi +++ b/notes/career-guide-and-soft-skills.gmi @@ -1,4 +1,4 @@ -# "Software Developmers Career Guide and Soft Skills" book notes +# "Software Developers Career Guide and Soft Skills" book notes > Published at 2023-07-17T04:56:20+03:00 @@ -18,7 +18,7 @@ These notes are of two books by "John Sommez" I found helpful. I also added some ## Table of Contents -* ⇢ "Software Developmers Career Guide and Soft Skills" book notes +* ⇢ "Software Developers Career Guide and Soft Skills" book notes * ⇢ ⇢ Improve * ⇢ ⇢ ⇢ Always learn new things * ⇢ ⇢ ⇢ Set goals @@ -80,29 +80,29 @@ That's a trap: If you have to rate yourself, that's a trap. That never works in ### Promotions -The most valuable employees are the ones who make themselves obsolete and automate all away. Keep a safety net of 3 to 6 months of finances. Safe at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spent more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. +The most valuable employees are the ones who make themselves obsolete and automate it all away. Keep a safety net of 3 to 6 months of finances. Save at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spend more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. * Raise or promotion, what's better? Promotion is better as money will follow anyway then. * Take projects no-one wants and make them shine. A promotion will follow. * A promotion is not going to come to you because you deserve it. You have to hunt and ask for it. * Track all kudos (e.g. ask for emails from your colleagues). -* Big corporations HRs don't expect a figjit. That's why it's so important to keep track of your accomplishments and kudos'. +* Big corporations HRs don't expect a fig. That's why it's so important to keep track of your accomplishments and kudos. * If you want a raise be specific how much and know to back your demands. Don't make a thread and no ultimatums. * Best way for a promotion is to switch jobs. You can even switch back with a better salary. ### Finish things -Hard work is necessary for accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. +Hard work is necessary to accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. * Learn to finish things without motivation. Things will pay off when you stick to stuff and eventually motivation can also come back. -* You will fail if you don't plan realistically. Set also a schedule and follow to it as of life depends on it. -* Advances come only of you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. +* You will fail if you don't plan realistically. Set also a schedule and follow it as if life depends on it. +* Advances come only if you give more than asked. Consistency, commitment and knowing what you need to do is more key than hard work. * Any action is better than no action. If you get stuck you have gained nothing. * You need to know the unknowns. Identify as many unknown not known things as possible. Hard vs fun: Both engage the brain (video games vs work). Some work is hard and other is easy. Hard work is boring. The harsh truth is you have to put in hard and boring work in order to accomplish and be successful. Work won't be always boring though, as joy will follow with mastery. -Defeat is finally give up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. +Defeat is finally giving up. Failure is the road to success, embrace it. Failure does not define you but how you respond to it. Events don't make your unhappy, but how you react to events do. ## Expand the empire @@ -182,18 +182,18 @@ Intermittent fasting is an effective method to maintain weight and health. But i ## No drama -Avoid drama at work. Where are humans there is drama. You can decide where to spent your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. +Avoid drama at work. Where there are humans, there is drama. You can decide where to spend your energy in. But don't avoid conflict. Conflict is healthy in any kind of relationship. Be tactful and state your opinion. The goal is to find the best solution to the problem. Don't worry about other people what they do and don't do. You only worry about you. Shut up and get your own things done. But you could help to inspire a not working colleague. * During an argument, take the opponent's position and see how your opinion changes. -* If you they to convince someone else it's an argument. Of you try to find the best solution it is a good resolution. +* If you try to convince someone else it's an argument. If you try to find the best solution it is a good resolution. * If someone is hurting the team let the manager know but phrase it nicely. * How to get rid of a never ending talking person? Set up focus hours officially where you don't want to be interrupted. Present as if it is your defect that you get interrupted easily. * TOXIC PEOPLE: AVOID THEM. RUN. * Boss likes if you get shit done without getting asked all the time about things and also without drama. -You have to learn how to work in a team. Be honest but tactful. It's not too be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. +You have to learn how to work in a team. Be honest but tactful. It's not to be the loudest but about selling your ideas. Don't argue otherwise you won't sell anything. Be persuasive by finding the common ground. Or lead the colleagues to your idea and don't sell it upfront. Communicate clearly. # Personal brand @@ -315,7 +315,7 @@ Other book notes of mine are: => ./the-stoic-challenge.gmi 2024-07-07 "The Stoic Challenge" book notes => ./slow-productivity.gmi 2024-05-01 "Slow Productivity" book notes => ./mind-management.gmi 2023-11-11 "Mind Management" book notes -=> ./career-guide-and-soft-skills.gmi 2023-07-17 "Software Developmers Career Guide and Soft Skills" book notes (You are currently reading this) +=> ./career-guide-and-soft-skills.gmi 2023-07-17 "Software Developers Career Guide and Soft Skills" book notes (You are currently reading this) => ./the-obstacle-is-the-way.gmi 2023-05-06 "The Obstacle is the Way" book notes => ./never-split-the-difference.gmi 2023-04-01 "Never split the difference" book notes => ./the-pragmatic-programmer.gmi 2023-03-16 "The Pragmatic Programmer" book notes diff --git a/notes/influence-wihout-authority.gmi b/notes/influence-wihout-authority.gmi index 269f1000..ddbc458d 100644 --- a/notes/influence-wihout-authority.gmi +++ b/notes/influence-wihout-authority.gmi @@ -4,7 +4,7 @@ These notes capture key strategies from "Influence Without Authority" by Allan R. Cohen and David L. Bradford for effective interpersonal relationships and influencing others in the workplace without formal authority. -These are my personal notes, but maybe you will find them usefull too. +These are my personal notes, but maybe you will find them useful too. ## Table of Contents diff --git a/notes/influence-wihout-authority.gmi.tpl b/notes/influence-wihout-authority.gmi.tpl index 725c2bcd..57be50ad 100644 --- a/notes/influence-wihout-authority.gmi.tpl +++ b/notes/influence-wihout-authority.gmi.tpl @@ -4,7 +4,7 @@ These notes capture key strategies from "Influence Without Authority" by Allan R. Cohen and David L. Bradford for effective interpersonal relationships and influencing others in the workplace without formal authority. -These are my personal notes, but maybe you will find them usefull too. +These are my personal notes, but maybe you will find them useful too. << template::inline::toc -- cgit v1.2.3