Kerem Özdemir

Vaka çalışması · open-climate-data

Veri kökeni

Kaynağını taşıyan ve onu hesap boyunca taşımayı sürdüren bir sayı.

Burada çalışıyor
Veri kökeniTam boy aç

İki kayıt, her alanı düzenlenebilir. Bir de zorunlu bir alanı kaldıran düğme var; böylece ret anlatılmıyor, görülüyor.

Problem

Bir şebeke yoğunluğu rakamı 412 gCO2e/kWh. Altı ay sonra biri nereden geldiğini soruyor ve dürüst cevap genelde omuz silkmek oluyor: sayı bir portaldan kopyalanmış, portal o değeri sonradan revize etmiş ve rakamı üreten parametreler kaybolmuş. Rakamın saklanma biçiminde bu sonucu önleyecek hiçbir şey yoktu. Bir sayı olarak saklanmıştı.

Sayının yanına bir atıf iliştirmek, bir hesaplamayla temas ettiği anda ayakta kalmıyor. Kaynaklı iki rakam bölündüğü, çarpıldığı ya da toplandığı anda sonuç sıradan bir kayan noktalı sayı oluyor ve notlar başka bir yerde kalıyor: bir yorumda, sağdaki bir hücrede ya da kimsenin açmadığı bir belgede. Yayımlanan işin neredeyse tamamı türetilmiş rakamlardan oluşuyor, yani kaynak zincirinin gerekli olduğu yer tam olarak düşürüldüğü yer.

Bunun altında daha sessiz bir hata var. Bir veri setinin sürümleri, bir çekilmenin de bir anı vardır. Mart'ta 2024 baskısından okunan bir rakam, aynı veri setinden bir revizyondan sonra Eylül'de okunan rakamla aynı rakam değildir; çıplak sayı olarak saklandıklarında ikisi ayırt edilemez. Sorgusunu kimsenin yazmadığı bir rakam da öyle: aynı veri seti, aynı sürüm, aynı an, farklı ülke kodu ve bir tabloda birebir aynı görünen tamamen farklı iki sayı.

Yöntem

Kaynaklı bir değer bir büyüklük, bir birim ve bir soyağacıdır; aritmetiğin koruduğu şey de soyağacıdır. Her kayıtta beş alan zorunludur: kaynak, veri seti, sürüm, çekilme anı ve lisans. Kayıt bunlar olmadan kurulmaz; bir kaynak lisans belirtmiyorsa giriş belirtilmemiş kelimesidir, böylece boşluk gizlenmek yerine kaydedilir. Kimlik, kaydın kanonik biçimidir: her derinlikte sıralı anahtarlar ve UTC'ye normalize edilmiş zaman damgası, özetlenmiş halde. İki kayıt, tam olarak aynı çekilmeyi tarif ettiklerinde aynı çekilme olarak tanımlanır; alanlar nasıl bir araya getirilmiş ve saat hangi farkla yazılmış olursa olsun.

İki soyağacını birleştirmek, bu kimlikler üzerinde birleşim almaktır. Bu, işlemi değişmeli, birleşmeli ve idempotent kılar; boş soyağacı da birim elemandır. Bu yasalar, değerlerin hangi sırayla birleştirildiğinin cevabın kabul ettiği kaynakları değiştiremeyeceğini garanti eden şeyin ta kendisidir. Python test paketi bunları varsaymak yerine doğrudan kontrol ediyor ve merkezi değişmezi rastgele üretilmiş dört yüz aritmetik ifade ağacı üzerinde süpürüyor: her birinde çıkan soyağacı tam olarak katkı veren yapraklar kümesi olmalı ve çıkan büyüklük aynı ifadenin düz kayan noktalı sayılarla hesabına eşit olmalı.

Ne yapıyor

Yan yana iki kayıt, her alanı düzenlenebilir. Bir düğme onları kuruyor, ikinci bir düğme de zorunlu bir alanı çıkarıyor; böylece ret anlatılmak yerine görülebiliyor. Altında bir işlem seçici ikisini birleştirip sonucu, kabul ettiği kaynaklarla birlikte yazıyor. Üçüncü panel iki kaydı ve türetilen değeri tek bir belge olarak denetliyor: ne bayatlamış, neyin adresi yok, hangisi sorgu kaydetmemiş ve lisanslar karıştırılmış mı.

Yapmayı reddettiği

Zorunlu bir alanı eksik olan bir kaydı kurmayı reddediyor. Sayfada tek işi lisans alanını boşaltmak olan bir düğme var, çünkü ret bir özellik ve anlatılan bir ret görülen bir retle aynı şey değil. Lisansını kimsenin yazmadığı bir rakam yayımlayabileceğiniz bir rakam değildir ve kütüphane boşluğu doldurmak yerine hata veriyor.

Saat dilimi taşımayan bir zaman damgasını reddeder. Kendisine bir fark iliştirilmemiş bir an, an değildir; UTC varsaymak da iki ayrı çekilmenin sessizce tek bir çekilme sayılmasına yol açardı. Sayfa, kendisine verilen biçimi tahmin etmek yerine istediği biçimi adıyla söyler.

İki lisansın yayımlanmış bir rakamda birleştirilip birleştirilemeyeceğini söylemeyi reddediyor. Karıştırıldıklarını söyler ve adlarını verir. Birleştirmenin izinli olup olmadığı, bir yargı çevresi olan hukuki bir sorudur ve bunu bir kütüphanenin bir hesabın içinden cevaplaması mümkün değildir. Yayımlamadan önce bilmenizi sağlamak yapabileceği bir şeydir ve orada duruyor.

Kapanış

O deponun geri kalanının üzerine kurulduğu temel bu ve en geniş genelleşen parçası da bu. Yayımlanan herhangi bir rakamın iddiası aslında sayı hakkında değil. Birinin sayının geldiği yere geri dönüp dönemeyeceği hakkında; ve bu, sayının nasıl saklandığının bir özelliği; alıntının ne kadar dikkatli olduğundan bağımsız.