• You Are What Your Record Says You Are

    Bill Parcells, when prompted to defend himself after his first season as the Giants head coach going 3-12 said, “You are what your record says you are.”

    Of course, Parcells was talking about football but this maxim applies to many walks of life. At the end of the day, results matter and you can only hide from the truth for so long.


  • To Be Offended, You Must Value Their Opinion

    Being offended and caring what others think about you go hand in hand. If you are offended by someone, a part of you values their opinion. Similarly, if you don’t care what others think, you won’t be easily offended.

    In practice, this is difficult advice to follow. People tend to care what others think of them and therefore value their opinion. To counter this tendency, ask yourself, “Would you seek their advice in the future?”. If the answer is ‘yes’, then you should talk to them because you actually value their opinion. If the answer is ‘no’, their opinion doesn’t matter and recognizing that can help you move along.

    See also:


  • Ack and Come Back

    If you don’t answer a message in a timely manner, the other person has to assume either you haven’t received it or you chose not to respond. If they believe you haven’t received it, their only recourse is to message you again. If they believe you chose not to respond, they might have some feels about it.

    It’s always better to respond quickly even if you can’t fully answer the contents of the message. If you can’t answer quickly, acknowledge the receipt and come back to it later. Acknowledging helps the other person know that the ball is in your court and you will get less follow-on pings.

    Assuming you actually do come back with a response later, it will help build trust since you followed through on what you said you would do.

    See also:


  • Avoiding Losers as an Investment Strategy

    One way to have good returns when investing is to have a few winners and merely avoid losers. Of course, you must have some winners and a plausible way to avoid the losers which is easier said than done. In the world of investing, the winners take care of themselves because they will have an outsized gain compared to everything else.

    Another way to invest is to have more winners at the risk of more losers (e.g. the venture capital model). You need to be able to identify the winners before others do. You need to have more winners to offset the risk of more losers.

    This a neat way Howard Marks explains risk and why the extremes don’t work. You can’t have only winners. You can’t avoid all losers.

    See also:


  • IPhone 15 Pro Review

    I’m upgrading from the iPhone 12 Pro to the iPhone 15 Pro. Here’s what I’ve noticed as the biggest differences so far.

    Despite all the talk about the titanium case, I barely notice the difference in the hand. It’s slightly lighter but now more top heavyβ€”presumably because of the large size increase in the protruding camera sensors.

    The high-refresh rate screen is a big improvement. Scrolling feels like moving around high-gloss magazine paper. It’s smooth and sharp without the blur you see on when scrolling quickly.

    The always-on display was surprising at first. It seems pretty handy for how I use the phone by putting it on my desk when I’m working.

    The new camera options are pretty great. I briefly tried out taking pictures in RAW and the ProRes codecs. I read about the new Apple Log video recording which makes it easier to adjust video by starting with flatter colors to start (that’s my understanding at least). With a little bit of effort, photos and videos can feel more professional to my eye at least.

    See also:


  • When to Set Up Channel Partnerships

    You should set up channel partnerships when it helps your business access new customers while filling an existing need for the partner and not competing with your direct business.

    The first part “accessing customers” means that setting up the partnership should benefit you by cheaply acquiring customers the partner already has. It doesn’t work if the partner doesn’t have an ongoing relationship with these customers and it doesn’t work if you can’t make money from these customers.

    The next part about filling an “existing need” is that the partner likely has many other partnership opportunities without you so by solving a problem they have already recognized will help prioritize partnering (keep in mind the build, buy, partner framework).

    Finally, while partnerships can accelerate growth, long-term you need to be sure it doesn’t compete with your direct business. It would be a bad trade to cannabilize your business by offering the same thing to the same target market through a partner and make less money.

    See also:


  • Emacs Hyperbole

    Hyperbole is an emacs package that matches text and turns it into links (buttons in hyperbole parlance). Links can execute arbitrary code so it’s kind of like a universal emacs subsystem for linking things together (i.e. hypertext).

    In some ways you might describe hyperbole as “M-RET does what you expect at point”.

    From this generic abstraction you can do a number of things. You can unify the behavior of clicking on file paths, regardless of what mode or programming language you are writing in. You can link together org-mode documents to python code in another directory. You can implement “do what I mean” when you press M-RET anywhere since you can add your own buttons that execute arbitrary code.

    I’m not sure how practical hyperbole is yet. It’s hard to discover what is a button (at least in my setup) and I don’t know when I would want to add my own buttons but now that I know this exists, I’m sure I’ll start to see opportunities crop up.

    See also:


  • At Mentions for Org-Mode

    A pattern I really like in Notion is that you can a @ (at) mention any page with search as you type and autocomplete. I’d like to do something similar in org-mode so that I can quickly link related headlines.

    Using the fantastic org-ql library for Emacs, I integrated it into completions triggered by letters following the @ symbol. This translates the input after the @ symbol into a query and inserts a org-id link when selecting a match.

    (require 'org-ql)
    
    (defun my/org-agenda-completions-at-point ()
      "Function to be used as `completion-at-point' in Org mode."
      (when (looking-back "@\\(\\(?:\\sw\\|\\s_\\|\\s-\\|\\s-:\\)+\\)")
        (defvar heading-to-id (make-hash-table :test 'equal))
        (let* ((start (match-beginning 1))
               (end (point))
               (input (match-string-no-properties 1))
               (candidates (org-ql-select (org-agenda-files) (org-ql--query-string-to-sexp input)
                             :action (lambda ()
                                       (let* ((heading (org-get-heading t))
                                              (id (org-id-get (point))))
                                         ;; Avoid having to look
                                         ;; up the ID again since
                                         ;; we are visiting all
                                         ;; the locations with
                                         ;; org-ql anyway
                                         (puthash heading id heading-to-id)
                                         heading))))
               (exit-function (lambda (heading status)
                                (when (eq status 'finished)
                                  ;; The +1 removes the @ symbol
                                  (delete-char (- (+ (length heading) 1)))
                                  (insert
                                   (format "[[id:%s][%s]]" (gethash heading heading-to-id) heading))))))
          (list start end candidates :exit-function exit-function))))
    
    (defun my/org-agenda-completion-hook ()
      "Configure org-mode for completion at point for org-agenda headlines."
      (add-to-list 'completion-at-point-functions 'my/org-agenda-completions-at-point))
    
    (add-hook 'org-mode-hook 'my/org-agenda-completion-hook)
    

    See also: