340 万枚の太陽光パネル

2026/04/22 21:04

340 万枚の太陽光パネル

RSS: https://news.ycombinator.com/rss

要約

Japanese 訳:

米国における地上設置太陽光エネルギーのバージョン 2 のデータセット(GM-SEUS)がリリースされ、340 万を超えるパネルを含む大幅な拡張を遂げ、詳細な屋上配列コレクションを導入しました。このアップデートには、OSM や CECSFC などの主に 13 のデータベースから取得された 5,822 件の新たな屋上レコードと、OSM および USPVDB からの主なソースである 18,980 レコードの arrays データセットが加えられています。リリース処理は、Microsoft の Ubuntu for Windows サブシステムを介して Windows 11 Pro で Ubuntu 24 LTS を動作させ、AMD Ryzen 9 9950X CPU、96 GB DDR5 メモリを搭載したワークステーションを使用して行われ、GDAL 3.9.3、DuckDB v1.5.1(H3、JSON、Lindel、Parquet、Spatial エクステンション付き)、および HCMGIS プラグインを含む QGIS バージョン 4.0.1 を利用しました。

本データセットは、設置年(農場は 1985–2025 年、屋上は 2003–2025 年)と地上設置型農場および住宅用屋上の両方に対する技術容量に関する粒度の細かいメタデータを提供します。明確な歴史的トレンドが認められます:1980 年代以来、農場あたりの平均 AC 容量と DC 容量は一貫して増加しており、OSM などの多様なデータベースから統計記録を取得することでこれらの変化を効果的に追跡しています(ただし、屋上方位角などの一部の属性ではデータの不完全性が顕著です)。特定のカラムごとの NULL 値の被覆状況には大きなばらつきがあり、例えば屋上配列では方位角(89.63%)、capMWAC(89.52%)、傾き(90.64%)などの属性で欠落率が非常に高い一方、arrays データセットの容量フィールドでは NULL 値が 0% です。本データセットは単結晶/多結晶および薄膜を含むモジュールタイプをカバーし、大多数の設置では固定軸または単軸配置を採用しています。この強化されたデータセットは、長期的な容量トレンドと地域別分布の高度な分析を支援し、新たなソースが配列コレクションを継続的に補完する中、業界関係者が将来の成長をより効果的に計画できるようにします。

本文

GM-SEUS データセットレビュー(バージョン 2)

10 月に、米国における地上設置型太陽エネルギー資源のデータセット(GM-SEUS: Ground-Mounted Solar Energy in the United States)をレビューしました。このデータセットは、米国内に存在する主な太陽光発電所のアレイとパネルを対象として作成されています。このデータセットのバージョン 1 は 290 万枚のパネルを含んでいましたが、今週月曜日にリリースされたバージョン 2 では、より多くの 340 万枚以上のパネルが含まれています。アレイやパネルの更新に加え、新しい屋上アレイデータセットも追加されました。本投稿では、GM-SEUS データセットのバージョン 2(v2)についてレビューいたします。

私のワークステーション環境

私は AMD Ryzen 9 9950X プロセッサ(クロック周波数 5.7 GHz)を使用しています。この CPU は 16 コア、32 スレッドを搭載し、L1 キャッシュは 1.2 MB、L2 キャッシュは 16 MB、L3 キャッシュは 64 MB の容量を有しています。液体冷却システムが取り付けられており、広々としたフルサイズの Cooler Master HAF 700 コンピュータケースに収められています。

このシステムには、時定格速度 4,800 MT/s の DDR5 メモリ 96 GB と、読み取り速度が最大 12,400 MB/s に対応する第 5 世代 Crucial T700 4 TB NVMe M.2 SSD が搭載されています。SSD の温度管理を助けるためにヒートシンクも装着されており、これがこのシステムの C ドライブとして使用されています。

システムは、完全なモジュール化デザインの Corsair パワーサプライ(1,200 ワット)で電力を供給され、ASRock X870E Nova 90 マザーボード上を実行しています。

Ubuntu 24 LTS を Microsoft の「Windows 用の Ubuntu」機能を利用して Windows 11 Pro にインストールして使用しています。Linux ベースのデスクトップ環境をメインのワーク環境として採用していない理由をご質問いただく可能性がありますので、その点について補足いたします。私は NVIDIA GTX 1080 GPU を使用しており、これは Windows においてより優れたドライバーサポートを受け、かつ ArcGIS Pro は原生に Windows のみに対応しているためです。

