我能知過去未來,偏偏不掌握現在。
— Me@2011.09.02
— Me@2024-06-28
.
.
2024.06.28 Friday (c) All rights reserved by ACHK
我能知過去未來,偏偏不掌握現在。
— Me@2011.09.02
— Me@2024-06-28
.
.
2024.06.28 Friday (c) All rights reserved by ACHK
眾害取其輕 | The least of all evils, 13.2 | 友情演義 2.2 | 相聚零刻 3.2 | 原來是你 4.2
這段改編自 2023 年 6 月 20 日的對話。
.
…
維持「曖昧時期」,不是健康的關係,因為,如果一邊覺得只是友情,而另一邊卻覺得不是的話,即引起極大誤會,所以我視「曖昧時期」為「害」。
但那是「必要之惡」,因為人不會未卜先知;你總不能,亦總不會,在從來未相處暸解過,就喜歡別人,向她示愛。
但是,那並不代表,你沒有任何責任,去盡快盡量減輕,那「必要之惡」。亦即是話,「曖昧時期」一但有結果,就應立即終止。
「結果」就是,愛情或友情。「終止」就是,要麼進化成情侶,要麼退化成朋友。
— Me@2024-06-26 04:05:21 PM
.
.
2024.06.27 Thursday (c) All rights reserved by ACHK
Structure and Interpretation of Classical Mechanics
.
Let be a function such that
So, to get a value of , we input a local tuple:
(define ((Gamma-bar f-bar) path-q-local-tuple) (let* ((tqva path-q-local-tuple) (t (time tqva)) (O-tqva (osculating-path tqva))) ((f-bar O-tqva) t)))
.
The procedure
osculating-pathtakes a number of local components and returns a path with these components; it is implemented as a power series.
In scmutils, you can use the pp function to get the definition of a function. For example, the code
(pp osculating-path)
results
(define ((osculating-path state0) t) (let ((t0 (time state0)) (q0 (coordinate state0)) (k (vector-length state0))) (let ((dt (- t t0))) (let loop ((n 2) (sum q0) (dt^n/n! dt)) (if (fix:= n k) sum (loop (+ n 1) (+ sum (* (vector-ref state0 n) dt^n/n!)) (/ (* dt^n/n! dt) n)))))))
.
Note that for the function in the program, , the input is actually not
but
.
.
(define (F->C F) (define (f-bar q-prime) (define q (compose F (Gamma q-prime))) (Gamma q)) (Gamma-bar f-bar)) (show-expression ((F->C p->r) (->local 't (up 'r 'theta) (up 'rdot 'thetadot))))
— Me@2023-12-19 08:16:40 PM
.
.
2024.06.15 Saturday (c) All rights reserved by ACHK
According to Wittgenstein, philosophical problems arise when language is forced from its proper home into a metaphysical environment, where all the familiar and necessary landmarks and contextual clues are removed. He describes this metaphysical environment as like being on frictionless ice: where the conditions are apparently perfect for a philosophically and logically perfect language, all philosophical problems can be solved without the muddying effects of everyday contexts; but where, precisely because of the lack of friction, language can in fact do no work at all. Wittgenstein argues that philosophers must leave the frictionless ice and return to the “rough ground” of ordinary language in use. Much of the Investigations consists of examples of how the first false steps can be avoided, so that philosophical problems are dissolved, rather than solved: “The clarity we are aiming at is indeed complete clarity. But this simply means that the philosophical problems should completely disappear.”
— Wikipedia on Ludwig Wittgenstein
.
.
2024.06.12 Wednesday ACHK
自己的世界,以自己為中心,並不是「自我中心」;
要求別人的世界,也以你自己為中心,才是「自我中心」。
.
而「他我中心」,則是自己的世界,以他人為中心。
.
不要自我中心;
不要他我中心,
因其兩者皆錯。
— Me@2023-09-13 09:33:19 PM
.
.
2024.06.10 Monday (c) All rights reserved by ACHK
這段改編自 2021 年 12 月 15 日的對話。
.
《我的第一次》這是我給學生訂的作文題目,批閱作文的時候,忽然憶起自己重要的第一次。我第一次真正愛上國文課,是因為來了一位姓盛的老師。我第一次暗戀,對象是一位同班同學,她叫陳文靖,就坐在我前面。每天上課時,我總會間歇嗅到,她髮鬢的爽身粉香味。我第一次感到自己重要,是在你出生的那天。嬰兒床上的你,臉上滿是皺紋,口中嗚嗚地發出,小貓般微弱哭叫。我抱起你,有點不知所措,但是一種奇妙感覺,同時洶湧而來,世界變得溫柔,我也從此變得重要。一晃眼,小貓不再是小貓,早已出發尋找,他自己的第一次去了,在一個靜靜的角落裡,尚有一個全新的『第一次』在等著他。
–《男人四十》
.
拍拖,不要只為互相陪伴。拍拖,應以結婚有目的。肯定不是你未來太太的人,應立刻中止當時(或潛在)的戀愛關係。
與女子第一次看星空;第一次看煙花;第一次討論人生大計;第一次討論廣義相對論;第一次討論羅馬帝園衰亡史;等等,都應全部留給,唯一的真正未來太太,盡量。
— Me@2024-06-04 12:11:17 PM
.
.
2024.06.06 Thursday (c) All rights reserved by ACHK
Zsh, 4
.

# Edit this configuration file to define what should be installed on your system. Help is available in the configuration.nix(5) man page and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: { imports = [ # Include the results of the hardware scan. ./hardware-configuration.nix ]; # Bootloader. boot.loader.grub.enable = true; boot.loader.grub.device = "/dev/sda"; boot.loader.grub.useOSProber = true; networking.hostName = "hi"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. networking.wireless.enable = false; hardware.bluetooth.enable = false; # Configure network proxy if necessary # networking.proxy.default = "http://user:password@proxy:port/"; # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; # Enable networking networking.networkmanager.enable = true; # Set your time zone. time.timeZone = "Australia/Perth"; # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "en_GB.UTF-8"; LC_IDENTIFICATION = "en_GB.UTF-8"; LC_MEASUREMENT = "en_GB.UTF-8"; LC_MONETARY = "en_GB.UTF-8"; LC_NAME = "en_GB.UTF-8"; LC_NUMERIC = "en_GB.UTF-8"; LC_PAPER = "en_GB.UTF-8"; LC_TELEPHONE = "en_GB.UTF-8"; LC_TIME = "en_GB.UTF-8"; }; # Enable the X11 windowing system. services.xserver.enable = true; # Enable the KDE Plasma Desktop Environment. services.xserver.displayManager.sddm.enable = true; services.xserver.desktopManager.plasma5.enable = true; # Configure keymap in X11 services.xserver = { layout = "us"; xkbVariant = ""; }; # Enable CUPS to print documents. services.printing.enable = true; # Enable sound with pipewire. sound.enable = true; hardware.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; # If you want to use JACK applications, uncomment this #jack.enable = true; # use the example session manager (no others are packaged yet so this is enabled by default, no need to redefine it in your config for now) #media-session.enable = true; }; # Enable touchpad support (enabled default in most desktopManager). # services.xserver.libinput.enable = true; # Define a user account. Don't forget to set a password with ‘passwd’. users.users.hi = { isNormalUser = true; description = "hi"; extraGroups = [ "networkmanager" "wheel" "vboxsf" "vboxusers"]; shell = pkgs.zsh; packages = with pkgs; [ firefox kate thunderbird chromium ]; }; # Allow unfree packages nixpkgs.config.allowUnfree = true;
# virtualisation.virtualbox.guest.enable = true; # virtualisation.virtualbox.guest.x11 = true; # virtualisation.virtualbox.host.enable = true; # virtualisation.virtualbox.host.enableExtensionPack = true; # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # wget zsh zsh-autosuggestions zsh-syntax-highlighting zsh-powerlevel10k meslo-lgs-nf oh-my-zsh corefonts fira powerline-fonts ubuntu_font_family unifont p7zip unrar unzip util-linux meld home-manager git git-cola github-desktop emacs29 autokey virtualbox librewolf palemoon-bin ventoy-full flatpak steam libsForQt5.falkon libsForQt5.korganizer krusader psensor playonlinux protonvpn-gui # vmware-workstation quickemu quickgui neofetch ]; # Some programs need SUID wrappers, can be configured further or are # started in user sessions. # programs.mtr.enable = true; # programs.gnupg.agent = { # enable = true; # enableSSHSupport = true; # }; programs.zsh = { enable = true; enableCompletion = true; autosuggestions.enable = true; interactiveShellInit = '' source /run/current-system/sw/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh source /run/current-system/sw/share/zsh-autosuggestions/zsh-autosuggestions.zsh source /run/current-system/sw/share/zsh-powerlevel10k/powerlevel10k.zsh-theme ''; }; fonts = { fontDir.enable = true; packages = with pkgs; [ corefonts fira powerline-fonts ubuntu_font_family unifont ]; }; # List services that you want to enable: systemd.services.rfkill-block-all = { path = [ pkgs.networkmanager ]; script = '' nmcli radio wifi off ''; wantedBy = [ "multi-user.target" ]; }; # Enable the OpenSSH daemon. # services.openssh.enable = true; # Open ports in the firewall. # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; # Or disable the firewall altogether. # networking.firewall.enable = false; networking.firewall.enable = true; powerManagement.enable = true; services.thermald.enable = true; # This value determines the NixOS release from which the default settings for stateful data, like file locations and database versions on your system were taken. It‘s perfectly fine and recommended to leave this value at the release version of the first install of this system. Before changing this value read the documentation for this option (e.g. man configuration.nix or on ... ). system.stateVersion = "23.11"; # Did you read the comment? }
— Me@2024-01-23 09:55:24 AM
.
.
2024.02.29 Thursday (c) All rights reserved by ACHK
A First Course in String Theory
.
…
Explain why the above right-hand side is well defined for .
…
~~
…
.
Prove that converges.
…
Prove that converges.
…
Since both and
are finite,
is also finite.
So
This term converges as long as .
So this condition is not only necessary but also sufficient for the convergence of the analytic continuation of Gamma function,
— Me@2023-09-07 07:38:17 PM
.
.
2024.02.21 Wednesday (c) All rights reserved by ACHK
Comments on Dialect’s Newton vs. Mach: The Bucket Experiment
1.1 In dialectphilosophy, the author claimed that acceleration is not really absolute, because measuring its value within a physical system actually requires your prior knowledge about the world and the initial calibration of the accelerometer.
While the point is correct, it is irrelevant here, because it is not what the original “acceleration is absolute” refers to.
In other words, the statement “acceleration is absolute” is with respect to Galilean transformation. It is not with respect to every kind of transformation. Confusing these two meanings is a major bug of @dialectphilosophy.
1.2 Actually, calibration is a process that lets you define what “acceleration is zero” means in terms of physical phenomenon. In other words, you decide under what condition that you should set the accelerometer reading to zero.
1.3 Note that it is always the case that you have to define the value of a physical quantity in terms of a state of the measuring device. That is exactly what “calibration” means.
1.4 More fundamentally, it is just the normal process of defining new words. We define new words either in terms of other words or in terms of physical phenomena.
2. Even though the value of acceleration, and thus also the answer to “whether the acceleration is zero”, is relative to the accelerometer calibration, the answer to “whether the acceleration is increasing, decreasing, or constant” is not.
— Me@2023-08-07 05:56:31 AM
.
.
2024.02.20 Tuesday (c) All rights reserved by ACHK
tlb on May 4, 2018 | next [–]
Akin’s rules for spacecraft design [0] include: “Any exploration program which “just happens” to include a new launch vehicle is, de facto, a launch vehicle program.”
By analogy, any software project that includes writing a database is, de facto, a database project.
Strom on May 5, 2018 | parent | prev | next [–]
Another common version of this is: video game project turning into a video game engine project, usually not even reaching the actual content phase.
.
k__ on May 5, 2018 | root | parent | next [–]
But weren’t such projects rather common?
.
faitswulff on May 4, 2018 | parent | next [–]
The title is misleading – it’s actually about how and why they did end up writing their own db. From the article:
There’s an old adage in software engineering — “never write your own database”. So why did the OneNote team go ahead and write one as part of upgrading OneNote’s local cache implementation?
— Never Write Your Own Database (2017)
— Hacker News
.
.
2024.02.18 Sunday ACHK
這段改編自 2010 年 4 月 24 日的對話。
.
自己的世界,以自己為中心,並不是「自我中心」;
要求別人的世界,也以你自己為中心,才是「自我中心」。
.
(你又怎會知道,他人的內心優不優美呢?)
觀察她的言行舉止就可以。例如,如果她有網誌的話,你可以閱讀之,看看她通常寫什麼題材。那會反映她的一些性格特質,例如,她是否自我中心。
有很多網誌(的作者),都是自我中心的。我都不知道,閱讀來有什麼意思。
(你是指,她會講 當天做過什麼事 和 吃過什麼東西 等等?)
無錯。那些內容對讀者,完全沒有任何形式的得益。
當然,如果她寫自己的生活,寫得十分有趣,則另計;我則視之為對我有用,我仍然會有動機去欣賞。人的主要娛樂之一,就是經歷各種,不同的人生。
網誌(作者)的另一個極端,則是「完全不自我中心」。那亦不是好事,因為,那會把網誌變成,完全沒有個人魅力,沒有人性,沉悶非常,有如字典工具書。這個極端,我簡稱為「他我中心」。
「自我中心」和「他我中心」都是錯的。
— Me@2024-02-14 11:15:43 AM
.
I like to think that the important part of my blog is the content, not me. After all, users don’t care about me. It’s about what you, the reader, get out of this blog. I struggled with this for a while until I realized what I was missing. Blogs, for better or worse, are as much about the writer as they are any other topic. Personality is the essential ingredient that makes blogs so interesting, so compelling, so.. human. To avoid writing about yourself is just as much of a mistake as writing about yourself in every post. So Five Things isn’t off topic at all. It’s very much on topic. Behind every fascinating blog is a fascinating person.
— Five Things You Didn’t Know About Me (and my office)
— Coding Horror
— by Jeff Atwood
— 15 Jan 2007
.
.
2024.02.15 Thursday (c) All rights reserved by ACHK

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
isLeap :: Int -> Bool isLeap year = (mod year 4 == 0 && mod year 100 /= 0) || mod year 400 == 0 daysInMonth :: Int -> Int -> Int daysInMonth year month | month `elem` [1, 3, 5, 7, 8, 10, 12] = 31 | month `elem` [4, 6, 9, 11] = 30 | month == 2 = if isLeap year then 29 else 28 nextMonth :: Int -> Int -> Int -> Int nextMonth dayOfWeek y m = (dayOfWeek + daysInMonth y m) `mod` 7 countSundays :: Int -> Int -> Int -> Int -> Int countSundays startYear startMonth dayOfWeek sundays | y > 2000 = sundays | m > 12 = countSundays (y+1) 1 dayOfWeek sundays | otherwise = countSundays y (m+1) nextDayOfWeek sun where y = startYear m = startMonth nextDayOfWeek = nextMonth dayOfWeek y m sun | dayOfWeek == 0 = sundays + 1 | otherwise = sundays e19 :: Int e19 = countSundays 1901 1 2 0 -- The third argument is dayOfWeek. -- Its value is 2 here -- because 1 Jan 1901 was a Tuesday.
λ> e19 171 λ>
— Me@2024-02-10 12:00:39 PM
.
.
2024.02.11 Sunday (c) All rights reserved by ACHK
Functional Differential Geometry
.
p. 21
…
2.4
Let
,
where is a coordinate function.
p. 12
A coordinate function
maps points in a coordinate patch of a manifold to a coordinate tuple:
,
where
may have a convenient tuple structure.
2.5
Instead, is a further generalization of
.
p. 25
The vector field
has a coordinate representation
:
with the definitions
and
.
So, actually,
2.6
While is the tuple of coordinate components of a point,
is the abstract point itself.
.
3.1
… ; they measure how quickly the coordinate functions change in the direction of the vector field, scaled by the magnitude of the vector field: …
inputs an abstract point and outputs its coordinates.
The first factor is just the meaning of the definition of
. The second factor is needed because the input of
is
, not
.
In other words, is just the definition of
.
3.2
…
is the direction derivative of the function
at the point
.
Note that it is not the ordinary directional derivative.
3.2.1
Instead, the ordinary directional derivative is
or
3.2.2
The generalization of directional derivative is replacing , a vector independent of
, with
, a vector function of
.
— Me@2024-02-03 04:45:17 PM
.
.
2024.02.08 Thursday (c) All rights reserved by ACHK
1. Velocity is by definition relative because displacement is by definition relative.
2. Even for either coordinate ( or
), its value is relative because it is defined with respect to an origin chosen by you.
3.1 Furthermore, even for the origin itself, it is relative in a sense. When you choose a point as the origin of the coordinate system, you have to choose a static point. However, “whether a point is static or not” is subjective for different observers.
3.2 In other words, to be an origin, it has to be the same physical location. However, whether the physical location is the “same” could be up to debate.
— Me@2024-02-03 01:43:32 PM
.
.
2024.02.03 Saturday (c) All rights reserved by ACHK
.
.
2024.02.02 Friday (c) All rights reserved by ACHK
有限而無邊
.
— Me@2024-02-01 09:05:46 AM
.
.
2024.02.01 Thursday (c) All rights reserved by ACHK

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
(defun is-leap-year (year) (or (and (zerop (mod year 4)) (not (zerop (mod year 100)))) (zerop (mod year 400)))) (defun days-in-month (month year) (case month ((1 3 5 7 8 10 12) 31) ((4 6 9 11) 30) (2 (if (is-leap-year year) 29 28)))) (defun euler-19 () (let ((day-of-week 2) ; 1 Jan 1901 was a Tuesday (sundays 0)) (loop :for year :from 1901 :to 2000 :do (loop :for month :from 1 :to 12 :do (when (zerop day-of-week) ; 0 represents Sunday (incf sundays)) (setf day-of-week (mod (+ day-of-week (days-in-month month year)) 7)))) sundays)) (print (euler-19))
CL-USER> (euler-19) 171 CL-USER>
— Me@2024-01-30 01:46:11 PM
.
.
2024.01.30 Tuesday (c) All rights reserved by ACHK
Structure and Interpretation of Classical Mechanics
.
Given a function
of a local tuple, a corresponding path-dependent function
is
.
So while the input of is a tuple
, the input of
is an abstract path
.
.
Given
we can reconstitute
by taking the argument of
, which is a finite initial segment of a local tuple, constructing a path that has this local description, and finding the value of
for this path.
1. The goal is to use to reconstitute
.
2. The argument of is
3. Assume that we have the value of the initial position of the path, . Then the path
can be constructed by
Note that while represents a path,
represents the coordinates of the particle location on the path at time
.
Knowing the value of for every moment
is equivalent to knowing the path
as a whole.
— Me@2023-12-19 08:16:40 PM
.
.
2024.01.29 Monday (c) All rights reserved by ACHK
Velocity is relative in the following sense:
Subjective value of an objective velocity changes under Galilean transformation. Different inertial observers would see different velocity values.
Acceleration is absolute in the following sense:
Subjective value of an objective accelerative remains unchanged under Galilean transformation. Different inertial observers would see identical acceleration values.
The proof:
In other words, the statement “acceleration is absolute” is with respect to Galilean transformation. It is not with respect to every kind of transformation. Confusing these two meanings is a major bug of @dialectphilosophy.
.
Note that Galilean transformation, like many other “transformations”, is conceptual, linguistic, mathematical, logical, coordinate, subjective, but not objective, nor physical, because the two observers are seeing the same underlying physical event.
— Me@2024-01-23 12:12:23 PM
.
.
2024.01.24 Wednesday (c) All rights reserved by ACHK
You must be logged in to post a comment.