Saturday, August 23, 2025

Friday, August 8, 2025

Claude Plots Well

 


Incredibly, Claude was able to notice (I couldn't see it) that WTI was overlapped and hard to see at the bottom by USD index. After query I requested "bigger marker" which it dutifully did. Well done Claude (and also Grok).

Grok + Claude = This Plot





[Generation Method]
I initiated discussion with Grok, followed until Grok thew error in creating JSON graphic, copy/paste JSON into Claude who plotted the graphic, using similar logic/reasoning as Grok (but was able to find a missing semicolon that initially choked it)

[Claude "insights" are less verbose and possibly less useful than Grok]








[JSON]

 import React, { useState } from 'react';

import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';


const BloombergMetricsDashboard = () => {

  const [selectedMetrics, setSelectedMetrics] = useState({

    'S&P 500 Index': true,

    'Global PMI': true,

    'U.S. CPI (%)': true,

    'U.S. Unemployment Rate (%)': true,

    'VIX Index': true,

    'U.S. Dollar Index (DXY)': true,

    'WTI Crude Oil Prices ($)': true,

    'Corporate Bond Yields (%)': true,

    'MSCI World Equity Index': true,

    'Mean 55-Inch OLED TV Price ($)': true

  });


  const data = [

    {

      year: '2020',

      'S&P 500 Index': 3756,

      'Global PMI': 49.0,

      'U.S. CPI (%)': 1.2,

      'U.S. Unemployment Rate (%)': 8.1,

      'VIX Index': 22.8,

      'U.S. Dollar Index (DXY)': 89.9,

      'WTI Crude Oil Prices ($)': 48,

      'Corporate Bond Yields (%)': 7.51,

      'MSCI World Equity Index': 2500,

      'Mean 55-Inch OLED TV Price ($)': 1600

    },

    {

      year: '2021',

      'S&P 500 Index': 4766,

      'Global PMI': 54.0,

      'U.S. CPI (%)': 4.7,

      'U.S. Unemployment Rate (%)': 5.4,

      'VIX Index': 17.2,

      'U.S. Dollar Index (DXY)': 95.9,

      'WTI Crude Oil Prices ($)': 75,

      'Corporate Bond Yields (%)': -1.54,

      'MSCI World Equity Index': 3000,

      'Mean 55-Inch OLED TV Price ($)': 1450

    },

    {

      year: '2022',

      'S&P 500 Index': 4506,

      'Global PMI': 50.0,

      'U.S. CPI (%)': 8.0,

      'U.S. Unemployment Rate (%)': 3.6,

      'VIX Index': 21.0,

      'U.S. Dollar Index (DXY)': 103.2,

      'WTI Crude Oil Prices ($)': 94,

      'Corporate Bond Yields (%)': -13.01,

      'MSCI World Equity Index': 2875,

      'Mean 55-Inch OLED TV Price ($)': 1350

    },

    {

      year: '2023',

      'S&P 500 Index': 4882,

      'Global PMI': 49.5,

      'U.S. CPI (%)': 4.1,

      'U.S. Unemployment Rate (%)': 3.6,

      'VIX Index': 14.0,

      'U.S. Dollar Index (DXY)': 101.3,

      'WTI Crude Oil Prices ($)': 77,

      'Corporate Bond Yields (%)': 5.53,

      'MSCI World Equity Index': 3125,

      'Mean 55-Inch OLED TV Price ($)': 1500

    },

    {

      year: '2024',

      'S&P 500 Index': 5256,

      'Global PMI': 50.0,

      'U.S. CPI (%)': 3.0,

      'U.S. Unemployment Rate (%)': 4.1,

      'VIX Index': 15.0,

      'U.S. Dollar Index (DXY)': 103.0,

      'WTI Crude Oil Prices ($)': 80,

      'Corporate Bond Yields (%)': 1.25,

      'MSCI World Equity Index': 3375,

      'Mean 55-Inch OLED TV Price ($)': 1450

    },

    {

      year: '2025',

      'S&P 500 Index': 5782,

      'Global PMI': 49.7,

      'U.S. CPI (%)': 2.7,

      'U.S. Unemployment Rate (%)': 4.2,

      'VIX Index': 16.0,

      'U.S. Dollar Index (DXY)': 98.7,

      'WTI Crude Oil Prices ($)': 70,

      'Corporate Bond Yields (%)': 3.71,

      'MSCI World Equity Index': 3645,

      'Mean 55-Inch OLED TV Price ($)': 1800

    }

  ];


  const metricColors = {

    'S&P 500 Index': '#1f77b4',

    'Global PMI': '#2ca02c',

    'U.S. CPI (%)': '#d62728',

    'U.S. Unemployment Rate (%)': '#9467bd',

    'VIX Index': '#8c564b',

    'U.S. Dollar Index (DXY)': '#e377c2',

    'WTI Crude Oil Prices ($)': '#7f7f7f',

    'Corporate Bond Yields (%)': '#bcbd22',

    'MSCI World Equity Index': '#17becf',

    'Mean 55-Inch OLED TV Price ($)': '#ff9896'

  };


  const leftAxisMetrics = ['S&P 500 Index', 'U.S. Dollar Index (DXY)', 'WTI Crude Oil Prices ($)', 'MSCI World Equity Index', 'Mean 55-Inch OLED TV Price ($)'];

  const rightAxisMetrics = ['Global PMI', 'U.S. CPI (%)', 'U.S. Unemployment Rate (%)', 'VIX Index', 'Corporate Bond Yields (%)'];


  const toggleMetric = (metric) => {

    setSelectedMetrics(prev => ({

      ...prev,

      [metric]: !prev[metric]

    }));

  };


  const CustomTooltip = ({ active, payload, label }) => {

    if (active && payload && payload.length) {

      return (

        <div className="bg-white p-4 border border-gray-300 rounded shadow-lg">

          <p className="font-semibold text-gray-800">{`Year: ${label}`}</p>

          {payload.map((entry, index) => (

            <p key={index} style={{ color: entry.color }} className="text-sm">

              {`${entry.dataKey}: ${entry.value}`}

            </p>

          ))}

        </div>

      );

    }

    return null;

  };


  return (

    <div className="w-full h-screen bg-gradient-to-br from-slate-50 to-blue-50 p-6">

      <div className="max-w-7xl mx-auto">

        <h1 className="text-3xl font-bold text-gray-800 mb-6 text-center">

          Bloomberg Top 10 Metrics with 55-Inch OLED TV Price Dashboard

        </h1>

        

        <div className="bg-white rounded-lg p-6 mb-6 shadow-lg">

          <h2 className="text-lg font-semibold mb-4 text-gray-700">Select Metrics to Display:</h2>

          

          <div className="grid md:grid-cols-2 gap-6">

            <div>

              <h3 className="text-md font-medium mb-3 text-blue-700">Left Axis (Index Points / $):</h3>

              <div className="grid grid-cols-1 gap-2">

                {leftAxisMetrics.map((metric) => (

                  <label key={metric} className="flex items-center space-x-2 cursor-pointer">

                    <input

                      type="checkbox"

                      checked={selectedMetrics[metric]}

                      onChange={() => toggleMetric(metric)}

                      className="w-4 h-4"

                    />

                    <span

                      className="w-4 h-4 rounded"

                      style={{ backgroundColor: metricColors[metric] }}

                    ></span>

                    <span className="text-sm font-medium text-gray-600">{metric}</span>

                  </label>

                ))}

              </div>

            </div>

            

            <div>

              <h3 className="text-md font-medium mb-3 text-green-700">Right Axis (% / Index Points):</h3>

              <div className="grid grid-cols-1 gap-2">

                {rightAxisMetrics.map((metric) => (

                  <label key={metric} className="flex items-center space-x-2 cursor-pointer">

                    <input

                      type="checkbox"

                      checked={selectedMetrics[metric]}

                      onChange={() => toggleMetric(metric)}

                      className="w-4 h-4"

                    />

                    <span

                      className="w-4 h-4 rounded"

                      style={{ backgroundColor: metricColors[metric] }}

                    ></span>

                    <span className="text-sm font-medium text-gray-600">{metric}</span>

                  </label>

                ))}

              </div>

            </div>

          </div>

        </div>


        <div className="bg-white rounded-lg p-6 shadow-lg">

          <ResponsiveContainer width="100%" height={600}>

            <LineChart data={data} margin={{ top: 20, right: 60, left: 60, bottom: 60 }}>

              <CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />

              <XAxis 

                dataKey="year" 

                stroke="#666"

                fontSize={12}

              />

              <YAxis 

                yAxisId="left"

                orientation="left"

                stroke="#1f77b4"

                fontSize={12}

                domain={[0, 6000]}

                label={{ value: 'Index Points / $', angle: -90, position: 'insideLeft' }}

              />

              <YAxis 

                yAxisId="right"

                orientation="right"

                stroke="#2ca02c"

                fontSize={12}

                domain={[-15, 60]}

                label={{ value: '% / Index Points', angle: 90, position: 'insideRight' }}

              />

              <Tooltip content={<CustomTooltip />} />

              <Legend 

                wrapperStyle={{ paddingTop: '20px' }}

                iconType="line"

              />

              

              {leftAxisMetrics.map((metric) => (

                selectedMetrics[metric] && (

                  <Line

                    key={metric}

                    yAxisId="left"

                    type="monotone"

                    dataKey={metric}

                    stroke={metricColors[metric]}

                    strokeWidth={2}

                    dot={{ r: 4, fill: metricColors[metric] }}

                    activeDot={{ r: 6, fill: metricColors[metric] }}

                  />

                )

              ))}

              

              {rightAxisMetrics.map((metric) => (

                selectedMetrics[metric] && (

                  <Line

                    key={metric}

                    yAxisId="right"

                    type="monotone"

                    dataKey={metric}

                    stroke={metricColors[metric]}

                    strokeWidth={2}

                    dot={{ r: 4, fill: metricColors[metric] }}

                    activeDot={{ r: 6, fill: metricColors[metric] }}

                  />

                )

              ))}

            </LineChart>

          </ResponsiveContainer>

        </div>


        <div className="mt-6 bg-white rounded-lg p-6 shadow-lg">

          <h2 className="text-lg font-semibold mb-4 text-gray-700">Key Insights (2020-2025):</h2>

          <div className="grid md:grid-cols-2 gap-4 text-sm text-gray-600">

            <div>

              <h3 className="font-semibold text-gray-800 mb-2">Market Performance:</h3>

              <ul className="space-y-1">

                <li>• S&P 500 shows consistent growth from 3,756 to 5,782</li>

                <li>• MSCI World Index recovered strongly after 2022 dip</li>

                <li>• VIX volatility declined from pandemic highs</li>

              </ul>

            </div>

            <div>

              <h3 className="font-semibold text-gray-800 mb-2">Economic Indicators:</h3>

              <ul className="space-y-1">

                <li>• CPI peaked at 8% in 2022, moderating to 2.7% by 2025</li>

                <li>• Unemployment normalized from pandemic spike</li>

                <li>• Dollar strength peaked in 2022-2024 period</li>

              </ul>

            </div>

            <div>

              <h3 className="font-semibold text-gray-800 mb-2">Commodities & Tech:</h3>

              <ul className="space-y-1">

                <li>• Oil prices volatile, ending lower in 2025 at $70</li>

                <li>• OLED TV prices declined 2020-2022, rising to $1,800 by 2025</li>

                <li>• Corporate bond yields highly volatile with negative periods</li>

              </ul>

            </div>

            <div>

              <h3 className="font-semibold text-gray-800 mb-2">Manufacturing:</h3>

              <ul className="space-y-1">

                <li>• Global PMI hovering around 50 (expansion/contraction line)</li>

                <li>• Manufacturing activity remained relatively stable</li>

              </ul>

            </div>

          </div>

        </div>

      </div>

    </div>

  );

};


export default BloombergMetricsDashboard;

Sunday, July 27, 2025

Aerospoke Front Wheel Mass with Tyre and Hub 1940g. VS 1060 Shimano Dura Ace C40. 1010g C24.

  • Trying out a new-used Aerospoke rim brake wheel, 1940g with butyl rubber tube + tyre and hub.
    • Without Skewer
  • Shimano Dura Ace C40 front rim brake wheel is 1060g.
    • With Skewer
  • C24 1010g
    • With Skewer
  • 83% more Mass for the front wheel!
  • Not for climbing!

Monday, May 5, 2025

Tomales Bay Mooring Programme - Cost Summary.

 Starting in 2018, the Cal State Land Commission began a process to administer moorings in Tomales Bay.

https://farallones.noaa.gov/eco/tomales/mooringprogram.html

As of 2025, Here are the costs for those interested in mooring a boat in Tomales Bay:

  • $1525.00 application fee https://www.slc.ca.gov/
  • $  432.11 Cal State Land Commission "STAFF/PROJECT CHARGES"
  • $    66.48
  • $  140.21
  • ________
  • $2,163.80
  • $2,500.00 Single Drum Mooring (50 Gallon Drum, filled with Concrete and eye bolt exposed, 2 anchor chain rodes and buoy/float)
  • $4,663.00
  • + Annual Insurance (mandatory) ~$1000/year
  • + Annual Rent: $167/annum pegged to inflation.
  • Guest Mooring Allowed
  • Sublease not permitted

Monday, November 18, 2024

SFM - Sprouts - a component of the Russel 2000. Inflation.

Sprouts dates back to 2002.

https://about.sprouts.com/about/ 


Note the steep price rise from 2023 to present. Represents True Inflation.

Trump Bump Slows. Bitcoin shows record strength.

 Bitcoin hit the $92,000 and impressive strength relative to the S&P this Monday, Nov. 18th. Does this mean that Crypto is here to stay? There is certainly a Trump-Bump, but unlike the S&P, Bitcoin has remained as historical max figures even as news stories ebb and flow.

(Courtesy Fidelity Online)

The Red Rollercoaster is Bitcoin - Grey is FXAIX - Christmas Colours are Brazil Ferrous Miner "Vale"


What could Elon cut? VA is at top of list for size.

Approaching half a million employees, Veteran Affairs may be at the top of the chopping block for government cuts. However, VA median compensation is third from the bottom in the chart prepared by the WSJ.


Source: WSJ 

Sunday, November 17, 2024

Canyon Ultimate 2022 Headset Bearings from Acros

Gouge of lower bearing outer race seat


Rough texture of lower bearing seat - legacy of carbon fibre?

 


Lower is the taller of the 2 at 6mm (vs 5.5mm for the upper bearing)



Original left, replacements right, direct from Acros ~62 Euro

Thursday, November 14, 2024

Vale to invest in Oman

 In late October, Ferrous Miner Vale announced this partnership with Jinnan Steel to invest in Oman.

SOHAR site in Oman

Oman and the Gulf of Oman



In other news, VBM - Vale Base Metals CEO Shaun Usmar was present on the Vale 3Q Earnings Call to speak about diversification in Vale's "Mineral Endowment", which he repeated stated was surprisingly good.
  • https://vale.com/w/vale-base-metals-appoints-shaun-usmar-as-new-chief-executive-officer-1
  • https://www.bloomberg.com/news/articles/2024-07-03/vale-picks-mining-veteran-usmar-to-lead-base-metals-turnaround


Wednesday, November 13, 2024

Hobie 20 Trapeze Adjusters - Image

 

Retrieval Bungie to top "Dog-Bone Ring"




Cam Cleat Underside showing Springs


Tuesday, November 12, 2024

日本郵船 NYK 9101 NPNYY


Avoid Red Sea, takes more time


Transition from Corona Container Rates






1円の円安


https://www.youtube.com/watch?v=f5KJOeVY9LE&ab_channel=%E6%97%A5%E6%9C%AC%E9%83%B5%E8%88%B9%E5%BA%83%E5%A0%B1%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97_NYKLineOfficial

Cash Flow (1億は10の8乗円)




https://finance.yahoo.co.jp/quote/9101.T?term=1w



 社長 


Doesn't bode well for VALE (Iron Ore Projected Shipments Down)

https://www.nyk.com/english/news/2023/20230710_02.html

https://www.nyk.com/english/news/2024/20241031_02.html

Wednesday, November 6, 2024

Trump re-elected in '24, S&P jumps 2%. Implications.

Deja Vu, but no surprise to betting markets, Trump gives his '24 Election victory speech today with Harris not holding the votes that Democrats won in 2020. 

2024 Marks the Return of Trump, 78

At 78, Trump is older, and more militant, and will benefit from a Republican Senate and possibly also the House. It is a startling rebuke for Democrats, who, like in 2016, seemed close to a victory, but somehow without margins of safety that would have allowed a victory. This time around, in contrast to 2016, the Economist correctly predicted the election along the lines of betting markets - a Trump victory.

Celebrity endorsements and control of the news cycled assured that Trump voters were treated to a spectacle in the run-up to Nov. 5th. The world's richest man, Billionaire Elon Musk, rallied supporters around Trump, a lesser billionaire.

Implications:

Geopolitics:

  • Will the President follow through on assurances to wind down the Russia-Ukrainian conflict?
    • North Korea has sent fighters to support Russia following Putin-Kim meetings.
  • China, fearing perceived or actual new US tariffs, may elect to boost its domestic tariffs, which could bode well for their economy. 
    • Which sectors of China's economy will receive this boost?
  • Israeli rioters took to the streets in Tel Aviv calling for an end to war with Hizbu'llah and Hamas and a return of remaining hostages. 
    • This follows Israel's first direct & open strike in the region since targeting an Iraqi reactor in 1981. At the time Israel backed Iran against Iraq in that conflict.
    • Since that time, Israel has countered Hizbu'llah and Hamas in the region without directly attacking Iran.
US Economy and Stock Markets
  • S&P Stock rallied over 2% Wednesday.
    • TSLA up 13%+
    • Ford up ~3%
  • NVIDIA overtakes AAPL as most valuable company by market Cap as AI investors focus on it, while SuperMicro flounders due to governance concerns.
  • TMTG flounders due to its loss-making status as a proxy for Trump's comeback and it appears to not even be a legitimate business, merely another marker in Trump's bid to remain in the headlines -- in that sense, perhaps unsurprisingly and following Trump's pattern, it continues to fail as a business but succeed as a promotional tool.
  • BABA down 3%

Image - Bloomberg '24

New York Times Elector Map


California District 16, former Mayor Sam Liccardo leads Evan Low in current polling.
Liccardo leads Low 60/40 in District 16
Low upbeat, applauds voters for turnout



SF Mayoral Race - Laurie leads




References: 

https://www.ktvu.com/election/sam-liccardo-evan-low-house-district-16-results




Tuesday, November 5, 2024

Canyon CF SL 8 Headset Bearings from Acros (is44)

I came across what I believe to be the bearing set provider for Canyon Ultimate (and other road models)


https://acros-components.com/en/headsets/is44/is44-bearingset-for-canyon

 
is44 bearing set

CF SL 8 - Deutsche Version


部品三個の図面