前置条件のインストール

本投稿でのデータ解析には GDAL 3.9.3 を使用します。

$ sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
$ sudo apt update
$ sudo apt install \
    gdal-bin

また、本投稿では DuckDB とその H3、JSON、Lindel、Parquet、Spatial の拡張機能を使用します。

$ cd ~
$ wget -c https://github.com/duckdb/duckdb/releases/download/v1.5.1/duckdb_cli-linux-amd64.zip
$ unzip -j duckdb_cli-linux-amd64.zip
$ chmod +x duckdb
$ ~/duckdb

DuckDB を実行し、必要な拡張機能をインストールします:

INSTALL h3 FROM community;
INSTALL lindel FROM community;
INSTALL json;
INSTALL parquet;
INSTALL spatial;

.timer on
.width 180
LOAD h3;
LOAD lindel;
LOAD json;
LOAD parquet;
LOAD spatial;

本投稿で使用された地図は、QGIS バージョン 4.0.1 で描画されました。QGIS は Windows、macOS、Linux のいずれのオペレーティングシステムでも動作するデスクトップアプリケーションであり、近年の人気も高く、世界中から月間およそ 1,500 万回の起動数があると言われているアプリです。本投稿では、Esri からベースマップを追加するために QGIS の HCMGIS プラグインを使用しました。

解析用データセット

以下のコマンドにより、3.4 GB の ZIP ファイルがダウンロードされます。その後、それより GeoPackage(GPKG)ファイルの任意の内容を抽出します。

$ wget -O GMSEUS_v2.zip \
    'https://zenodo.org/records/19581821/files/GMSEUS.zip?download=1'
$ unzip -j GMSEUS_v2.zip "*.gpkg"

以下のコマンドは、このデータセット内の GPKG ファイルで使用されている投影座標系(Projection)を示しています。

$ gdalsrsinfo \
    -o proj4 \
    GMSEUS_RooftopArrays_2025_v2_0.gpkg

+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

以下では、屋上アレイデータを Parquet 形式に変換します。この変換には DuckDB バージョン 1.4.4 の使用が必要で、バージョン 1.5.1 では例外エラーが発生したためです。

COPY (
   WITH a AS (
       SELECT Source,
              grndCvr,
              modType,
              mount,
              nativeID,
              roofArrID,
              area: IF(area::TEXT='-9999.0', NULL, area::DOUBLE),
              azimuth: IF(azimuth::TEXT='-9999.0', NULL, azimuth::DOUBLE),
              capMWAC: IF(capMWAC::TEXT='-9999.0', NULL, capMWAC::DOUBLE),
              capMWDC: IF(capMWDC::TEXT='-9999.0', NULL, capMWDC::DOUBLE),
              tilt: IF(tilt::TEXT='-9999.0', NULL, tilt::DOUBLE),
              instYr: CASE WHEN instYr::INT = -9999 THEN NULL ELSE instYr     END,
              ST_FLIPCOORDINATES(
                  ST_TRANSFORM(
                      geom,
                      '+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
                      'EPSG:4326')) geometry
       FROM ST_READ('GMSEUS_RooftopArrays_2025_v2_0.gpkg')
   )
   SELECT   * EXCLUDE (geometry),
            {'xmin': ST_XMIN(ST_EXTENT(geometry)),
             'ymin': ST_YMIN(ST_EXTENT(geometry)),
             'xmax': ST_XMAX(ST_EXTENT(geometry)),
             'ymax': ST_YMAX(ST_EXTENT(geometry))} AS bbox,
             ST_ASWKB(geometry) geometry
   FROM     a
   ORDER BY HILBERT_ENCODE([ST_Y(ST_CENTROID(geometry)),
                            ST_X(ST_CENTROID(geometry))]::double[2])
) TO 'GMSEUS_RooftopArrays_2025_v2_0.parquet' (
   FORMAT            'PARQUET',
   CODEC             'ZSTD',
   COMPRESSION_LEVEL 22,
   ROW_GROUP_SIZE    15000);

このデータセットには 5,822 レコードが含まれています。

SELECT COUNT(*)
FROM   'GMSEUS_RooftopArrays_2025_v2_0.parquet';

以下は、各カラムに関するユニーク値数と NULL 値の割合の概要です。

SELECT   column_name,
         column_type,
         null_percentage,
         approx_unique,
         min,
         max
