Author: remo

  • Chrome 侧栏功能

    Chrome sidebar functionality

    go to chrome://flags (in url bar)

    search for vertical tabs and set it to enabled

    right click on the horizontal tab bar (empty space)

    Click “show tabs on the side”

  • ROG 魔霸9 9955hx3d 5070ti 更换显卡液金为霍尼韦尔7958SP

    ROG Strix G15 9955HX3D 5070ti graphics card replaced with Honeywell 7958SP liquid metal.

    Energy saving: It takes about 40 minutes, and the temperature remains basically unchanged before and after replacement.

    I bought a new computer and used it for about a week.

    Before replacing the thermal paste, the CPU temperature consistently reached its power limit of 95°C at 125W. Under dual stress testing, the CPU released approximately 50W of power, reaching around 75°C, while the GPU, under X0 FurMark, consumed approximately 100W and reached around 68-70°C.

    Begin replacing the Honeywell 7958SP. After removing all the screws, slightly twist the handles on both sides at the top; with a little force, the heatsink module can be removed. Be extra careful of any liquid metal residue remaining on the heatsink module.

    After disassembly, a significant amount of liquid metal was clearly observed to have leaked out, but this was likely due to movement during disassembly.

    The heat dissipation module has foam pads to prevent liquid metal from overflowing, providing decent protection.

    The liquid gold was removed using alcohol and cotton swabs. This process required patience and took about 20 minutes.

    Finally, it was cleaned up.

    Then replace the thermal paste. Close the lid to finish.

    Final roasting temperature compared to before replacementBasically the sameYes, you read that right, they are basically the same.

    Furthermore, an additional nearly 4° elevation can be achieved by using a height adjustment pad. So why not?

  • 风格化卡通体积云

    Stylized cartoon volumetric clouds

    Function getCloudColor(
        viewVector,      // Direction of gaze
        skyColor,        // Background sky color
        basePos,         // Ray origin
        samples,         // Number of samples
        umbral,          // Threshold used to remove low noise
        brightFactor,    // High light intensity
        dither,          // Jitter parameters
        CLOUD_PARAMS     // Various cloud layer constants such as plane, center, and thickness
    ):
        // 1. If your gaze is downward, return directly to the sky color.
        if viewVector.y0:
            return skyColor
    
        // 2. Calculate the intersection points t0 and t1 of the ray with the upper and lower cloud planes.
        t0 = (CLOUD_BOTTOM - basePos.y) / viewVector.y
        t1 = (CLOUD_TOP    - basePos.y) / viewVector.y
    
        // 3. Generate the sampling start point p and step size stepV
        p     = basePos + viewVector * t0
        pEnd  = basePos + viewVector * t1
        stepV = (pEnd - p) / samples
        p    += stepV * dither  // Add a small amount of jitter to reduce banding
    
        // 4. Sample along the ray, accumulating "cloud thickness" cv and "first hit depth" den
        cv       = 0          // Cumulative cloud volume components
        den      = 0          // Relative position upon first entry into the cloud layer (0~1)
        firstHit = true
        totalRange = (CLOUD_CENTER - CLOUD_BOTTOM) + (CLOUD_TOP - CLOUD_CENTER)
    
        for i in 0 .. samples-1:
            // 4.1 Sampling noise (height field)
            noiseHi = sampleNoiseHeight(p.xz, timeOffsetHigh)
            noiseLo = sampleNoiseHeight(p.zx, timeOffsetLow)  // Optional multi-layer mixing
            noise   = mixAndSmooth(noiseHi, noiseLo)
    
            // 4.2 Calculate the upper and lower boundaries of the cloud layer based on the threshold
            v    = (noise - umbral) / (1 - umbral)
            inf  = CLOUD_CENTER - v * (CLOUD_CENTER - CLOUD_BOTTOM)
            sup  = CLOUD_CENTER + v * (CLOUD_TOP    - CLOUD_CENTER)
    
            // 4.3 Determine if the current sampling point py is inside the cloud layer
            if inf < p.y < sup:
                cv += min(stepLength, sup - inf)
                if firstHit:
                    den      = (sup - p.y) / totalRange
                    firstHit = false
            else if withinSoftEdge(p.y, inf, sup, CLOUD_EDGE_WIDTH):
                // Edge transition: Add a little accumulation softly
                cv += softBlendAmount(p.y, inf, sup) 
                if firstHit:
                    den      = (sup - p.y) / totalRange
                    firstHit = false
    
            p += stepV
    
        // 5. Normalized cumulative value and depth
        opacity   = clamp(cv / (2 * CLOUD_EDGE_WIDTH / viewVector.y), 0, 1)
        density   = clamp(den, 0.0001, 1)
    
        // 6. Select colors by density: Low—Medium—High
        if density < 0.33:
            baseColor = COL_SH  // Cloud background
        else if density < 0.66:
            baseColor = COL_MD  // Mid-layer color
        else:
            baseColor = COL_HI  // Cloud Top Color
    
        // 7. Viewpoint Highlights: Only high-density areas are highlighted.
        if density > 0.66:
            highlight = dot(computeNormal(density), -viewVector)
            baseColor = Mix(baseColor, COL_HI, highlight * brightFactor)
    
        // 8. Self-shadow: The thicker the shadow, the darker it is.
        baseColor *= Mix(1.0, 0.85, density^2 * 0.5)
    
        // 9. Edge Stroke: Enhance the contour based on the depth field gradient
        edgeFactor = computeEdgeFactor(opacity)
        baseColor  = Mix(baseColor, OUTLINE_COLOR, edgeFactor * 0.3)
    
        // 10. Adjust the darkness at night according to the brightness of the sky.
        nightFactor = computeNightFactor(skyColor)
        baseColor  *= nightFactor
    
        // 11. Final blend: Cloud-covered background
        alpha = opacity * clamp((viewVector.y - 0.05) * 5.0, 0, 1)
        return Mix(skyColor, baseColor, alpha)
    
    JavaScript
  • Prevent ‘Zone.Identifier’ Files from Appearing in WSL2

    Prevent 'Zone.Identifier' Files from Appearing in WSL2

    When using Windows Subsystem for Linux 2, we access our Linux file system using Windows Explorer. When we copying and pasting files, might notice addition files like 'xxx Zone.Identifier‘'.

    The 'Zone.Identifier' file is a Windows Attachment Manager feature that stores security information about files. However, since WSL2 uses an ext4 file system, Windows cannot store ADS natively. Instead, it creates a visible 'Zone.Identifier' file in the same directory.

    1. Delete Existing Files

    If you already have 'Zone.Identifier' files in your WSL2 directories, use one of the following methods to remove them.

    find ~/[Your Path] -name "*:Zone.Identifier" -delete
    Bash

    2. Disable Windows from Generating 'Zone.Identifier'

    If you frequently access WSL2 files from Windows and want to permanently stop Windows from attaching 'Zone.Identifier', you can disable this feature via Group Policy or Registry Editor.

    Press Win + R, type gpedit.msc, and hit Enter.

    Configuration → Administrative Templates → Windows Components → Attachment Manager
    用户配置 → 管理模板 → Windows 组件 → 附件管理器(In Chinese)

    EnableDo not preserve zone information in file attachments

  • [Leetcode]4 Mar. 2025. Count Trailing Zeros in Factorial

    Description:

    Given an integer $n$ , return the number of trailing zeros in $n!$ (n factorial).

    Factorial is defined as:
    $$
    n! = n \times (n – 1) \times (n – 2) \times \dots \times 3 \times 2 \times 1
    $$

    Examples:

    Example 1:
    Input: n = 3
    Output: 0
    Explanation: 3! = 6, which has no trailing zeros.

    Example 2:
    Input: n = 5
    Output: 1
    Explanation: 5! = 120, which has one trailing zero.

    Example 3:
    Input: n = 0
    Output: 0

    Constraints:

    • $0 \leq n \leq 10^4$

    class Solution {
    public:
        int trailingZeroes(int n) {
            int count;
            while(n >= 5){
                n = n / 5;
                count += n;
            }
            return count;
        }
    };
    
    /*
    ## Counting 5 as a factor.
    
    We Need To Determine how many times "10" appears as a factor in the product.
    
    10 is formed by multiplying 2 & 5, we can only count 5 as a factor.
    
    For example:
    - 3! = 3*2*1 = 6 -> +0
    - 5! = 5*4*3*2*1 = 120 -> +1
    - 10! = 10*9*...*3*2*1 = 3628800 -> +2
    */
    C++

  • Typst is a semi-finished product.

    Typst is a semi-finished product.

  • 真三国无双起源 貂蝉mod

    Dynasty Warriors Origins Diao Chan mod

    How to use:UnzipJust put it in the root directory. Use the default costume. If you want to change back to the original character, just delete the dll.