FROM     (SUMMARIZE
          FROM READ_PARQUET('GMSEUS_RooftopArrays_2025_v2_0.parquet'))
WHERE    column_name != 'geometry'
AND      column_name != 'bbox'
ORDER BY LOWER(column_name);
column_namecolumn_typenull_percentageapprox_uniqueminmax
areaDOUBLE2.77518015.0487111.0
azimuthDOUBLE89.631560.0530.02323408881
capMWACDOUBLE89.52600.274.9
capMWDCDOUBLE87.121660.0044899.7
grndCvrVARCHAR97.612imperviousvegetation
instYrBIGINT72.432320032025
modTypeVARCHAR0.002c-sithin-film
mountVARCHAR87.535dual_axisunknown
nativeIDVARCHAR0.0045401Xebec 1 solar farm
roofArrIDBIGINT0.00583015822
SourceVARCHAR0.0015CCVPVgspt
tiltDOUBLE90.64310.052.0

次に、パネルデータを Parquet 形式に変換します。

COPY (
   WITH a AS (
       SELECT Source,
              arrayID: arrayID::INT,
              panelID: panelID::INT,
              pnlSource,
              rowArea,
              rowAzimuth,
              rowLength,
              rowMount,
              rowSpace: IF(rowSpace::TEXT='-9999.0', NULL, rowSpace::DOUBLE),
              rowWidth,
              ST_FLIPCOORDINATES(
                  ST_TRANSFORM(
                      geom,
                      '+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
                      'EPSG:4326')) geometry
       FROM ST_READ('GMSEUS_Panels_Final_2025_v2_0.gpkg')
   )
   SELECT   * EXCLUDE (geometry),
            {'xmin': ST_XMIN(ST_EXTENT(geometry)),
             'ymin': ST_YMIN(ST_EXTENT(geometry)),
             'xmax': ST_XMAX(ST_EXTENT(geometry)),
             'ymax': ST_YMAX(ST_EXTENT(geometry))} AS bbox,
             ST_ASWKB(geometry) geometry
   FROM     a
   ORDER BY HILBERT_ENCODE([ST_Y(ST_CENTROID(geometry)),
                            ST_X(ST_CENTROID(geometry))]::double[2])
) TO 'GMSEUS_Panels_Final_2025_v2_0.parquet' (
   FORMAT            'PARQUET',
   CODEC             'ZSTD',
   COMPRESSION_LEVEL 22,
   ROW_GROUP_SIZE    15000);

このデータセットには、3,429,157 レコードが含まれています。

SELECT COUNT(*)
FROM   'GMSEUS_Panels_Final_2025_v2_0.parquet';

以下は、各カラムに関するユニーク値数と NULL 値の割合の概要です。

SELECT   column_name,
         column_type,
         null_percentage,
         approx_unique,
         min,
         max
FROM     (SUMMARIZE
          FROM READ_PARQUET('GMSEUS_Panels_Final_2025_v2_0.parquet'))
WHERE    column_name != 'geometry'
AND      column_name != 'bbox'
ORDER BY LOWER(column_name);
column_namecolumn_typenull_percentageapprox_uniqueminmax
arrayIDINTEGER0.0312653118980
panelIDINTEGER0.00332376513429157
pnlSourceVARCHAR0.005CCVPVOSM
rowAreaDOUBLE0.0010010515.019982.68
rowAzimuthDOUBLE0.002202990.0540.0
rowLengthDOUBLE0.00255313.96737.38
rowMountVARCHAR0.003dual_axissingle_axis
rowSpaceDOUBLE1.2718360.0120.0
rowWidthDOUBLE0.0022580.45135.33
SourceVARCHAR0.0012CCVPVUSPVDB

次に、アレイとパネルのデータセットを Parquet 形式に変換します。

COPY (
   WITH a AS (
       SELECT COUNTYFP,
              GCR1,
              GCR2,
              STATEFP,
              Source,
              arrayID,
              avgAzimuth: IF(avgAzimuth::TEXT='-9999.0', NULL, avgAzimuth::DOUBLE),
              avgLength: IF(avgLength::TEXT='-9999.0', NULL, avgLength::DOUBLE),
              avgSpace: IF(avgSpace::TEXT='-9999.0', NULL, avgSpace::DOUBLE),
              avgWidth: IF(avgWidth::TEXT='-9999.0', NULL, avgWidth::DOUBLE),
              capMWAC,
              capMWACest,
              capMWDC,
              capMWDCest,
              effInit: IF(effInit::TEXT='-9999.0', NULL, effInit::DOUBLE),
              grndCvr,
              instYr: CASE WHEN instYr::INT = -9999 THEN NULL ELSE instYr END,
              instYrEst: CASE WHEN instYrEst::INT = -9999 THEN NULL ELSE instYrEst END,
              modType,
              mount,
              nativeID: IF(nativeID::TEXT='unknown', NULL, nativeID),
              newBound,
              numRow,
              tilt: IF(tilt::TEXT='-9999.0', NULL, tilt::DOUBLE),
              tiltEst: CASE WHEN tiltEst::INT = -9999 THEN NULL ELSE tiltEst END,
              totArea,
              totRowArea,
              ST_FLIPCOORDINATES(
                  ST_TRANSFORM(
                      geom,
                      '+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
                      'EPSG:4326')) geometry
       FROM ST_READ('GMSEUS_Arrays_Final_2025_v2_0.gpkg')
   )
   SELECT   * EXCLUDE (geometry),
            {'xmin': ST_XMIN(ST_EXTENT(geometry)),
             'ymin': ST_YMIN(ST_EXTENT(geometry)),
             'xmax': ST_XMAX(ST_EXTENT(geometry)),
             'ymax': ST_YMAX(ST_EXTENT(geometry))} AS bbox,
             ST_ASWKB(geometry) geometry
   FROM     a
   ORDER BY HILBERT_ENCODE([ST_Y(ST_CENTROID(geometry)),
                            ST_X(ST_CENTROID(geometry))]::double[2])
) TO 'GMSEUS_Arrays_Final_2025_v2_0.parquet' (
   FORMAT            'PARQUET',
   CODEC             'ZSTD',
   COMPRESSION_LEVEL 22,
   ROW_GROUP_SIZE    15000);

このデータセットには 18,980 レコードが含まれています。

SELECT COUNT(*)
FROM   'GMSEUS_Arrays_Final_2025_v2_0.parquet';

以下は、各カラムに関するユニーク値数と NULL 値の割合の概要です。

SELECT   column_name,
         column_type,
         null_percentage,
         approx_unique,
         min,
         max
FROM     (SUMMARIZE
          FROM READ_PARQUET('GMSEUS_Arrays_Final_2025_v2_0.parquet'))
WHERE    column_name != 'geometry'
AND      column_name != 'bbox'
ORDER BY LOWER(column_name);
column_namecolumn_typenull_percentageapprox_uniqueminmax
arrayIDBIGINT0.0016914118980
avgAzimuthDOUBLE32.88586590.22540.0
avgLengthDOUBLE32.88126744.02360.128
avgSpaceDOUBLE32.8879650.02420.0
avgWidthDOUBLE32.8865280.86383.13
capMWACDOUBLE0.0041820.0031128.931
capMWACestDOUBLE0.0066200.0031352.693
capMWDCDOUBLE0.0072030.0031467.61
capMWDCestDOUBLE0.0088830.0041758.501
COUNTYFPVARCHAR0.00237001840
effInitDOUBLE0.07120.090.21
GCR1DOUBLE0.0050960.11.0
GCR2DOUBLE0.0059130.09430.9883
grndCvrVARCHAR0.003imperviousvegetation
instYrBIGINT0.002619852025
instYrEstBIGINT0.322320032025
modTypeVARCHAR0.003c-sithin-film
mountVARCHAR0.009dual_axisunknown
nativeIDVARCHAR0.23143421York Solar
newBoundBIGINT0.00201
numRowINTEGER0.001177090145
SourceVARCHAR0.0010CCVPVUSPVDB
STATEFPVARCHAR0.00490156
tiltDOUBLE46.39630.090.0
tiltEstBIGINT46.39301043
totAreaINTEGER0.00146693019603313
totRowAreaINTEGER0.0013415308537538

屋上太陽光発電アレイ

以下は、屋上太陽光発電アレイデータセットのヒートマップです。

CREATE OR REPLACE TABLE h3_4_stats AS
    SELECT   h3_4: H3_LATLNG_TO_CELL(
                        bbox.ymin,
                        bbox.xmin,
                        4),
             COUNT(*) num_recs
    FROM     'GMSEUS_RooftopArrays_2025_v2_0.parquet'
    GROUP BY 1;

COPY (
    SELECT geometry: ST_ASWKB(H3_CELL_TO_BOUNDARY_WKT(h3_4)::geometry),
           num_recs
    FROM   h3_4_stats
) TO 'GMSEUS_RooftopArrays_2025_v2_0.h3_4.parquet' (
        FORMAT 'PARQUET',
        CODEC  'ZSTD',
        COMPRESSION_LEVEL 22,
        ROW_GROUP_SIZE 15000);

このデータセットのソース別の件数です。

SELECT   COUNT(*),
         Source
FROM     'GMSEUS_RooftopArrays_2025_v2_0.parquet'
GROUP BY 2
ORDER BY 1 DESC;
count_star()Source
2175OSM
1835CECSFC
1024TZSAM
485USPVDB
93GRW
54GMSEUSdigArraysPanels_v2_0
46gspt
43SAM
24GMSEUSgeoref_v2_0
16CCVPV
15GPPDB
10CWSD
2InSPIRE

以下は、六角形の各領域ごとの主要なソースを示しています。

CREATE OR REPLACE TABLE h3_3s AS
    WITH b AS (
        WITH a AS (
            SELECT   h3_3: H3_LATLNG_TO_CELL(
                                bbox.ymin,
                                bbox.xmin,
                                3) ,
                     Source,
                     num_recs: COUNT(*)
            FROM     'GMSEUS_RooftopArrays_2025_v2_0.parquet'
            GROUP BY 1, 2
        )
        SELECT *,
               ROW_NUMBER() OVER (PARTITION BY h3_3
                                  ORDER BY     num_recs DESC) AS rn
        FROM   a
    )
    FROM     b
    WHERE    rn = 1
    ORDER BY num_recs DESC;

COPY (
    SELECT geom: H3_CELL_TO_BOUNDARY_WKT(h3_3)::GEOMETRY,
           Source
    FROM   h3_3s
) TO 'GMSEUS_RooftopArrays_2025_v2_0.Source.h3_3.parquet' (
    FORMAT 'PARQUET',
    CODEC  'ZSTD',
    COMPRESSION_LEVEL 22,
    ROW_GROUP_SIZE 15000);

以下は、設置年別によるモジュールタイプ(modType)と搭載方法(mount)の分類結果です。

WITH a AS (
    SELECT   modType,
             mount,
             cnt: COUNT(*)
    FROM     'GMSEUS_RooftopArrays_2025_v2_0.parquet'
    GROUP BY 1, 2
)
PIVOT    a
ON       modType
USING    SUM(cnt)
GROUP BY mount
ORDER BY mount;
mountc-sithin-film
dual_axis33NULL
fixed_axis3812
mixed2NULL
single_axis210NULL
unknown98NULL
NULL5096NULL

以下は、設置年別による面積の統計データです。

SELECT   instYr,
         count: COUNT(*),
         avg:   AVG(area)::INT,
         mean:  MEAN(area)::INT,
         max:   MAX(area)::INT
FROM     'GMSEUS_RooftopArrays_2025_v2_0.parquet'
WHERE    instYr IS NOT NULL
GROUP BY 1
ORDER BY 1;
instYrcountavgmeanmax
2003232630263018124
20051203422034220342
20061375873758737587
20076168481684827067
20084249892498930107
2009117877787730229
201024158341583443854
2011464151141511487111
201254133711337138923
2013471447614476151620
201424292892928965995
2015373413034130218080
201647210942109446138
20171052088220882315564
20182251358413584152636
20191022161321613111497
2020143160521605270018
20211201616916169101955
20221411734317343185698
20231641886518865137787
2024132147431474363190
20251481236312363135270

アレイとパネル

以下は、アレイデータセットのヒートマップです。

CREATE OR REPLACE TABLE h3_4_stats AS
    SELECT   h3_4: H3_LATLNG_TO_CELL(
                        bbox.ymin,
                        bbox.xmin,
                        4),
             COUNT(*) num_recs
    FROM     'GMSEUS_Arrays_Final_2025_v2_0.parquet'
    GROUP BY 1;

COPY (
    SELECT geometry: ST_ASWKB(H3_CELL_TO_BOUNDARY_WKT(h3_4)::geometry),
           num_recs
    FROM   h3_4_stats
) TO 'GMSEUS_Arrays_Final_2025_v2_0.h3_4.parquet' (
        FORMAT 'PARQUET',
        CODEC  'ZSTD',
        COMPRESSION_LEVEL 22,
        ROW_GROUP_SIZE 15000);

以下は、各ソースごとのレコード数です。

SELECT   COUNT(*),
         Source
FROM     'GMSEUS_Arrays_Final_2025_v2_0.parquet'
GROUP BY 2
ORDER BY 1 DESC;
count_star()Source
5222OSM
4024USPVDB
3278TZSAM
2288CECSFC
1697GMSEUSgeoref_v2_0
1291GMSEUSdigArraysPanels_v2_0
957GRW
155CCVPV
68CWSD

以下は、六角形の各領域ごとの主要なソースを示しています。

CREATE OR REPLACE TABLE h3_3s AS
    WITH b AS (
        WITH a AS (
            SELECT   h3_3: H3_LATLNG_TO_CELL(
                                bbox.ymin,
                                bbox.xmin,
                                3) ,
                     Source,
                     num_recs: COUNT(*)
            FROM     'GMSEUS_Arrays_Final_2025_v2_0.parquet'
            GROUP BY 1, 2
        )
        SELECT *,
               ROW_NUMBER() OVER (PARTITION BY h3_3
                                  ORDER BY     num_recs DESC) AS rn
        FROM   a
    )
    FROM     b
    WHERE    rn = 1
    ORDER BY num_recs DESC;

COPY (
    SELECT geom: H3_CELL_TO_BOUNDARY_WKT(h3_3)::GEOMETRY,
           Source
    FROM   h3_3s
) TO 'GMSEUS_Arrays_Final_2025_v2_0.Source.h3_3.parquet' (
    FORMAT 'PARQUET',
    CODEC  'ZSTD',
    COMPRESSION_LEVEL 22,
    ROW_GROUP_SIZE 15000);

近接した複数の太陽光発電施設には、それぞれの検出アルゴリズムによって異なるデータソースが割り当てられる場合があります。また、すべての太陽光発電施設がアレイデータセットに網羅されているとは限りません。さらに、パネルそのものを明示していないアレイデータセットもあります。以下は、緯度 34.837、経度 -118.355 の地点での例です。パネルは紫色で表示されています。

これらは設置年別による発電能力(AC/DC)の統計データです。

SELECT   instYr,
         count: COUNT(*),
         ACavg: AVG(capMWAC)::INT,
         DCavg: AVG(capMWDC)::INT,
         ACmean: MEAN(capMWAC)::INT,
         DCmean: MEAN(capMWDC)::INT,
         ACmax: MAX(capMWAC)::INT,
         DCmax: MAX(capMWDC)::INT
FROM     'GMSEUS_Arrays_Final_2025_v2_0.parquet'
WHERE    instYr IS NOT NULL
GROUP BY 1
ORDER BY 1;
instYrcountACavgDCavgACmeanDCmeanACmaxDCmax
19851141714171417
19902889088909292
20021333333
20037222223
20054000001
2006643434100125
200710123236868
20081952323226294
20092682222150195
20104012222150195
20115443333175225
20127773333331430
20137934545280313
20149136767586752
20159105757314398
20161096912912300350
201717655656350455
201819415656352458
201915316868300390
2020167311151115638829
2021170519241924504656
20221389162116218681128
202320173444344410951423
2024730374437448681128
20251521823182311291468

以下は、カリフォルニア州にある太陽光発電施設(緯度 35.57、経度 -115.47)のアジマス(方位角)フィールドのグラデーション表現です。これらの検出データはパネルデータセットに含まれていますが、Hacker News の利用者が丁寧に指摘してくださった通り、これらは反射鏡であり、Ivanpah Solar Power Facility に属しています。

別の発電場でも同様の視覚化結果を示します。

砂漠にはマイクロチップのようなパターンが広がっています。

本投稿を最後までご清書いただき、誠にありがとうございます。私は北米およびヨーロッパの皆様向けにコンサルティングおよび実務開発サービスを提供しております。もし私のお仕事があなたの事業にどのように貢献できるかについてお話ししたい場合は、LinkedIn からご連絡いただけますと幸いです。

同じ日のほかのニュース

一覧に戻る →

2026/04/23 5:27

Apple、警察による iPhone の消去されたチャットメッセージの抽出を可能にしていたバグの修正を提供。

## Japanese 翻訳: Apple は緊急に重要なソフトウェア更新をリリースし、iOS 18 およびそれ以前のバージョンを実行する iPhone と iPad(すべてを含む)で、Signal や WhatsApp のような暗号化アプリから削除されたメッセージを法執行機関のフォレンジックツールが抽出できるという深刻なセキュリティ欠陥を修正しました。この脆弱性は、ユーザーがメッセージを削除してもデバイス上で最大 1 ヶ月間キャッシュとして保持され、削除されない通知データが原因でした。これにより、「セットして忘れましょう」という設計思想を持つ危険人物向け自動削除タイマーにもかかわらず、法執行機関(FBI を含む)は押収されたデバイス上の私的チャットを再構築することができました。この問題は Signal 社長メレディス・ホイッターによって確認され、当初は404 Mediaによって開示されました。問題の核心は、削除対象としてマークされた通知が予期せずにデバイス上に保持されたことです。OS 全体のアップグレードを必要とせず、即時のリスクを軽減するために、Apple は該当デバイスに修正をバックポートし、不可欠なプライバシー保護を回復するとともに、将来的なフォレンジック攻撃を防ぐためにモバイルセキュリティプロトコルにおけるより厳格なデータキャッシュ管理の必要性を強調しました。

2026/04/23 2:35

私たちが発見したのは、あなたのすべてのプライベートな Tor アカウントを相互に結びつける安定した Firefox の識別子です。

## 日本語訳: 元のサマリーは優れている—it は簡潔で明瞭であり、主要ポイントリストからのすべての主要ポイントを余計な冗談抜きに捉えている。 ## サマリー: Firefox ベースのブラウザには、プライバシー上重大な欠陥があり、ウェブサイトがプライベートモードであってもユーザーを一意に追跡できるようになっています。この問題は、`IndexedDB`(ブラウザの保存システム)がデータをどのように順序付けるかという仕組みから生じており、これは永続的な「指紋」を作り出します。この順序付けはブラウザを完全に再起動するまで安定するため、異なるウェブサイトにおいて同様のパターンを観測し、従来のクッキーを使用せずにユーザーのウェブサイトの活動同士をつなげることを可能とします。この脆弱性は、セッションデータを閉じた後で消えるかリセットすると期待して匿名性を維持するためにユーザーが依存している Tor の「新しいアイデンティティ」機能のようなプライバシー保護措置を効果的に回避します。 この欠陥がすべての Firefox 派生版で共有される `Gecko` エンジンに存在することに気づいた Mozilla は、最近のバージョン向けの緊急修正をリリースしました。解決策はデータベースリストの表示方法を標準化し、追跡を可能とした内部の保存パターンを取り除きます。その結果、ユーザーはこれらの指紋を完全にクリアするためにブラウザを再起動する必要があります。それまでの間、プライベートブラウジングモードの信頼性が損なわれ、無関係なウェブサイトがユーザーの一貫したクロスサイト行動を識別できないという根本的な信頼が破られます。

2026/04/20 0:19

微小画面向けの 5 ピクセル×5 ピクセルのフォント。

## Japanese Translation: 最も重要な示唆は、AVR128DA28 などのリソース制約の厳しい 8 ビットマイクロコントローラ向けに最適化された、非常に効率的で手作業によるフォント設計にあります。lcamtuf の `5x6 font-inline.h` に基づき、ZX Spectrum のスタイルに触発されたこのアプローチは、ベクトルフォント(メガバイト規模のデータを必要とするため)が失敗したり、限られた RAM を備えたデバイス上で文字列長の計算時に整数溢れ問題を引き起こしたりする記憶制約を解決します。このフォントは合計 350 バイトで完結しており、標準的な 128x64 OLED などコンパクトなディスプレイに適合します。主要な設計判断はグリッド寸法に集中しており、5x5 グリッドが "E" や"M"や"W"のような個別の文字を損なうことなく完全な可読性を維持するための最小サイズであることが特定されました。一方、より小さなグリッドではフォント数の大幅な減少と可読性の低下を引き起こし(例:3x5 に落とすと特定の形状が失われ、3x3 未満では文字セットが単純なコードに縮小されます)。この定幅形式はプログラミングを簡素化し、画面内の文字列長が予測可能(文字数の 6 倍)になります。これにより、厳格にストレージ制限を受けたハードウェア上でもファームウェアは軽量かつ信頼性が保たれます。プロジェクトのソースには、2026 年 4 月に開発された `mcufont.h` および`test.c` と関連するピクセルアートフォントリポジトリが含まれています。

340 万枚の太陽光パネル | そっか~ニュース