{
 "buku": "Python untuk GIS: Dari Nol sampai Bisa Berimprovisasi",
 "penulis": "Badar Mubarok Yogaswara",
 "jumlah_berkas": 225,
 "berkas": [
  {
   "bab": 3,
   "bab_judul": "Tempat Menulis dan Menjalankan: Konsol, Editor, dan Terminal",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Tempat 3: Terminal",
   "berkas": "bab03/bab03_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "1a8ba1138db7e0adb6850f52e7ce2bd7d9dfa5389a5cd169374e40efb3ac3a7d",
   "kode_sha256": "8a12bbea2b0bd576b889526c2096fdc9469b233e3fb6717842cbab8d0c1ca56a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 3,
   "bab_judul": "Tempat Menulis dan Menjalankan: Konsol, Editor, dan Terminal",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip mandiri butuh persiapan",
   "berkas": "bab03/bab03_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "8b334622a400fe652dccb7823c811f1337847bf8ad5cc01cb1143e7d21d29ef6",
   "kode_sha256": "f2a0facff9ce5de7a82c924ee295c518e5686d9094f2b3bfe3b43935e21f974b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 3,
   "bab_judul": "Tempat Menulis dan Menjalankan: Konsol, Editor, dan Terminal",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip mandiri butuh persiapan",
   "berkas": "bab03/bab03_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 13,
   "sha256": "32c4179d0aec2d2d2d1bc3ce53dcda5b5cec9a0c636f2147afdeb9ed53f2b25a",
   "kode_sha256": "382dd006b9f55bbbd6b505c3fe12d288bc5cd36209486f86e6b690b3027e21f5",
   "sintaks_python3_ok": true
  },
  {
   "bab": 4,
   "bab_judul": "Kotak Bernama: Variabel, Angka, dan Teks",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: lima hal Python untuk memulai",
   "berkas": "bab04/bab04_potongan_01_b1_00_python_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_00_python_dasar.py",
   "baris_kode": 4,
   "sha256": "066aece13682a6e9ae935560ad005febe88667154bacbe8e9ffa862f182e3399",
   "kode_sha256": "0531eeb46c34a24f1e59f5b1163e5dc3aa42f6b2513ac8dec00057abfa2eba8e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 4,
   "bab_judul": "Kotak Bernama: Variabel, Angka, dan Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: lima hal Python untuk memulai",
   "berkas": "bab04/bab04_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "0b4510b1f8fa33764a5570f9af24c31bae6063d5184a8533524579bf8f7f8f00",
   "kode_sha256": "a8e6315fd35070a0012034d27c9017d360611c79123aa774b817da1141e42303",
   "sintaks_python3_ok": true
  },
  {
   "bab": 5,
   "bab_judul": "Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Daftar: rak bernomor",
   "berkas": "bab05/bab05_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "66b42420980da37fa8ca56d4e3ce41e4acc62afc042f53f5a3b926e1352c019f",
   "kode_sha256": "2ba9da84e9133882787d5851fbb88a8d93f26a132050d075191f2899fcfae319",
   "sintaks_python3_ok": true
  },
  {
   "bab": 5,
   "bab_judul": "Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Tuple dan set: dua sepupu daftar",
   "berkas": "bab05/bab05_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "18eeecae765b4bc34a994fd64abeb83d400e8155371817a3fadc00e266a69864",
   "kode_sha256": "735be6781e926975f4b19f59eefef516021f5f01c4fd993179cebe98656a9214",
   "sintaks_python3_ok": true
  },
  {
   "bab": 5,
   "bab_judul": "Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Kamus: daftar isi buku",
   "berkas": "bab05/bab05_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "423087e24b3a28a00539110b86ed90c49a5074dbfee413c252b256a08ddc3288",
   "kode_sha256": "4be2391949dcc8a9d5fe12f01ba127aff2f316eef35623d6324e234e7e288dac",
   "sintaks_python3_ok": true
  },
  {
   "bab": 5,
   "bab_judul": "Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: daftar dan kamus di b1_00",
   "berkas": "bab05/bab05_potongan_04_b1_00_python_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_00_python_dasar.py",
   "baris_kode": 7,
   "sha256": "915c1e50edd2222075727963569ba878099b63879a719d9afe8a0a3a402e8d2c",
   "kode_sha256": "5242614018f34c159aaa41ab4cb6cf0b24b7040f39a4d7ae905cdf9d2105b031",
   "sintaks_python3_ok": true
  },
  {
   "bab": 5,
   "bab_judul": "Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: daftar dan kamus di b1_00",
   "berkas": "bab05/bab05_contoh_05.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "e9c8d80daaed7b62ae4b7d8d6ec9e572fe510b872df4b186a365411161eac276",
   "kode_sha256": "f33428ffab3bd2b2ea3ec7288bd20f14c5836c291495293e88483042ec8c06ab",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Keputusan: if, elif, else",
   "berkas": "bab06/bab06_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "d703b61fda31021e737d0b524f625d2b9d8c600a163bb5c8c33aa35c5a4f1260",
   "kode_sha256": "7af735cbcc3257a8989bf8868400b513f75ddf74d516fe44d7b3b8cd12c5007c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Perulangan: for",
   "berkas": "bab06/bab06_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "14d6690e4cac978df740c636b317c71c298ea633fbbf4f7affeac8329ca96e12",
   "kode_sha256": "8f5b32847ba6a4d6a0a7f33a2f952979a3e4468eba21b079b24e483cf7ff9a59",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Alat bantu perulangan: enumerate, break, range",
   "berkas": "bab06/bab06_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "e4fa1c515ce36853df5e61d9168d6ab48574843412f90444b107cf9d8270c68e",
   "kode_sha256": "ea8c87836c9172a12395354ccde11bc10298136f570bcaae58ffb12b4e5cf000",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Comprehension: perulangan satu baris",
   "berkas": "bab06/bab06_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "0885086309ca2ede8c4cdd7d69d382a6c0a48138a07576a7c316110e585bfcb5",
   "kode_sha256": "4050fcf759a73d0c8f4408087dd793d34ad99f635cbdc90797581822968749f7",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: perulangan di b1_00",
   "berkas": "bab06/bab06_contoh_05.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "5880082b66742fef8cec3935d4e2c49b908474293a0194a5e3e82dcfed1fc6a3",
   "kode_sha256": "8b1d7710bbdab47a80aa0174a0f0df73758fdec07059cd3ef2bb428fabc2b417",
   "sintaks_python3_ok": true
  },
  {
   "bab": 6,
   "bab_judul": "Persimpangan dan Putaran: Keputusan dan Perulangan",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: perulangan di b1_00",
   "berkas": "bab06/bab06_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "09fd825a077d47adb074ab8c7c993ab8820290725d5218a8645bb25d6bb54345",
   "kode_sha256": "e6d2451ee6278d498d9e55a9cc9875af4f458f9fec2c91115a685435da628732",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Membuat dan memanggil fungsi",
   "berkas": "bab07/bab07_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "e0c29765782f660bb2a2d330bbd62110709bd3e50f84d5c8891e024261defd53",
   "kode_sha256": "713df2f8e456577c221c17175c7c903344f6f4e384fd7f25110906aab6d0a776",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Parameter bawaan dan docstring",
   "berkas": "bab07/bab07_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "42dd99baf987128c14c13fe173f1b627dc61d40073512ae287c32366cba5e8b9",
   "kode_sha256": "653da3661124995fbb680eeb9c5f39133a55cc9ab9904c63aed69f2cfa36f7aa",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Menerima argumen bernama sebanyak apa pun: kwargs",
   "berkas": "bab07/bab07_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "b9c69533083f849080f695fedbd39d579b0c1c2cb19b102e4a534ec3565ff041",
   "kode_sha256": "23fd5377700e92e7587d083901a63e15305e39ffe7c75181383cca048dd37212",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Fungsi tanpa nama: lambda",
   "berkas": "bab07/bab07_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "a58c9fb36179c3b2c246d2e112d5ac1282ad6c543af2604f77891a14bb104351",
   "kode_sha256": "76558f455469eb5eb378bc2987e87c53fc453c0d75618629f957891f607bc12f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: fungsi di b1_00",
   "berkas": "bab07/bab07_potongan_05_b1_00_python_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_00_python_dasar.py",
   "baris_kode": 4,
   "sha256": "5ec241ab955e6b7f947564375c7cf70f9d1115090072b4f1bb1a8c505d4b8a0a",
   "kode_sha256": "7f45144a75d7c12dd76d5c55b0c3cab92d6da53c4af1ca49a76acf1020b85ae2",
   "sintaks_python3_ok": true
  },
  {
   "bab": 7,
   "bab_judul": "Resep Bernama: Fungsi",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: fungsi di b1_00",
   "berkas": "bab07/bab07_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "b36a60433e4d5c8c2224a86e54670242186fe7e827231509fcfbb7db88ee41f8",
   "kode_sha256": "21de98160f974bdbf14eb9d875babde1feaab42aaae8171d1d7ed06fdbb4bc08",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Import: membuka laci perkakas",
   "berkas": "bab08/bab08_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "d1566749cffc53007f6f05d4feb21a545b2378d41f5ddf9f91ed29456560d293",
   "kode_sha256": "6837411c9d28e7392366ca0df58dea271e8be7bd8d5262552fc142cf125bf4c1",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Perkakas berkas: os dan shutil",
   "berkas": "bab08/bab08_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 9,
   "sha256": "27d08845cb7c04f73f8e51e6b1d015432964e59a7b8e13763c553e0b84ee1849",
   "kode_sha256": "4555581721c05ebd06742da57456a3e43789fbbdf89e41c0ef409c49f6f67a29",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Menaruh alamat di satu tempat",
   "berkas": "bab08/bab08_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "2397220e86b2b904eb73d2be6df9ed1ad5d6901045f2ebed830d7d6286de6eac",
   "kode_sha256": "33d223f6ca685d99f65acb47d4c1511433ea029c00ed36d5b0f4270adbfd76f3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Tempat Python mencari modul: sys.path",
   "berkas": "bab08/bab08_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "f8bd4e6dcbeacba7a8d726a1fb43eaac34f05a286ed2eaa1ff089b4d38712f7e",
   "kode_sha256": "3b69aeaee1e9b729586cb33dfb550ee1110fb541f94e7938f4a064b2347f26c8",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: pembuka b2_03_digitasi.py",
   "berkas": "bab08/bab08_potongan_05_b2_03_digitasi.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_03_digitasi.py",
   "baris_kode": 10,
   "sha256": "95676fcbbe137945296a24c4277af9624279dea80836fab0b8e8f8f61a19f096",
   "kode_sha256": "a121861169de6394d9c47887ded979e8d69ab133972c5b14aea898b97d7a3ea3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: pembuka b2_03_digitasi.py",
   "berkas": "bab08/bab08_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "ccd550273572ed7e003b729551e7ca120893df4657ba33463cd7d65a5e1e608c",
   "kode_sha256": "f4554a8dc55c12bf10a5c9c729b85be649917668ad4b8e55e6a8f6bb6bc82e6b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 8,
   "bab_judul": "Gudang Perkakas: Modul, Import, dan Jalur Berkas",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: pembuka b2_03_digitasi.py",
   "berkas": "bab08/bab08_contoh_07.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "efedef94da7a2364f8f2ea1eca5b4e3aa45093bc75e3adef09442a5ed6900015",
   "kode_sha256": "01b0f3b5fdf4603123cf1ba8b392ed52a9b803769d3ae4979208cc06db03a53a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Merakit teks: tiga cara",
   "berkas": "bab09/bab09_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "f6e46225511989042c90e188597eaf1d68fca8897c9953e026cb71dbdcac9416",
   "kode_sha256": "47cbbc635e9407a20efbaf0ecd7e1f2b5b0ce8856316f0edbe41a7df2ba72bf8",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Menulis dan membaca berkas teks",
   "berkas": "bab09/bab09_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "0e5dd7da0c590ac887d58e45f8348e03c234bec875cd74ff33ee257741d74ff5",
   "kode_sha256": "f63e7940534952d3a9500170aa293e83f50526807dd0c883081028a05a373ee2",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Tabel dalam berkas: CSV",
   "berkas": "bab09/bab09_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 9,
   "sha256": "33a4b877ed647d56cf9b38ce13f0cd2e20d2763ce15f220b1161c4df5d8f24c2",
   "kode_sha256": "51dc480cb37228d69068704a7e1a981b45c0ba0f9a5da3899f791d661d611019",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Data bersusun: JSON",
   "berkas": "bab09/bab09_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "72e687064fff4a1b3ea482ee7c2ff0c6b52b69de612638808bcec4b49e0d3e01",
   "kode_sha256": "f21b827e015965caa82ce174a52733845b8d1afd5f368a7754047d1aad82f60b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: ekspor ke CSV di b2_07",
   "berkas": "bab09/bab09_potongan_05_b2_07_laporan.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_07_laporan.py",
   "baris_kode": 5,
   "sha256": "b8c6ff990e9d44551668927fa5978f7cd11767708d76a8a46d0a3bceb9d5d2f9",
   "kode_sha256": "64ca82d298752337f3d3753d89a6ba89414ae2cb8a3bd854fdc594495840ec62",
   "sintaks_python3_ok": true
  },
  {
   "bab": 9,
   "bab_judul": "Catatan dan Laporan: Berkas dan Merakit Teks",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: ekspor ke CSV di b2_07",
   "berkas": "bab09/bab09_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 14,
   "sha256": "d8e26895055cc75bcde97a197e4b77c72aabc09a07ce6eabed61d453451b4b2d",
   "kode_sha256": "44504cc4e4c153e83d849df6a2bbd30e2c949c2a9c915981abde1e61fe212cce",
   "sintaks_python3_ok": true
  },
  {
   "bab": 10,
   "bab_judul": "Membaca Petunjuk Komputer: Galat dan Cara Menanganinya",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Membaca pesan galat",
   "berkas": "bab10/bab10_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "13412f652b1426848a88e702f194b351c5c0987398e40c89501b0fab42140da1",
   "kode_sha256": "d4de695c2fc3280c99170ea621dfbf7cb977c453176b1c20a5ff2a9570402b57",
   "sintaks_python3_ok": true
  },
  {
   "bab": 10,
   "bab_judul": "Membaca Petunjuk Komputer: Galat dan Cara Menanganinya",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Menangani galat: try dan except",
   "berkas": "bab10/bab10_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "3e7bac9e5c3bc34971ad45d1d8c5384a2195774aae421fedac75f45628069a86",
   "kode_sha256": "988b53c7261602b94d74f07a2cd673953c0c118937d5c645f4fd8451180fac45",
   "sintaks_python3_ok": true
  },
  {
   "bab": 10,
   "bab_judul": "Membaca Petunjuk Komputer: Galat dan Cara Menanganinya",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Menimbulkan galat sendiri: raise dan assert",
   "berkas": "bab10/bab10_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 11,
   "sha256": "f7eda68ee7d3f965f608df699d0421b40480ae20e931ba9e31d01c2bc96d6d5e",
   "kode_sha256": "04ffe13fede091604ef30ad86f80fedfc9390904f9066fe261a413e8bf5cbca7",
   "sintaks_python3_ok": true
  },
  {
   "bab": 10,
   "bab_judul": "Membaca Petunjuk Komputer: Galat dan Cara Menanganinya",
   "bagian": "A",
   "jenis": "skrip",
   "konteks": "Skrip yang dibedah: memeriksa masukan sebelum dipakai",
   "berkas": "bab10/b4_01_galat_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b4_01_galat_dasar.py",
   "baris_kode": 48,
   "sha256": "3bd0c4f592f52e120395dac50c76cc93d4f559950f3eaaf891c0c07e5e739888",
   "kode_sha256": "8d926ca38a785c851c5b7f56212d8df60b35e8cdf33572ea6143959424ed09be",
   "sintaks_python3_ok": true
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Membuat kelas sendiri",
   "berkas": "bab11/bab11_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 14,
   "sha256": "794d5ca26196e1b554348662a2d914a67358218080c80a09c2dc8301407ef7f7",
   "kode_sha256": "72f3024057d8bbb6e9689cbb0534cf6972d3232d42f186f6c055c704bc176e48",
   "sintaks_python3_ok": true
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Pewarisan: kelas turunan",
   "berkas": "bab11/bab11_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 13,
   "sha256": "13f53c30c1a60913abde69152cbac2ea870655886736e344122f2d40af926ad9",
   "kode_sha256": "4a42442a33ecaa699d117a6b85a5d997e66a0c4fccee5a831c8053f8f012e4c3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Dekorator: pembungkus fungsi",
   "berkas": "bab11/bab11_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 9,
   "sha256": "e8686b1e8c92b87fd0233a723dbc9b6fd73a13b8bdd59ca2b8b39b699f0ca5b5",
   "kode_sha256": "22444069d499343e71d3c7f720618e6d518743c51b967637bd73bfda1fbda052",
   "sintaks_python3_ok": true
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: dua gaya algoritma Processing",
   "berkas": "bab11/bab11_potongan_04_kerapatan_hotspot.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/kerapatan_hotspot.py",
   "baris_kode": 9,
   "sha256": "51d7982cc3e823c986e52206576ae77a066d6033db8731b5ca47c6d59b25977a",
   "kode_sha256": "028aa4f63107840b074b79fb4891c0793107d0aff3ad539f396fbe08127f3521",
   "sintaks_python3_ok": true
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "Skrip yang dibedah: dua gaya algoritma Processing",
   "berkas": "bab11/bab11_potongan_05_tambah_luas_ha.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/tambah_luas_ha.py",
   "baris_kode": 4,
   "sha256": "d874e13cb1cb756675a30455d6c0200f77c93d64245c5625d712b7660624031d",
   "kode_sha256": "8d5a3f2226ad35bdcf1bcfbc5ac716cb31da867c881a40216f045efa55e375f1",
   "sintaks_python3_ok": false
  },
  {
   "bab": 11,
   "bab_judul": "Cetakan dan Pembungkus: Objek, Kelas, dan Dekorator",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: dua gaya algoritma Processing",
   "berkas": "bab11/bab11_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "dbb8509b5f5455cc61968af932bf1cd31eb52952f49d8c347be2339cde59894b",
   "kode_sha256": "98900a5517329005a73bd811b38a6193cd7a86a1b7e89341b2b4b9481820cc46",
   "sintaks_python3_ok": true
  },
  {
   "bab": 12,
   "bab_judul": "Kotak Perkakas Tambahan: Pustaka Ilmiah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "numpy: kalkulator untuk deretan angka",
   "berkas": "bab12/bab12_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "32c93a68c2c445b19dc228196a1f0d0eea014388efd01f366face3dbf1a6cf29",
   "kode_sha256": "c3493566542795bd3f2a30420feaec7669d9925bcbdea4214cbfe424c119b16f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 12,
   "bab_judul": "Kotak Perkakas Tambahan: Pustaka Ilmiah",
   "bagian": "A",
   "jenis": "potongan",
   "konteks": "osgeo (GDAL): pembaca raster",
   "berkas": "bab12/bab12_potongan_02_i2_04_tak_terbimbing.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_04_tak_terbimbing.py",
   "baris_kode": 5,
   "sha256": "cf50f847804c16bfa589992c1766b174ebdd5e9ab619912ff318e7454c57e28c",
   "kode_sha256": "09861f6f9e5f20932cfbfcaf5b8dd0f8295984a8aed5d7bda6053045dae20690",
   "sintaks_python3_ok": true
  },
  {
   "bab": 12,
   "bab_judul": "Kotak Perkakas Tambahan: Pustaka Ilmiah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "matplotlib: pembuat grafik",
   "berkas": "bab12/bab12_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "02d755e89ed2c2c9cb2de4b52d1fc29f238b1d99dad27084438e404395d9b083",
   "kode_sha256": "858c8c03923d6c66c8e11b6c58691aa3e908ad342f83ecd6e300957420310738",
   "sintaks_python3_ok": true
  },
  {
   "bab": 12,
   "bab_judul": "Kotak Perkakas Tambahan: Pustaka Ilmiah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "scipy dan scikit-learn: statistik dan pembelajaran mesin",
   "berkas": "bab12/bab12_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 8,
   "sha256": "c82afa4e01d6fbdfb3e6f599d0472421cf8d3fb19d6c3359ee41d423d048be71",
   "kode_sha256": "7b4da4d5cc37a7175fc76cc665e889fbb764f1c01aff3a75bb1b8416b81b9d7b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 12,
   "bab_judul": "Kotak Perkakas Tambahan: Pustaka Ilmiah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Bagaimana mengenali pustaka di skrip orang lain",
   "berkas": "bab12/bab12_contoh_05.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "54f1efc45a730bf226a10298dfa317d33cf115527657064cbb3a8736d1625591",
   "kode_sha256": "2ee2862000c9cdb5f99277e5a880ef919b2727f95dfb2877b1b89abce015b800",
   "sintaks_python3_ok": true
  },
  {
   "bab": 13,
   "bab_judul": "Belajar Mandiri: Mencari, Mencoba, Mengubah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Langkah 1: Tanya objeknya sendiri",
   "berkas": "bab13/bab13_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "98d3e99cad339527299577621fadf3dfe78b17dba6fc824362eb4340c418828f",
   "kode_sha256": "adfdd680de5cb32803ed78d7f0bdab966e7eb43c7ddc08052374c73fa9095e39",
   "sintaks_python3_ok": true
  },
  {
   "bab": 13,
   "bab_judul": "Belajar Mandiri: Mencari, Mencoba, Mengubah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Langkah 2: Tanya objek QGIS",
   "berkas": "bab13/bab13_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "21c40d3f04e463e0c2f3a2d71407927c1f3f6852164b8ee29797e64c7c18f10a",
   "kode_sha256": "b191e5f386c893fbd303c78ff97d9d5b1f4b7428d96cf7f1afa3e004d784cc72",
   "sintaks_python3_ok": true
  },
  {
   "bab": 13,
   "bab_judul": "Belajar Mandiri: Mencari, Mencoba, Mengubah",
   "bagian": "A",
   "jenis": "contoh",
   "konteks": "Skrip yang dibedah: satu baris, lalu jadi pola",
   "berkas": "bab13/bab13_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "f865860aa72077c9c37a8e3e324fb35ba0690e3e858bbeeaa5278cba02cef469",
   "kode_sha256": "295b05e2e1dc717a528416d1482ba79748a94f504dce8375a290175991482e18",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Dua cara menjalankan: di dalam QGIS dan mandiri",
   "berkas": "bab14/bab14_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "df16201c12e3b1cddcfdee108b9c5014e2fc3ce157595de2b61c00f4a2fe085b",
   "kode_sha256": "f6e01a6a47cb3c56ad1474fcb8464e5230d0d66958420831db42d7d8e71d7f32",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 14.1: Lima hal Python sebelum masuk QGIS",
   "berkas": "bab14/b1_00_python_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_00_python_dasar.py",
   "baris_kode": 25,
   "sha256": "7afa4ba418eae225546bff277aaf8aaa0f2715c222560ffefb5111e84c08b811",
   "kode_sha256": "d886f16a9a333dd05a19cd87ecf2f34a14446be3bf1d480d319f2cf31a3879f3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 14.2: Memuat layer dan mengambilnya dengan nama",
   "berkas": "bab14/b1_01_muat_layer.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_01_muat_layer.py",
   "baris_kode": 29,
   "sha256": "3017a85758d78c0499cc33cedcdcefac55258fe570e3d3b11b71165ef9f36d9b",
   "kode_sha256": "556c0c9d7876e0285dffb193b457265635d788a644821e4a094413b4a7cba290",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 14.2: Memuat layer dan mengambilnya dengan nama",
   "berkas": "bab14/bab14_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 9,
   "sha256": "0984d5329ba4e9d68f2e1564a6f4e8afc14032a9fc7034d23c0758eb400c7bc6",
   "kode_sha256": "41452f615af83442049fa5db398f56955277dc2068c8bdb09f4fca5d42fcf02e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 14.3: Membaca fitur dan atribut, lalu menulis CSV",
   "berkas": "bab14/b1_02_baca_atribut.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_02_baca_atribut.py",
   "baris_kode": 32,
   "sha256": "a2d5a23a6dbe8afec123ad1405c1c4d58ba9ccf0c1a98c97fc09da92f456d103",
   "kode_sha256": "41a05115224c6d9079adba4f8061f1f2c269790b2f0dc398fd2124abd48af727",
   "sintaks_python3_ok": true
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "fragmen",
   "konteks": "Skrip 14.3: Membaca fitur dan atribut, lalu menulis CSV",
   "berkas": "bab14/bab14_fragmen_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "549b4bad85df08e219827b6e6c8dd7e888b57ad8d0933086c078d0ed9d611c31",
   "kode_sha256": "cde10e14418b98255eab52f768a438a60d52f7665728762de0cc9137d0699cd5",
   "sintaks_python3_ok": false
  },
  {
   "bab": 14,
   "bab_judul": "Mengetuk Pintu QGIS: Memuat, Membaca, dan Menyimpan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 14.4: Menyimpan proyek dan membukanya lagi",
   "berkas": "bab14/b1_03_simpan_proyek.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_03_simpan_proyek.py",
   "baris_kode": 30,
   "sha256": "4a805cb616409e939ccc3c93cba1bac093a0caea3b2b4e7928114274a700ab3e",
   "kode_sha256": "4c1794751bcc8e89910d964d5522171a4d42cbef78d13283a90c3257cad97e68",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.1: Membaca tabel atribut",
   "berkas": "bab15/b2_01_atribut.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_01_atribut.py",
   "baris_kode": 21,
   "sha256": "059530f784732c18d9a140a12e235c1664f294427a607d1b7fcb0f794ca69cd1",
   "kode_sha256": "d899032f9d89211bf99b7042326f150cc76188b86c912bbeca764bce153eec6a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "fragmen",
   "konteks": "Skrip 15.1: Membaca tabel atribut",
   "berkas": "bab15/bab15_fragmen_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "a040c4792324f61195ef89774f62443084cc9aa45af484494f77ad35e91154c5",
   "kode_sha256": "dc75541f7c80cc56c6a381f0eb8c1d61e47418e664ffa97f91a76bb4258158e7",
   "sintaks_python3_ok": false
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.2: Memilih fitur dengan seleksi",
   "berkas": "bab15/b2_02_seleksi.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_02_seleksi.py",
   "baris_kode": 41,
   "sha256": "0af7878821452200a81ecdbaeb2887216e944c0b7b818dacf9583cf3fb7f1e4c",
   "kode_sha256": "eee3ead9bbd25e02e7a2bd889a1df3f99a87a9118a61beff1752a30ffe281125",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 15.2: Memilih fitur dengan seleksi",
   "berkas": "bab15/bab15_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "73319ba4868887b5e071bc3aa80964095567fa4c70b40ab776f319bdf75172ca",
   "kode_sha256": "1cd39526050e5c831665fed7578587ba7718e5c84820b49aa94b5f930154ac1a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.3: Menggambar dan membelah dengan koordinat",
   "berkas": "bab15/b2_03_digitasi.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_03_digitasi.py",
   "baris_kode": 61,
   "sha256": "2bbadc54a5f840c4d9d25c644e6a16a737dd7bca5f0bcf4d753eed035190f610",
   "kode_sha256": "83077700d880ba1af74905f0fedd8c542de109748ed5c49c7c64da5a59bb548b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.4: Memeriksa dan memperbaiki geometri",
   "berkas": "bab15/b2_04_topologi.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_04_topologi.py",
   "baris_kode": 59,
   "sha256": "62d5d553b8515a2be1406a5e6beba85eb0cd0f1ee8840888204159f3eda182d3",
   "kode_sha256": "20a98e6cea973555573e8a313947f17d285a1b0888e09a954aad47df53f9b554",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.5: Menambah kolom dengan rumus",
   "berkas": "bab15/b2_05_kalkulasi.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_05_kalkulasi.py",
   "baris_kode": 38,
   "sha256": "eb51b9fde8de77bb8d5079f34492de37c9226c06335443b46f5bfc58a4926fd4",
   "kode_sha256": "287e72984aeddc51e4afbc8051875ddc93b551e220e136eca20d8733514be231",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.6: Menggabungkan tabel dengan join",
   "berkas": "bab15/b2_06_join.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_06_join.py",
   "baris_kode": 65,
   "sha256": "2aab39f7779b379e73337dd7be742e62e7139a4764ef09701f6f43fd5a1d5cc3",
   "kode_sha256": "959e98ad991d899fe3cc75499cdf116524efed46953dd487e1e22f30b6ca201a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 15,
   "bab_judul": "Lemari Data yang Patuh: Atribut, Seleksi, Digitasi, dan Laporan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 15.7: Membuat rekap untuk Kepala Seksi",
   "berkas": "bab15/b2_07_laporan.py",
   "bahasa": "python",
   "seri_asal": "B2",
   "sumber": "seri/B2/skrip/b2_07_laporan.py",
   "baris_kode": 33,
   "sha256": "15f2653d8cab5c0e4cd72f917c0b5e9c6f3de3eb7652f301714eaef595e14ec4",
   "kode_sha256": "50fb574779f7e2fa5ac3bc1e71a7ee49b144eb03bbe1adbeca6af025c7a49584",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "potongan",
   "konteks": "Konsep: raster dalam tiga kalimat",
   "berkas": "bab16/bab16_potongan_01_b3_03_dem.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_03_dem.py",
   "baris_kode": 3,
   "sha256": "d4193b2fe66e7809ad9f0614d87280d02b0881458c228ca38ca9756740f458ae",
   "kode_sha256": "eca082840e10e529c689f98fead5efd66f1cebf99c2fbe33cdf79f001c1389e6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.1: Memeriksa isi sebuah citra",
   "berkas": "bab16/b3_01_info.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_01_info.py",
   "baris_kode": 18,
   "sha256": "95f1e87e58c376e3e42e1dd3af84914d2cb2013b3e7df82e25d98ef1c104a492",
   "kode_sha256": "b09f7a3edb60373b4920f125b227074c125dc7743a17775dd09e79a2c0850696",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.2: Menumpuk empat band menjadi satu citra",
   "berkas": "bab16/b3_02_komposit.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_02_komposit.py",
   "baris_kode": 23,
   "sha256": "2608e59fb1071ffc056945faf843615d52d8db452eba1ae7a75e1d2e09228ba2",
   "kode_sha256": "8cb79753fefda5770629f39a0d4c4a8d2246d1609f2f481071e8895a3b411124",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.3: Dari satu peta tinggi menjadi empat turunan",
   "berkas": "bab16/b3_03_dem.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_03_dem.py",
   "baris_kode": 17,
   "sha256": "2e1ffa7339a39c11a2a69fbe68a9d5b0e62f2a75cc0e9eb905cd5e19f9d632cb",
   "kode_sha256": "9362782cc2bf832fede1f40cf7ed96bb9dbe7b77e15edb29a1b9dc004a39c8e4",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.4: Memotong raster dengan poligon",
   "berkas": "bab16/b3_04_clip.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_04_clip.py",
   "baris_kode": 27,
   "sha256": "f11d15fbd3bff9769bf10c4e53f72a1ecd4efc7c146214ad98471a8735d27a55",
   "kode_sha256": "f09ad885dc21070e477c424032d4860c7ed912bcede625d079fc9ed91ee267be",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.5: Mengelompokkan lereng menjadi tiga kelas",
   "berkas": "bab16/b3_05_reklas.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_05_reklas.py",
   "baris_kode": 23,
   "sha256": "31181f4be1b03a88956a1c7f9d11a3c005160c0a0e9d5ba617784b6117ec252d",
   "kode_sha256": "d16517a542712171d57828dff70ef3f15850672e527b610e5845a048b2229e7c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.6: Menghitung NDVI dan merata-ratakan per KPH",
   "berkas": "bab16/b3_06_ndvi.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_06_ndvi.py",
   "baris_kode": 38,
   "sha256": "96afee2658ce043b7e93d2eb6ec14dd1e83641e4ef3987961d8b265e18a75171",
   "kode_sha256": "668ee30d7495ba8155e0ba00dda046682467a0ea105501eb51551f61f933c7e0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 16,
   "bab_judul": "Kisi Piksel yang Bisa Dihitung: Raster dan Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 16.7: Satu tabel ringkasan untuk Kepala Seksi",
   "berkas": "bab16/b3_07_proyek.py",
   "bahasa": "python",
   "seri_asal": "B3",
   "sumber": "seri/B3/skrip/b3_07_proyek.py",
   "baris_kode": 31,
   "sha256": "118f8947e94f8d4ee8e9e517b1a49741fc45bca66c5612b952527090bbd7ddc8",
   "kode_sha256": "f1b8cf2909f2fe432e8002c6127c6c3b87a6a9c20f55d476835c4b04c613dca6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.1: Muat layer dan beri warna per jenis",
   "berkas": "bab17/skrip_4_1_kategori.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_1_kategori.py",
   "baris_kode": 36,
   "sha256": "9dacd54d2d674afec930d6d3c53cdbb09f47ca4bfdfe44826aafa56542968d4b",
   "kode_sha256": "551d6c2f9ae0184d8330492eaadeb3bf5a8ba63ee4eb6f2958cfc53a6bd8fae0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.2: Klasifikasi angka menjadi kelas warna",
   "berkas": "bab17/skrip_4_2_klasifikasi.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_2_klasifikasi.py",
   "baris_kode": 44,
   "sha256": "16f7d7578755df5e2d5342104c016341ed8ca992310512dce6e4b888b2d1829b",
   "kode_sha256": "2671d917779f964746fd998213e2c773099c23e979a5f78153f5e842616dd16d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.3: Warna untuk peta tinggi dan bayangan bukit",
   "berkas": "bab17/skrip_4_2b_raster.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_2b_raster.py",
   "baris_kode": 23,
   "sha256": "8d2bbb9837644abb9eb56bb0a43a03a91a8253a619686191dfd02c094a186209",
   "kode_sha256": "633a4a51ed83c7b64c503f79ca9a550cb8709c00ec2b24bc9a200633dc704f74",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 17.3: Warna untuk peta tinggi dan bayangan bukit",
   "berkas": "bab17/bab17_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "c94694d081d05ff9ffc68e17c459e714d573a0fe06f3e33f0a89e1c7eb6733c9",
   "kode_sha256": "ad9984280b0b3b5a9fb2b8529a734a40ae01a375c2d8983e51e6b63966a7b499",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.4: Label berisi kode petak dan volume",
   "berkas": "bab17/skrip_4_3_label.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_3_label.py",
   "baris_kode": 32,
   "sha256": "41ef167fba414f09e6636c2718925f9540303f487359b1b7f090c6f315d73ca2",
   "kode_sha256": "475591c37a49cc206de439d17e9be402dd9c331c705447afa0aa951c5d20b8ac",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.5: Menyusun lembar peta A4",
   "berkas": "bab17/skrip_4_4_layout.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_4_layout.py",
   "baris_kode": 96,
   "sha256": "93d7246476db3e0100126e57705d308bb4b3ee1cae94beb23666777a0b04986b",
   "kode_sha256": "74767058e9932e1d823ebf58c9f5656ddfa9e44229e0546cee15bfea2dafef0b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.6: Ekspor ke PDF dan PNG tiga resolusi",
   "berkas": "bab17/skrip_4_5_ekspor.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_5_ekspor.py",
   "baris_kode": 20,
   "sha256": "81b8a4e5374d08c4a16b67042e7caebbe3ea836d7e8adc1ba06577fccbb3c5b5",
   "kode_sha256": "3f9e577e63c26727a792f43dc1c6b9bef6f8cc2c3731fc967d1bb150974300c6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 17,
   "bab_judul": "Dari Data ke Lembar Peta: Mewarnai, Memberi Label, dan Mencetak dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 17.7: Proyek mini dari data mentah sampai PDF",
   "berkas": "bab17/skrip_4_6_jembatan.py",
   "bahasa": "python",
   "seri_asal": "B4",
   "sumber": "seri/B4/skrip/skrip_4_6_jembatan.py",
   "baris_kode": 109,
   "sha256": "a837bfb08a634fd2e321a0cc5dacf06b5827859de8fa5c6c41c90ebb2c0a4028",
   "kode_sha256": "74283fee82dc0a27585f607f926a704bc3a5c3371fcb60266eea7af052a28a94",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.1: Memeriksa data sebelum dianalisis",
   "berkas": "bab18/1_1_cek_data.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/1_1_cek_data.py",
   "baris_kode": 34,
   "sha256": "2e63b812ef480eb73f0cbe8edf55ba9ef7e12340de90ac55b1324e453620bb2b",
   "kode_sha256": "0d691f48602208aadbc31cc7582ef2a209c234efbc4eda33625b915e90c86e07",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.2: Zona aman di sekeliling sungai",
   "berkas": "bab18/2_1_buffer_sempadan.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/2_1_buffer_sempadan.py",
   "baris_kode": 32,
   "sha256": "e2e51c7ff067956bb0a0f06f88461a4305a0e7aa42528082e684aa5d9768975d",
   "kode_sha256": "a482c656d189383ac29b2d8a8b17414b69e688a2adbf1a4ea67e78f499570497",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.3: Dua peta bertumpuk, tiga cara membaca tumpukannya",
   "berkas": "bab18/3_1_overlay.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/3_1_overlay.py",
   "baris_kode": 38,
   "sha256": "33c47bbd7bab1e9e32821c3c3964ae00353f22ffc6b131d65fccaae091a85178",
   "kode_sha256": "ac9b735529efb4b3ed4d9a8be5e5291dcf81fda61d08b5d41202f37ee539116d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.4: Melebur batas dan merekap luas",
   "berkas": "bab18/4_1_dissolve_rekap.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/4_1_dissolve_rekap.py",
   "baris_kode": 46,
   "sha256": "4984d887eeb0aaf6abe32ee40c7ec5ca18e1f806249329569a83b843b33063d6",
   "kode_sha256": "2384854728c6fe0654cb6d9cb32962363c6bb9e71d558bd4aa846eae36a808c9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 18.4: Melebur batas dan merekap luas",
   "berkas": "bab18/bab18_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "705c70d8e1d50282f2612e977dc5b8d4e3ac7d6525d7f60d165c2cb8fe56c866",
   "kode_sha256": "4c17011ff7b27d5f691cad9bec67b116e09e916f3683cb72f8c53aa3fded4481",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.5: Menghubungkan data dari letaknya",
   "berkas": "bab18/5_1_spatial_join.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/5_1_spatial_join.py",
   "baris_kode": 60,
   "sha256": "ec753532c8509ea80d7b29fbe944850ed3a3e6b3d2ac4a2e32faa3028c3509dd",
   "kode_sha256": "fd1e1fb319bcc3925267201ae3054cea9ba438be68a9cf3190c0adc146826978",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.6: Merangkai alat menjadi model",
   "berkas": "bab18/6_1_buat_model.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/6_1_buat_model.py",
   "baris_kode": 58,
   "sha256": "b4ccbd32562d92a70483691d8e67605d4126831c825808cb14ecc10e14047743",
   "kode_sha256": "9244b880b0986f26eb687dba7275eda1f434105992e879318653a8c6c9442005",
   "sintaks_python3_ok": true
  },
  {
   "bab": 18,
   "bab_judul": "Dari Peta ke Jawaban: Buffer, Overlay, Join, dan Model dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 18.7: Laporan areal efektif dalam satu skrip",
   "berkas": "bab18/7_1_laporan_terpadu.py",
   "bahasa": "python",
   "seri_asal": "I1",
   "sumber": "seri/I1/skrip/7_1_laporan_terpadu.py",
   "baris_kode": 56,
   "sha256": "e48a44c95d5b4ba8a6c31e3f126f2d34fc09c5dbf27af3b358f25265732cd3bf",
   "kode_sha256": "57b57fb321f2bb8cc587c678197b382625e4c889237aebce34c2862fa8778a6b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.1: Berhitung dengan piksel",
   "berkas": "bab19/i2_01_aljabar_raster.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_01_aljabar_raster.py",
   "baris_kode": 35,
   "sha256": "bf6e6f16a6e51664f6cba2c82e353db067872e25c90c39cec3586e20cd2e1b5c",
   "kode_sha256": "bbf646e4c73a1008b10bc8caa2d57cf786c1f942791587ce9acf2b72fa1cf6f7",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.2: Membaca bentuk bumi dari DEM",
   "berkas": "bab19/i2_02_turunan_dem.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_02_turunan_dem.py",
   "baris_kode": 25,
   "sha256": "4b262df231abe98774a188ff5b9ee4eac06113add747e7e5524a1f4546ca90e4",
   "kode_sha256": "99237236da656df80429cae8c60770bc06093762dc2f995b33f07428e07fb076",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.3: Dari angka ke kelas lereng",
   "berkas": "bab19/i2_03_kelas_lereng.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_03_kelas_lereng.py",
   "baris_kode": 30,
   "sha256": "4fcfbe275768f0dd168951be0097fda5b921005ca96c4f121c18737277d166f8",
   "kode_sha256": "f3fbc47fda4398ff5412f847256c9baa84726cbc8a3e7ca288b5113467569a30",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 19.3: Dari angka ke kelas lereng",
   "berkas": "bab19/bab19_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "140247a88882f8a46c6e841432def224119c243faf02f7aa69c49da7b6ee38d0",
   "kode_sha256": "cc2cda6080a6c41b89126115043c22c1fe0ab5e4f950dca81de552db7075fa62",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.4: Biarkan citra yang bicara",
   "berkas": "bab19/i2_04_tak_terbimbing.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_04_tak_terbimbing.py",
   "baris_kode": 60,
   "sha256": "f2a7d7a6b74f638af35ebeaf0d87a78313515dc80fb49249fd8dd7df2021f804",
   "kode_sha256": "cecabb0f2fb44be438de821db5e3bec688efc1046bcc848a9f419e57ba3ef249",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.5: Ajari citra mengenal lahan",
   "berkas": "bab19/i2_05_terbimbing.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_05_terbimbing.py",
   "baris_kode": 53,
   "sha256": "b7038e0fc1bac7c0fb17a20a9a0db00f27a3bd007599260c793b2efc88aec067",
   "kode_sha256": "314067bbed4c105456b1b3fb4a38f3f5dab22c7f38e5da3b1ffaf1d9bc60d450",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.6: Seberapa benar peta ini?",
   "berkas": "bab19/i2_06_uji_akurasi.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_06_uji_akurasi.py",
   "baris_kode": 73,
   "sha256": "c45f198d4ad0cf5229d91953fcd633a72d4e4310f071088762d2a41d581486ef",
   "kode_sha256": "a294293b6971af72f6ba68d74dcb3c6b9a2e6e6e9c898a2451b7c6fa4018cfd5",
   "sintaks_python3_ok": true
  },
  {
   "bab": 19,
   "bab_judul": "Piksel Bicara Angka: Analisis Raster dan Klasifikasi Citra dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 19.7: Lahan terbuka di lereng curam",
   "berkas": "bab19/i2_07_terpadu.py",
   "bahasa": "python",
   "seri_asal": "I2",
   "sumber": "seri/I2/skrip/i2_07_terpadu.py",
   "baris_kode": 26,
   "sha256": "06d60345e3d7cd5046ff079e528972b06bee86836a8c87249553ba28c03ea643",
   "kode_sha256": "686de01e6b07bd51f53ba4fea17b82d4fed4be16428cd033cb92d5d75b89937b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.1: Seberapa tepat titik GNSS?",
   "berkas": "bab20/i3_01_statistik_gnss.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_01_statistik_gnss.py",
   "baris_kode": 33,
   "sha256": "001f1f00aba3f22a15578a4638e4c8d1e5da1233dd9b48dd388a8f76e651e933",
   "kode_sha256": "4f29ad82f4fe64a28007a2aec2470f20f237ffb5c5b24cb4e1895809c8a54e1e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.2: Menyiapkan lemari survei",
   "berkas": "bab20/i3_02_buat_geopackage.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_02_buat_geopackage.py",
   "baris_kode": 42,
   "sha256": "38443e01415eba6846b86f7e21159437cb8ac9232715cf5d83850490b4b26156",
   "kode_sha256": "53647baead1a01744259263dd12df7de4e427c253b4e9cc9b99872c513963a81",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.3: Menanam domain nilai di dalam berkas",
   "berkas": "bab20/i3_03_domain_geopackage.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_03_domain_geopackage.py",
   "baris_kode": 44,
   "sha256": "ab9fc6a37a7884e5facd8b7831b3390cc2ce3952a83c361faed3033e87b3bf40",
   "kode_sha256": "765cc96041ea1130e1028149b9b94d76932f77b241f27791d5120365f54f1ac6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 20.3: Menanam domain nilai di dalam berkas",
   "berkas": "bab20/bab20_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "9a5a4c965bd076767953a28f8858c0bbf72c3bfa8e551dfeaebd8c487267a452",
   "kode_sha256": "3ea78c0ea253973d925c82c0ef8de1b75ad95ef8fa5fd5c741466c169579ce93",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.4: Merancang formulir isian",
   "berkas": "bab20/i3_04_formulir_widget.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_04_formulir_widget.py",
   "baris_kode": 114,
   "sha256": "a198fb5b01a9b50f9845aa0ed16975c9f4940d27ec1be9b0a98665383b784f97",
   "kode_sha256": "0a9e7dab452c4a27954709183ba7035c24104cd6274c07284e33a54036c9333f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.5: Pagar di dalam berkas",
   "berkas": "bab20/i3_05_pagar_di_berkas.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_05_pagar_di_berkas.py",
   "baris_kode": 32,
   "sha256": "709aec3681a0d5d62caac41f9fc13e806c6f8c8f2bfbdd22fd0c28f357a103da",
   "kode_sha256": "a6303512b6a95c29f5e9378fc0f521887ca2e0eae28732bb9a5ae5d0bd0d5743",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.6: Memeriksa mutu data survei",
   "berkas": "bab20/i3_06_cek_kualitas.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_06_cek_kualitas.py",
   "baris_kode": 53,
   "sha256": "7eef71321a1446c1ffe9addadf733a0b1bb5971842589b8c16575bc749b6268b",
   "kode_sha256": "0f4cc55b670793177c76790e0d778c5d8834f6003765339c615b88e268c0bc13",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.7: Bertanya ke basis data dengan SQL",
   "berkas": "bab20/i3_07_sql_dasar.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_07_sql_dasar.py",
   "baris_kode": 45,
   "sha256": "14ef44df345271ffa9aec4c52498cfd75802cc0678da9c305028286cc7a963b1",
   "kode_sha256": "f71303cd73640edc7c6debfe05b800215d80b545cbf733e32cec582bea7a2811",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.8: Aturan kualitas sebagai ekspresi QGIS",
   "berkas": "bab20/i3_08_ekspresi_kualitas.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_08_ekspresi_kualitas.py",
   "baris_kode": 36,
   "sha256": "3a082a75d8c9a33d8e1fb8a1e6f904745cffe2bbf41626e1732d5d92bfc3c65c",
   "kode_sha256": "158e2d39711794cde338dff7a4cd9aa5f3dc5942fac455bed1906ac19a0bad18",
   "sintaks_python3_ok": true
  },
  {
   "bab": 20,
   "bab_judul": "Titik yang Bisa Dipercaya: Survei Lapangan dan Basis Data dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 20.9: Dua surveyor, satu nomor yang sama",
   "berkas": "bab20/i3_09_gabung_dan_bentrok_id.py",
   "bahasa": "python",
   "seri_asal": "I3",
   "sumber": "seri/I3/skrip/i3_09_gabung_dan_bentrok_id.py",
   "baris_kode": 31,
   "sha256": "aacb10c2298f75cfe6de512782ccbf6a3dcc3f0435a771c1fa655f48235a360f",
   "kode_sha256": "947515161db4d5baf2fca8457afded2a6f138cf9027869324e38846ca90d12c0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Dua cara menjalankan, dan satu tambahan untuk Processing",
   "berkas": "bab21/bab21_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 12,
   "sha256": "a77521db80eb64bc434735ac5d207023f909d3bafcb22be828f3275766eae0d8",
   "kode_sha256": "ec4b6a9246af2766b07a02b30df5293f37d3dfe6ccb84ed18c555fb0a01f0ecc",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.1: Memanggil satu alat, Buffer",
   "berkas": "bab21/b2_01_jalankan_alat.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b2_01_jalankan_alat.py",
   "baris_kode": 37,
   "sha256": "504b23fac4c8551a604cb66265d4e2c55be164b181f7848678dea4b634b08a77",
   "kode_sha256": "8dbefe237c138adf800ed4025cf7d6ebcc2d53dfa19510c6af91caa8f4df1eef",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.2: Merangkai alat vektor",
   "berkas": "bab21/b2_02_rantai_vektor.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b2_02_rantai_vektor.py",
   "baris_kode": 31,
   "sha256": "88fba1b15051e0a3bbab2db239d91f123d18469d849ccbc59a80c20aad0dac83",
   "kode_sha256": "b8e1069e2d972d8201ef1d07ba8447554ba99a2659e2bf1fe642b39406f837c9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.3: Alat raster, NDVI dan tinggi tajuk",
   "berkas": "bab21/b2_03_raster_alat.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b2_03_raster_alat.py",
   "baris_kode": 35,
   "sha256": "23c181f7cc8e513de4e7ef4115f4bffe9ca99b743ec31ac11b1e2c8677f5eda3",
   "kode_sha256": "9a09c20294817cde5e0b7de5115f691e9fa9793b8e5729c5150f5e2b7217d330",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.4: Batch sederhana, NDVI untuk semua ubin",
   "berkas": "bab21/b3_01_batch_ndvi.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b3_01_batch_ndvi.py",
   "baris_kode": 28,
   "sha256": "1d087679f2a701a9b67bc344eb012782b40fd38a1df5371a3a1615f06805c8db",
   "kode_sha256": "53795589086ef9128cae5f49f6401e66cf288fb34978c471a7dfedf988a8aabf",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.5: Satu putaran untuk tiap fitur",
   "berkas": "bab21/b3_02_batch_per_kph.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b3_02_batch_per_kph.py",
   "baris_kode": 31,
   "sha256": "27054868bb35cbf8b632eb9e3f3cfd3ba6266f4e6f3f1ca499e11f0f29165849",
   "kode_sha256": "3e2867ffa23e95251bc5bf74fdc5b00467f2eb5ce112659703c4278ec902b46f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 21.6: Batch di latar belakang dengan QgsTask",
   "berkas": "bab21/b3_03_batch_latar_belakang.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b3_03_batch_latar_belakang.py",
   "baris_kode": 42,
   "sha256": "d2799330b3043f72ca8da9a056238085ccf4d87e8aed12907ee817a35b3e3955",
   "kode_sha256": "5586e55d8f39077171ff14cb9d9ec2c604af0d92e9de04373b2d6be92913b6c1",
   "sintaks_python3_ok": true
  },
  {
   "bab": 21,
   "bab_judul": "Memanggil Alat dari Skrip: Satu Perintah, Satu Analisis, Satu Resep untuk Banyak Berkas",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 21.6: Batch di latar belakang dengan QgsTask",
   "berkas": "bab21/bab21_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "2ecb635d028145216f4949702d8ede617ae79c743b17d728207c0f8269631fbc",
   "kode_sha256": "f2fe321b06122776811dace6423b083ddd1c0ecf276d52bf0121767a9ad00ecd",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 22.1: Memeriksa masukan sebelum dipakai",
   "berkas": "bab22/b4_01_galat_dasar.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b4_01_galat_dasar.py",
   "baris_kode": 48,
   "sha256": "3bd0c4f592f52e120395dac50c76cc93d4f559950f3eaaf891c0c07e5e739888",
   "kode_sha256": "8d926ca38a785c851c5b7f56212d8df60b35e8cdf33572ea6143959424ed09be",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 22.2: Batch tahan galat dengan laporan",
   "berkas": "bab22/b4_02_batch_tahan_galat.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b4_02_batch_tahan_galat.py",
   "baris_kode": 62,
   "sha256": "52bbe1deb627fa5f57731a0b58b17740ecc5e9b58561f67d17d4157d040c1fa7",
   "kode_sha256": "0b83f60a722e57ad6a2a5b87067ca9267d986feb45b98c5f7ce52a1ec82eca2d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 22.2: Batch tahan galat dengan laporan",
   "berkas": "bab22/bab22_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "90ed4a810248ee18eaf455b2c071815952c4e15a8a662ccc45e3424b14379133",
   "kode_sha256": "f42cca70839bd00c1bf2d22558f5216a4cb59e6ee5ae25c3eac14e800c7d07d0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 22.3: Pembungkus untuk alat Processing",
   "berkas": "bab22/b4_03_galat_alat.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b4_03_galat_alat.py",
   "baris_kode": 31,
   "sha256": "7b0eeb82d3ee8dbdf179fb194f5eccd6c95390ce7295ba8c7119aa2ee9502935",
   "kode_sha256": "eda1721b461270218eb3a9465ae37a2edeb860c951f12f6914b8b309e7614f93",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 22.3: Pembungkus untuk alat Processing",
   "berkas": "bab22/bab22_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "417b44fcee0da446b93911baf404d27ffa9d18847dd565c281c9db0d9fb05edc",
   "kode_sha256": "e5127b8936402d9f6ead949831a7751209cbc800c848d74d3628a8f738369089",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 22.4: Menghitung ekspresi dari Python",
   "berkas": "bab22/b5_01_ekspresi_python.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b5_01_ekspresi_python.py",
   "baris_kode": 64,
   "sha256": "ade40f705b9ac3678bea62d2e9be8d4bc9abdd842b650c551f8f07f12ab4c68d",
   "kode_sha256": "894ee336990ad9ac14697cf5f233afe24cea9519f4167789f8a28e93087a360b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 22.5: Ekspresi di dalam alat Processing",
   "berkas": "bab22/b5_02_ekspresi_di_alat.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b5_02_ekspresi_di_alat.py",
   "baris_kode": 42,
   "sha256": "214512799fe8312c9fb291b608ff4480e899e3dc8b4e58ea0cf87711fedbe034",
   "kode_sha256": "9657dbf73e5a7e2cbebb12611b77620967b81b3a0d3175c4c4142c5903c613d6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 22,
   "bab_judul": "Skrip yang Tidak Mudah Menyerah: Galat, Batch Tahan Galat, dan Ekspresi QGIS",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 22.5: Ekspresi di dalam alat Processing",
   "berkas": "bab22/bab22_contoh_03.txt",
   "bahasa": "ekspresi",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "4e1f4f86d5ef1e358b08d8a28995381b959efaca27d56fbbdae69e83075f7db9",
   "kode_sha256": "0e15c551d4aafa39f3513cdeac24ac7e0cad2661cb01b5f5d036b6fa26f73e06",
   "sintaks_python3_ok": null
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 23.1: Membangun model lewat Python",
   "berkas": "bab23/b6_01_buat_model.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b6_01_buat_model.py",
   "baris_kode": 63,
   "sha256": "aa870bef10a49e64de971082feab45a9e790ed26f0d4df2cf2833345edb10cde",
   "kode_sha256": "319dcbb4fd12d6c2feebab74da8f73fc16e81220b8f693249449e27961468440",
   "sintaks_python3_ok": true
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 23.2: Menjalankan model dari Python",
   "berkas": "bab23/b6_02_jalankan_model.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b6_02_jalankan_model.py",
   "baris_kode": 30,
   "sha256": "5876fa8d2f1aeb50f68ecc183bc44bbfb27ab66eccc4462702ee9b3c3b11f849",
   "kode_sha256": "826c28d0e1ee170aa3019a64ea3b084bffad32b8d402c2136021687ff71b5dea",
   "sintaks_python3_ok": true
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 23.3: Proyek mini terpadu",
   "berkas": "bab23/b7_01_proyek_terpadu.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b7_01_proyek_terpadu.py",
   "baris_kode": 126,
   "sha256": "e10fd3e81aea5bc4ae5631edfa0ffac5c1eb8925ba265cd023ea44477ce8a27b",
   "kode_sha256": "66896c746f6fbb2bf6c485438f1245172644ad5144f4db004c861a6894533509",
   "sintaks_python3_ok": true
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 23.4: Ringkasan sebagai tugas latar belakang",
   "berkas": "bab23/b7_02_tugas_ringkasan.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b7_02_tugas_ringkasan.py",
   "baris_kode": 83,
   "sha256": "c4e3a567a69e804f5e5a955d9a53750692768ce020001143980fc5262081c56d",
   "kode_sha256": "8477778b930c335f51994bff3654b27f5fcaeb02f590771b06c79cc2d7da2ebb",
   "sintaks_python3_ok": true
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 23.5: Ceklis masuk M1",
   "berkas": "bab23/b7_03_ceklis_masuk_m1.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b7_03_ceklis_masuk_m1.py",
   "baris_kode": 124,
   "sha256": "73b98200f8d6b880a0624adeb4002ce83c5379a1ceeaefa3dbd87524078df2fc",
   "kode_sha256": "edf139ac18b6ec01361c45675c3c343f4b712122753ebe659762948abc9097c3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 23,
   "bab_judul": "Menyatukan Semuanya: Model, Proyek Terpadu, dan Ceklis Masuk M1",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Uji negatif: membuktikan ceklis bisa berkata GAGAL",
   "berkas": "bab23/bab23_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "384594b3477ea9e098dbcd5fde51938be88a956db0b629fc6baa31d20c1728c1",
   "kode_sha256": "96a7abe3d0c5402343697bfa050cba1c2eb40c9dd051a39ec2e422b359d2c7db",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 24.1: NDVI dari citra cloud (versi naskah)",
   "berkas": "bab24/skrip_1_1.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/qgis/skrip_1_1.py",
   "baris_kode": 46,
   "sha256": "395a5e4930da5d314ac70c6ec7a1c4922427a416f20da4d64caf585cd0889ab7",
   "kode_sha256": "1872cd6a3ec42d55ceb85e400cc429cfe494cccdd3e99f25f394007554c01dea",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 24.2: NDVI cloud, dengan layer bernama",
   "berkas": "bab24/skrip_1_1_alternatif.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/qgis/skrip_1_1_alternatif.py",
   "baris_kode": 51,
   "sha256": "7a0bdec7bea2ee819bf60192931d4f568878306a3304ea278abdc48549de4c99",
   "kode_sha256": "723260a9e44e4f51f1089c483ba3f08529ce3496ab546fcc55d4437199a0e808",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 24.2: NDVI cloud, dengan layer bernama",
   "berkas": "bab24/bab24_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "e56467aa249f1a995f92ba71a1b7d944641bd2cf53254cdf460d94d33796e7bc",
   "kode_sha256": "c67b2ac2bc125d90c2cc30e58deb42f5c1fbd1c88c5fc76816f9c008c6ab5cf2",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 24.3: Akurasi peta dari titik survei",
   "berkas": "bab24/skrip_2_1.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/qgis/skrip_2_1.py",
   "baris_kode": 29,
   "sha256": "2247f88390ee00fdc9099c58a4ed34c6652ce5e19b3af6affc9758a369e53d71",
   "kode_sha256": "bf59088ce9e1ecef08c8f3623b4219fc2ac9b8acb9375aa23fa1a7296e9b3bf4",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 24.3: Akurasi peta dari titik survei",
   "berkas": "bab24/bab24_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "9e84054f8bfcf3ed720d36224a30f8be7681281e037d01f6358de5f7b179cf57",
   "kode_sha256": "b24fb81a9fee70539f70e34fc0e1873fbd874bf3f3e54537bb26360c4fedaeab",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 24.4: NDVI banyak ubin di latar belakang",
   "berkas": "bab24/skrip_3_1.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/qgis/skrip_3_1.py",
   "baris_kode": 36,
   "sha256": "b69f9d16ed08adb0736c228932c343761a9fbadf95cbf8757ec3f0be2e2c9f43",
   "kode_sha256": "e22e3463ea6fb4198227cb65cfa6cef1b402b1247e80e1c3a2d24c0bae4b31f6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 24.5: Batch NDVI, versi dengan layer bernama",
   "berkas": "bab24/skrip_3_1_alternatif.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/qgis/skrip_3_1_alternatif.py",
   "baris_kode": 44,
   "sha256": "482adf3a285e264b46075cf9cb5c259e7d17d1b6e9124c60648140f4ea2a5165",
   "kode_sha256": "474969525124947768d8fdeda2c9afbfae07df3c01179023546284798f18c9be",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Ekspresi 24.6: teks laporan untuk Atlas (bukan Python)",
   "berkas": "bab24/bab24_contoh_03.txt",
   "bahasa": "ekspresi",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 10,
   "sha256": "1d96c35127afe3be61432d15929a84961169ebbd5c01cb304a85187f13c93a4e",
   "kode_sha256": "241b156de731ab1848467242dd82ede2ffdb02197d5d14a9d5c6913884ff3adb",
   "sintaks_python3_ok": null
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Ekspresi 24.6: teks laporan untuk Atlas (bukan Python)",
   "berkas": "bab24/bab24_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "9c115136c3bb9b1b4d8087f8cbe7d25f062cf81b7faa68f64a3ad01cfefaba97",
   "kode_sha256": "1169d736a2efedf1173387543877fa3facf106ef9e37e56d4aabfe24c6805dde",
   "sintaks_python3_ok": true
  },
  {
   "bab": 24,
   "bab_judul": "Satu Perintah, Banyak Pekerjaan: NDVI, Validasi, dan Batch dengan Alat Processing",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Ekspresi 24.6: teks laporan untuk Atlas (bukan Python)",
   "berkas": "bab24/bab24_contoh_05.txt",
   "bahasa": "ekspresi",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "f724d699bc02d7209b78162ab3a8766a06d83584d05a3b92da190e40c87c9e90",
   "kode_sha256": "47612489f9c0278c2e7d72e81a299481681d456e718899ae8d9a679dc404049a",
   "sintaks_python3_ok": null
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Berkas pembantu: _inisialisasi.py",
   "berkas": "bab25/_inisialisasi.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/_inisialisasi.py",
   "baris_kode": 18,
   "sha256": "01b24951370d79388ec55c91f44e7910bb88f632cebc8b69692973b439a65391",
   "kode_sha256": "9dbda6351c1311894667775d6f7afaf89b2394accefce0d1de760f8d627f0f6c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Berkas pembantu: _inisialisasi.py",
   "berkas": "bab25/bab25_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "72bca0871a539116dd7507cd96532d9a9dfda9b9fe4830f55a7473c767a4393f",
   "kode_sha256": "effeb5cd7bd0382e79553ec00ed8a6292bb781f089b0322da80effa9008456e9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.1: Memasukkan berkas ke PostGIS dengan GDAL",
   "berkas": "bab25/m2_01b_impor.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_01b_impor.py",
   "baris_kode": 27,
   "sha256": "5f7a8ab2d76db2f0b63444705957308b303c253a8083f6c590fcf5aca484b7ea",
   "kode_sha256": "2b0304a1540d20e31c772b12a1db83aac6fac920395c0316ff6a69cce8e6a262",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.2: Memuat tabel PostGIS di QGIS dengan skrip",
   "berkas": "bab25/m2_01c_qgis_muat.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_01c_qgis_muat.py",
   "baris_kode": 30,
   "sha256": "2798fd65ef398e101adeb6d091dde488e162dccdd7a87ab6133eea7b882d31a9",
   "kode_sha256": "8c975a1339fca838850bdaca2b1349e3c09ab60e5b7133682fad6e872abdf9ee",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.3: Kueri yang sama di GeoPackage dan PostGIS",
   "berkas": "bab25/m2_02c_silang_geopackage.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_02c_silang_geopackage.py",
   "baris_kode": 49,
   "sha256": "7e1ae6d0c3b2121c402ab8e11ebc96abc33f32146d052cfbce9fa61dfc34e974",
   "kode_sha256": "e78c59686f6ad2d1e0de561c072247eea3db5e09fbf80631bbc664a3dd4afd24",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.4: Hitungan yang sama tanpa basis data",
   "berkas": "bab25/m2_02d_qgis_setara.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_02d_qgis_setara.py",
   "baris_kode": 24,
   "sha256": "ec83b70cf7f2e3458f739bfb1fdb04373941870bee17971a619bcb227b7c9e58",
   "kode_sha256": "7c452c257ae1d2e7a29013f4bc87b4ad3c517ee83c3a6862fe2946ad985e0b72",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.5: Rute terpendek dan tercepat di QGIS",
   "berkas": "bab25/m2_03a_rute_qgis.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_03a_rute_qgis.py",
   "baris_kode": 37,
   "sha256": "b948d503cb379b040158ae3f22992b628a32f621eeaf87bb16c0e8b3916e0f47",
   "kode_sha256": "294ef0023a80e42d0d496df01505125945d2532bf133216304da0955913875b3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.6: Rute dan area layanan, QGIS lawan pgRouting",
   "berkas": "bab25/m2_03c_silang_jaringan.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_03c_silang_jaringan.py",
   "baris_kode": 52,
   "sha256": "20fb45aba7663f8985c497b90734869aa2365f605466d10d3b060ba0d6486d29",
   "kode_sha256": "b48730588481de7694e75f2d480302c2bd552d9c07f36494cf3bd8ee5f8581b0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.7: Hidrologi dari peta ketinggian",
   "berkas": "bab25/m2_04a_hidrologi.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_04a_hidrologi.py",
   "baris_kode": 76,
   "sha256": "da406c7bb1c8a2574369580a4ac30214cffcec867d435f1be99383166d27a8cf",
   "kode_sha256": "7f0d656be7c292d01f184b5a1f6e89e5449d1810c03656737701e876537e7bb6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.8: Peta curah hujan dari 24 stasiun",
   "berkas": "bab25/m2_05a_interpolasi.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_05a_interpolasi.py",
   "baris_kode": 144,
   "sha256": "71c38ea06937138ac5d12f0949944849816838c1da71f357b3ea0a6aaccb5173",
   "kode_sha256": "068cd8906f8239d678a84c41bc74db9fade7ff2c1e6fa0e159fa42608bbc213f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 25,
   "bab_judul": "Dari Lemari Berkas ke Gudang Data: PostGIS, Jaringan, Hidrologi, dan Kesesuaian Lahan dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 25.9: Peta kesesuaian lahan dengan tumpang tindih berbobot",
   "berkas": "bab25/m2_06a_kesesuaian.py",
   "bahasa": "python",
   "seri_asal": "M2",
   "sumber": "seri/M2/skrip/m2_06a_kesesuaian.py",
   "baris_kode": 106,
   "sha256": "7394fca8b07ec8014754e04602462178caacbd452bc3ff106968f31d5ae3fac8",
   "kode_sha256": "73ee268b32da3d3d92e50fe7fd1a9a1ab82a3696f558e1ac7cbf6f0f57019a3b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Persiapan: folder, data, dan cara menjalankan",
   "berkas": "bab26/bab26_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "b49571be74b6e661321342107ffb6caf6fac598facaa303e6c57b1de618a967b",
   "kode_sha256": "b448c250ee8e7a697924b7ec0e99e4662a6a6181b39ae7b601bb2f9710feb430",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Kotak perkakas: m3_umum.py",
   "berkas": "bab26/m3_umum.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/m3_umum.py",
   "baris_kode": 79,
   "sha256": "9e8958ec850c7468d01a45359d1e6ffc7715b906fd2fa432cf34c5a7b9da5207",
   "kode_sha256": "0903bed255cb77add79f5298ef27d80ba5f3af89fd22eaa22bbda3d8cd0e0bee",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Kotak perkakas: m3_umum.py",
   "berkas": "bab26/bab26_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "dff4abf644e76e5fa80a28139c9758abfd8f21d1f4dca12480106231b17a0c38",
   "kode_sha256": "74135a414c18e45817e8ac0c00f6b64ccb4645282f02b6c7a6cafccbd6427976",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.1: Menyusun NDVI menjadi tumpukan 24 band",
   "berkas": "bab26/1_1_susun_ndvi.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/1_1_susun_ndvi.py",
   "baris_kode": 30,
   "sha256": "17164567a46c6b0f490968d6dd65fb2c87699cfe4e5f43d56ba392a2967c6fcd",
   "kode_sha256": "cb091b752b01a3d7bd31c8951261f4094016d27a92b5ce1ca3db361b060af5c3",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.2: Menggambar profil waktu empat titik",
   "berkas": "bab26/1_2_profil_waktu.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/1_2_profil_waktu.py",
   "baris_kode": 29,
   "sha256": "af67777e7cf095ddebd0ff30c790b9a1d4192f6262cb952e4b41482c0912294b",
   "kode_sha256": "b44d9b108116c193c2fadb8e4909b7e5e4a7b772efe33da7c7ed542e0e3bacad",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 26.2: Menggambar profil waktu empat titik",
   "berkas": "bab26/bab26_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "bc9534506d12cd23195bccaf129de3dbcea4f825a3ac2318fff45d793759f4bc",
   "kode_sha256": "bf8b7b2f3d0adb910dd2a0695979896a2a37e9c2f97318f025cc8fa0b0dedfb6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.3: Memberi tanggal agar bisa diputar seperti film",
   "berkas": "bab26/1_3_atur_waktu.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/1_3_atur_waktu.py",
   "baris_kode": 20,
   "sha256": "8c9297dd3461955d398fc1d3132385148db14b3cade4d603f9aa2aff66a8518a",
   "kode_sha256": "2a241c7419b633963d666662e8a20974248c149bb31c205616b983367931522e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.4: Membuang awan dengan band SCL",
   "berkas": "bab26/2_1_masker_awan.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/2_1_masker_awan.py",
   "baris_kode": 32,
   "sha256": "e93969d6230b7071eb93e22739d956c62c9d53c919dd5cedb720f69c6404b6f8",
   "kode_sha256": "e034f7f4404f6afb2ad0a57d1ca74a94bcecf9cf47e5b97836af652adcd70e9d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.5: Komposit median dari beberapa tanggal",
   "berkas": "bab26/2_2_komposit_median.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/2_2_komposit_median.py",
   "baris_kode": 21,
   "sha256": "b3cf467353f425b221a8aa9bf98bdbf69bd946ee0860990c21f49052dc55b376",
   "kode_sha256": "d38bdfb88e4a413199339bd5178226a4d1f542cecf395775a5703fe99e401121",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.6: Menambal lubang awan, lalu menguji tambalannya",
   "berkas": "bab26/2_3_isi_lubang.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/2_3_isi_lubang.py",
   "baris_kode": 41,
   "sha256": "3b373501cba0745ddcb6b25064c9efb3ecba81c7389b82c88ec195155564446d",
   "kode_sha256": "7bcec0b6c56fe677cb07d0760df5b0d932694e2127e9344a7bc76ab92dd08a8c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.7: Metrik deret waktu per piksel",
   "berkas": "bab26/3_1_metrik_deret.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/3_1_metrik_deret.py",
   "baris_kode": 32,
   "sha256": "ed64522a81fae98f4bf8cd938d0c5d1aee63efd8077b29acac85e779bb3215ce",
   "kode_sha256": "3af33dabbfc8d8f985a2c330fa86db4d3ef32d14c01aa80bf1239e735fb7a9e9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.8: Deforestasi dari dua waktu",
   "berkas": "bab26/4_1_deforestasi_dua_waktu.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/4_1_deforestasi_dua_waktu.py",
   "baris_kode": 62,
   "sha256": "0a3dbf9d2bd26dc20f1d7a9e34f162fa357a37939a2bc8b7c6c499dfa8b80507",
   "kode_sha256": "e8cbc0482409a9cf97eafd5bf0ef9a83259e24658035e7a1674ede98efd9135e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.9: Titik patah, kapan hutan mulai hilang",
   "berkas": "bab26/4_2_titik_patah.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/4_2_titik_patah.py",
   "baris_kode": 57,
   "sha256": "e3a391f7314ab79b4286c5dd1f2c77c412d5c6d45115a3fd572794b1a0382fa9",
   "kode_sha256": "11a9bae44fb5ab58af118ab3073e363df232487f795a20a20017463f8ebe9398",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 26.9: Titik patah, kapan hutan mulai hilang",
   "berkas": "bab26/bab26_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "fe346d90c35a9ce718b9e1d1b506eaa1dc8ec0813bd4a05204c65a06268b3c11",
   "kode_sha256": "bebf53d582428784b5450922e8a206920b9472ca86bbfa31c8bf31b3b9af8a0f",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.10: Bekas kebakaran dengan dNBR",
   "berkas": "bab26/5_1_dnbr.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/5_1_dnbr.py",
   "baris_kode": 59,
   "sha256": "d74a60db74098bb24cba8b93ed003ededb7b2a348fba31a665f7fe7ec9799d95",
   "kode_sha256": "6d9883a934d74a2ee51e64bce1692f2ef01c38831643fcaa51aa061dad31f69d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.11: Mencocokkan titik panas dan memperkirakan tanggal terbakar",
   "berkas": "bab26/5_2_titik_panas.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/5_2_titik_panas.py",
   "baris_kode": 50,
   "sha256": "9382bdd0b5b6dfb780a2d5670b3a56fde5fa1f66d4638e0867fe483ecf13bddd",
   "kode_sha256": "61ef92c1e19533003f578c3e05b5f8ab664e4f93afc238acd0d1baef1b8b6c42",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.12: Menyusun dua belas fitur",
   "berkas": "bab26/6_1_fitur_deret.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/6_1_fitur_deret.py",
   "baris_kode": 27,
   "sha256": "9e7f30b205b17d6ff14d8dd20dade975bf1c21414d8e505516c7e4f0a5e94b5f",
   "kode_sha256": "3a25dc4e1dd822f2450beb175c83e3228d3706b91dee73b096916bd29e7a5d44",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Kotak perkakas kedua: hutan_mini.py",
   "berkas": "bab26/hutan_mini.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/hutan_mini.py",
   "baris_kode": 89,
   "sha256": "f8f151562bf47d4075955b1b152f49eb3948bce36fbcbbe57888b712dac616ae",
   "kode_sha256": "894aa76cd57282c9d4416e09358431073e00ce039553d2c3437d7b73bd0e2826",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Kotak perkakas kedua: hutan_mini.py",
   "berkas": "bab26/bab26_contoh_05.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "e50c1192272e354339848f41a4674127f1e84f85be4e2ae15baf0f7e2139c915",
   "kode_sha256": "e94b8442bab5cb87fb4ceb5a0e28195b4faab892aff885d4d2c4eabb1f1db5f2",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Kotak perkakas kedua: hutan_mini.py",
   "berkas": "bab26/bab26_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "3d94993b37667b3effe4da51db5f28c6351702659c0c7efb6bc836fa0d28c2d6",
   "kode_sha256": "2c96ec22f3ff8457bad49477a8bc751104fdec40e837c4b27baf5df231122e89",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.13: Melatih hutan acak dan memetakan seluruh area",
   "berkas": "bab26/6_2_latih_klasifikasi.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/6_2_latih_klasifikasi.py",
   "baris_kode": 55,
   "sha256": "150246e03a7a50972b690b4c2ee2f3799772d2ea9ad3ddbafcf7ac58de184330",
   "kode_sha256": "874f036fe762d2df09459f311ce711653994bbfb437f408ab45b7f71ee2d3468",
   "sintaks_python3_ok": true
  },
  {
   "bab": 26,
   "bab_judul": "Hutan dalam Film Pendek: Deret Waktu, Perubahan, dan Klasifikasi dengan Skrip",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 26.14: Validasi dua peta dengan sampel berstrata",
   "berkas": "bab26/7_1_validasi.py",
   "bahasa": "python",
   "seri_asal": "M3",
   "sumber": "seri/M3/skrip/7_1_validasi.py",
   "baris_kode": 79,
   "sha256": "bbb371b2860090e6187f5cc8f380574ce0f2752a556502a81c02abb79b11465c",
   "kode_sha256": "784e962cce1c7e7755ff7b7277e3e1d78edd4cb3848bed4a8a46020d1f58ea18",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.1: Dasbor satu halaman",
   "berkas": "bab27/buat_dasbor.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/buat_dasbor.py",
   "baris_kode": 77,
   "sha256": "6700b16ca049998f4eab4ef5010fe724b0f3ddc9c9b4abbc300a17029831280f",
   "kode_sha256": "ddac37240506524fd2202b9b7f826f7ecccb29016e05ed8e8914f505132f7ace",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.2: Peta web dari data QGIS",
   "berkas": "bab27/buat_peta_web.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/buat_peta_web.py",
   "baris_kode": 75,
   "sha256": "2121bea9d4a5449c5bd981037d8c03ac6d283327f05010d4ac2d798096e3d2e0",
   "kode_sha256": "b919b9f8419fae549552a175437f1d56c85296e73ba6a3b201f108c2947a48b7",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.3: Model 3D dari DSM",
   "berkas": "bab27/dsm_ke_obj.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/dsm_ke_obj.py",
   "baris_kode": 66,
   "sha256": "093e0db785f1c8c0c30bfff89b48836a270bec70ef144c48c63ac5d76d52ac07",
   "kode_sha256": "6d614ba9023367bf60ad3a68446424db9f84d12ea5ba9f4ac2d0ad745e346404",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.4: Alat Processing buatan sendiri, gaya kelas",
   "berkas": "bab27/kerapatan_hotspot.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/kerapatan_hotspot.py",
   "baris_kode": 77,
   "sha256": "a46e2eafe94944679bc341de6b71fbdc901cac6dc66a2eca9dd7774e6eebc495",
   "kode_sha256": "29366a254b31fba4faa58cb01323dec652d590953097db364b82074fc3e87c8d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 27.4: Alat Processing buatan sendiri, gaya kelas",
   "berkas": "bab27/bab27_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 9,
   "sha256": "b4f414ee0640ac588d7f317d674263304d52443e55217c513ca8587d106778cf",
   "kode_sha256": "dfc26c72009d9203102e0da76f2844eb850e0d724c2ea71b3c365cfd277708b0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.5: Alat Processing gaya dekorator",
   "berkas": "bab27/tambah_luas_ha.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/tambah_luas_ha.py",
   "baris_kode": 27,
   "sha256": "aecae2631903e292cac637e5f9fbff39ce11b8dba7dcb2638a3a9c23924bced2",
   "kode_sha256": "f6aa8a74631a957c19c8d7bbdbf70236e35f42cb147d3c7f4e4084fbd91d3b81",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Skrip 27.5: Alat Processing gaya dekorator",
   "berkas": "bab27/bab27_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 7,
   "sha256": "187fe6b53af963ab01b70da23c07624c7668d6d287f7d443dd544e6d918bf127",
   "kode_sha256": "bc2d9765fe8f325d62ff01f2ff618cd7991875918c46275ca2bc5e5451b19ccb",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.6: Plugin sendiri di QGIS",
   "berkas": "bab27/__init__.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/plugin_ringkas_kph/__init__.py",
   "baris_kode": 5,
   "sha256": "9b2ef43067325835cce67a492f693fe8100f7d6d4b6bdbf0961fdf8f9f6a5114",
   "kode_sha256": "4c924e74394cd33c7b9d49b26228e8c50b5ba866cce209764b58d9fa49bdb6e9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.6: Plugin sendiri di QGIS",
   "berkas": "bab27/ringkas_kph.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/plugin_ringkas_kph/ringkas_kph.py",
   "baris_kode": 40,
   "sha256": "b805629aba5d9e4991635032a5946183927dc33e702b37fc9d4150e3f4ec422c",
   "kode_sha256": "f4054cc9951843acdf9403f626511bc178a64473c2c1b5dfb00094a20ce5ddc9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 27,
   "bab_judul": "Dari Skrip ke Produk: Dasbor, Peta Web, Model 3D, Alat Processing, dan Plugin",
   "bagian": "B",
   "jenis": "skrip",
   "konteks": "Skrip 27.7: Memeriksa dan mengemas plugin",
   "berkas": "bab27/kemas_plugin.py",
   "bahasa": "python",
   "seri_asal": "M4",
   "sumber": "seri/M4/skrip/kemas_plugin.py",
   "baris_kode": 61,
   "sha256": "84b462c46214a08ab4132ad1d3c406419bb0987906e69a73305a6d8982030059",
   "kode_sha256": "67998b4dded1fad25e2b3e2108dcc6d55974bad54e69adb027a0ecbc3f0db39a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.0: Kepala skrip untuk terminal",
   "berkas": "bab28/bab28_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 13,
   "sha256": "92d87731ff42dcfa4f6daa65b662a3fd4593f6b4f8861a04458745b5a70942a8",
   "kode_sha256": "d7735a20cdc44ff051c5c093bd0d2ffec11c2206f8f8ecc0def67e4dcaa3a6b1",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.1: Muat, ubah, simpan",
   "berkas": "bab28/bab28_contoh_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 20,
   "sha256": "8c64168b3c58b7c5c48e99fb601639cc0aac59993ca7a05fad64446695a8acdc",
   "kode_sha256": "d86dda96020309c57249610c532166a58817100baef754e76643d757a152d7f9",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.2: Loop fitur",
   "berkas": "bab28/bab28_contoh_03.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 17,
   "sha256": "83d29924d9081986d207fefa4ac36df8c26344633335f805d76811f5956c8ff0",
   "kode_sha256": "b8a7c890a1f51550b88c7bde368a9ad34fa8f30af531558633813ca31b980219",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.3: Memanggil alat Processing",
   "berkas": "bab28/bab28_contoh_04.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 14,
   "sha256": "d06a79b8014d630e3a781cb5fccdce863de6fcc0cdb536ca50979f0f6367673a",
   "kode_sha256": "c3443c556b0c01d06f7fcce1cd9affcb01bc46ef64f7faec971db6f7309a911d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.4: Batch, banyak berkas dengan satu putaran",
   "berkas": "bab28/bab28_contoh_05.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 12,
   "sha256": "7a9382162cf8d39dfc0ec46f647662973ea6776609338d7350b84ecd3481c57c",
   "kode_sha256": "97430f895e6b0fdbc0dfb556c61dd2630ce1324e32d5b6ca472dd92c339bcbb6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.5: Tahan galat, satu berkas rusak tidak menghentikan semua",
   "berkas": "bab28/bab28_contoh_06.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 25,
   "sha256": "9c838b18b47ab45de1f4eb7ec7d983d4f99ba1483878f0ac1ce44eab950a79ab",
   "kode_sha256": "399122b6e8de90d451cec136679d5f933edbc49a430bc378ebc1453477d00671",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.6: Ekspresi QGIS dari Python",
   "berkas": "bab28/bab28_contoh_07.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 20,
   "sha256": "9bb4d79159468e22efcb60fc3a32a5d245d9768efb314a7f27fbfb3309be96a4",
   "kode_sha256": "7fd292c5253b347e13beafda1afdb2fcfa08982e4fb6aa059148612233207efc",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.7: Baca dan tulis berkas CSV dan JSON",
   "berkas": "bab28/bab28_contoh_08.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 21,
   "sha256": "fc21187c4bc8a83d0af44d54f9e562cee28319340bc17122675461bb6379e553",
   "kode_sha256": "a1514670f4e3b4ce276bcec8eaddbea7e6a6474c01a8654d4b2a5b781827da00",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.8: Membuat laporan dari beberapa sumber",
   "berkas": "bab28/bab28_contoh_09.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 37,
   "sha256": "786562b4f4276fc4154e01f158e3ae1d89cb1d2691e8adef0a74721da5c94632",
   "kode_sha256": "128be1b3b0cf574592ea5dcb03ccc223d81b7df397cb532568a974fd667cb1fc",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Pola 28.8: Membuat laporan dari beberapa sumber",
   "berkas": "bab28/bab28_contoh_10.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 5,
   "sha256": "0eb31f0c4bb0dac305cdd02c34452eaf92d12e4438b4d67594e35979da3e8c24",
   "kode_sha256": "0f0d84b3e1d9e7037c99b8823ed915c648f30819eaba81071a4139a33b403552",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Jebakan lintas bab",
   "berkas": "bab28/bab28_contoh_11.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 3,
   "sha256": "7c188221b3952b519f2107380bfb5cf5ef21116cf884affe5bad244a32c0dcc6",
   "kode_sha256": "1e24e8a0eebc635655465598452471c200c723e114353d01c73bd32b940fbb97",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Cara mencari fungsi sendiri",
   "berkas": "bab28/bab28_contoh_12.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 16,
   "sha256": "473cfc23229b2f545a7d93891f3c242a3da545a2c66c7618998387dac39539ce",
   "kode_sha256": "42421674db32d54ced626ba9525a9ce911a2edaaa5b9437d8ae8b0d4c4c9bddf",
   "sintaks_python3_ok": true
  },
  {
   "bab": 28,
   "bab_judul": "Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya",
   "bagian": "B",
   "jenis": "contoh",
   "konteks": "Latihan akhir: rekap petak dari tiga sumber",
   "berkas": "bab28/bab28_contoh_13.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 38,
   "sha256": "43e3ff17d0ac9de42bf8a25542bce0dd6ef1e7fd094b560397742451bfdada56",
   "kode_sha256": "c57dbd1032be617ad13a0d4dff79b8b9db04b00db8a601fc4bfc9f61842425b1",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab30/bab1_skrip_1_1_pro.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_pro/bab1_skrip_1_1_pro.py",
   "baris_kode": 20,
   "sha256": "d12d6b7b97e9c72bdb8d00a5f65eee92ab59f37814c3c5bf41b22681da3d3b32",
   "kode_sha256": "5b077109698949f6a6d35508ea2d8d3af8763b3c394e7412e22e133d686c8c4d",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab30/bab1_skrip_1_1_arcmap.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_arcmap/bab1_skrip_1_1_arcmap.py",
   "baris_kode": 18,
   "sha256": "d030b4062ed762568c24c575ac03bd29ce114effbea5411bf5ee8327b7f40a63",
   "kode_sha256": "671fa7eadfcd94aefeafa6ca33674a9c4b4caf2911805d205e53374fcef24bb8",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab30/bab2_skrip_2_1_pro.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_pro/bab2_skrip_2_1_pro.py",
   "baris_kode": 24,
   "sha256": "8716ddc84a1c907d66ca21de1f74dc14f629baff617ef04d2d03e38ecba4f888",
   "kode_sha256": "c22d4c720e469e908822e58036f61f1c468e0c5ad386c1fb4ce77afa42363c22",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab30/bab2_skrip_2_1_arcmap.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_arcmap/bab2_skrip_2_1_arcmap.py",
   "baris_kode": 25,
   "sha256": "c65d32c43c53f6586d233de8b59595d7a34808de254ca62f5c533a463abfa14b",
   "kode_sha256": "b8eaf8b133371fb6102afa6e6795cbc95cf4d1467cb50368e05c1672f8099c89",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab30/bab3_skrip_3_1_pro.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_pro/bab3_skrip_3_1_pro.py",
   "baris_kode": 23,
   "sha256": "e38da320db217fcb2822d51c098d66ac9bbccb02aa9a325ba70f062dd2943f9a",
   "kode_sha256": "a70ee8bd9eccc5cfa9c5345b5867ef82f15fa72de144db5cad7cb57479b121bb",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab30/bab3_skrip_3_1_arcmap.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_arcmap/bab3_skrip_3_1_arcmap.py",
   "baris_kode": 24,
   "sha256": "182de1b58061db25eb3b28f2a67583b10d67231705a893b99a7f3ab22ebb5c6a",
   "kode_sha256": "f1e2fc881fa87a5a00630231f0c12919a9ec035b94b519eb279c7860e30185aa",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab30/bab6_skrip_6_1_pro.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_pro/bab6_skrip_6_1_pro.py",
   "baris_kode": 14,
   "sha256": "e40cde08970398b82a1a8e77dec83a0a3374615fbe358c5dd479eb5f7cf75021",
   "kode_sha256": "21ba8eacfa9020bcef8d6e28485f4a964d3ff82c4b1871f5bb9bad3268a7569c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab30/bab6_skrip_6_1_arcmap.py",
   "bahasa": "python",
   "seri_asal": "M1",
   "sumber": "skrip/arcgis_arcmap/bab6_skrip_6_1_arcmap.py",
   "baris_kode": 15,
   "sha256": "b8cf33d3e42a7c417bad3f1b255acdd826dc5579d47d8e1b99772a040063915e",
   "kode_sha256": "554eb5f01ca5ef21910ef091a5f2ddcf86d09338ceb8cf61cb1340fa9520ee5e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 30,
   "bab_judul": "Empat Pekerjaan Klasik di ArcGIS: Skrip Masterclass dalam Bahasa ArcPy",
   "bagian": "C",
   "jenis": "contoh",
   "konteks": "Teks dinamis untuk tata letak ArcMap",
   "berkas": "bab30/bab30_contoh_01.txt",
   "bahasa": "ekspresi",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "1c9659e11bb481e5fe8a77742afc910d530a6d097927a9558b491340bd9b1b83",
   "kode_sha256": "0d437157f57f84b6cbf61aa1ee728e8cbcffccd40e7d44750bf414a9367be9af",
   "sintaks_python3_ok": null
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab31/b1_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b1_arcpy_pro.py",
   "baris_kode": 27,
   "sha256": "f713c86108160009eeb8fede23bee1c29ec61ce92bfc2797771d963b25fae3d7",
   "kode_sha256": "0101353dd16b989d6058281622fe6f7d1c65af9f9341683a481f785da694fd03",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/b1_arcpy_arcmap.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_arcmap/b1_arcpy_arcmap.py",
   "baris_kode": 28,
   "sha256": "8bf87111993ef00185a749169cdae97b83584b1938413a1eb84e511621e98ead",
   "kode_sha256": "04141442f0b44e0fcbdf110cb82306141a787b3d3e018c86b5bfac4bac382f9a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "contoh",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/bab31_contoh_01.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 4,
   "sha256": "80c428bde3bce1e9a5ef7ad6571e7023bdd3fc5285b1264d4349437b6b5e7b43",
   "kode_sha256": "f087a5dc464ef020a660b1c3a9eb0becca0cc25aa2f978a3cea56dbb88905095",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab31/b2_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b2_arcpy_pro.py",
   "baris_kode": 34,
   "sha256": "c50818117e660eff2e53ae447f16f68571f2178054b554c697796103e27b652e",
   "kode_sha256": "3435b8fe6b3ffcf58106389779823fc7ef35b2e83d04bd2c0c36cc0bb8292df6",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/b2_arcpy_arcmap.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_arcmap/b2_arcpy_arcmap.py",
   "baris_kode": 35,
   "sha256": "792c339eea8f22385913fef4cc9f5da6c0d37fa36da78218e1eb11449d508073",
   "kode_sha256": "45f27f44526663981bb4db0bfde2f3c242434f48b64982f6d3e0e916a3d70c3b",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab31/b3_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b3_arcpy_pro.py",
   "baris_kode": 30,
   "sha256": "ac926213df74fb0194929624df175b3d853935faaae0dd0cc6a4a6226982896a",
   "kode_sha256": "569102afe50e11d1e3ee67d82a5d037a199e60ac4028f771ffe4db6ed8bf5a2c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/b3_arcpy_arcmap.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_arcmap/b3_arcpy_arcmap.py",
   "baris_kode": 32,
   "sha256": "ccb695c2e7f67c2c808447ac9dff6cb94704acb07fee8cce3db18084ef87508d",
   "kode_sha256": "06ffb803c115fb99887f23701296c8ad7f2c7f47a0636f07a3196e7f6431a93e",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab31/b4_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b4_arcpy_pro.py",
   "baris_kode": 36,
   "sha256": "000a0d486b6d79f90027d95ba9af6b4c3f370f6840ded9ac39d21af6e1208854",
   "kode_sha256": "d39daa8d1a3b0ba613d7264f4fceecc2378e408a8ac9803f530484c31e23ff3c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/b4_arcpy_arcmap.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_arcmap/b4_arcpy_arcmap.py",
   "baris_kode": 37,
   "sha256": "7ca1dd33d405b439f5c1684e1d3bc193d5d4506864de521be2178e9f7f1348c6",
   "kode_sha256": "9e80e13220330ecf78f6b0bc9bc6195ff0a6d94bce518bc132330d3297206ead",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcGIS Pro (Python 3)",
   "berkas": "bab31/b7_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b7_arcpy_pro.py",
   "baris_kode": 44,
   "sha256": "198199c7f3c1df11ff7ae22f2b2e09cbdac437a4b59f41288f27e8b9dcca9c24",
   "kode_sha256": "ea32cdc0dd692b0fb328aaf074bce473fc7dbb6c478f593bce5db660c4de2e1c",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "skrip",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/b7_arcpy_arcmap.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_arcmap/b7_arcpy_arcmap.py",
   "baris_kode": 45,
   "sha256": "059ecbb18d9982d8c42d18ffe2b5a9d349c3f0eb824c555d116cc7088ed36a29",
   "kode_sha256": "232a372bb847151b979a28491db10824724d6be0f2d4f3afdcd731dbdcd05b32",
   "sintaks_python3_ok": true
  },
  {
   "bab": 31,
   "bab_judul": "Dua Gaya, Satu Pekerjaan: ArcPy di ArcGIS Pro dan ArcMap",
   "bagian": "C",
   "jenis": "fragmen",
   "konteks": "Versi ArcMap 10.8 (Python 2.7)",
   "berkas": "bab31/bab31_fragmen_02.py",
   "bahasa": "python",
   "seri_asal": null,
   "sumber": null,
   "baris_kode": 6,
   "sha256": "7669fef0bb44f670d6850ae8c150071eb0a656c987139e3bfae39432500cb087",
   "kode_sha256": "842a30d92b285ccbac8ad2bde1f6a0c44c216a73d67c1f85fbb5a95fcfd04474",
   "sintaks_python3_ok": false
  },
  {
   "bab": 32,
   "bab_judul": "Dari QGIS ke ArcPy dan Kembali: Pola, Padanan, dan Cara Menerjemahkan",
   "bagian": "C",
   "jenis": "potongan",
   "konteks": "Contoh terjemahan 1: membaca luas tiap KPH",
   "berkas": "bab32/bab32_potongan_01_b1_02_baca_atribut.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b1_02_baca_atribut.py",
   "baris_kode": 5,
   "sha256": "50d82c4c7c2350e9437c5603518fcb470d8e4fa9eaebbb7c3ebe08d9f23aa1ab",
   "kode_sha256": "73a2678304603368d72c52e3aa8c66734f273aacac95a7aa46428ef811e4f779",
   "sintaks_python3_ok": true
  },
  {
   "bab": 32,
   "bab_judul": "Dari QGIS ke ArcPy dan Kembali: Pola, Padanan, dan Cara Menerjemahkan",
   "bagian": "C",
   "jenis": "potongan",
   "konteks": "Contoh terjemahan 1: membaca luas tiap KPH",
   "berkas": "bab32/bab32_potongan_02_b1_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b1_arcpy_pro.py",
   "baris_kode": 3,
   "sha256": "80c63a824e882512c48f304c48c67b8b3a4130dc1549206dcbc7a8bc9449638e",
   "kode_sha256": "8b006cc45e76bcdee00756eafd326d022ba010a5e3c737be232855cd1d74a11a",
   "sintaks_python3_ok": true
  },
  {
   "bab": 32,
   "bab_judul": "Dari QGIS ke ArcPy dan Kembali: Pola, Padanan, dan Cara Menerjemahkan",
   "bagian": "C",
   "jenis": "potongan",
   "konteks": "Contoh terjemahan 2: penyangga sungai",
   "berkas": "bab32/bab32_potongan_03_b2_02_rantai_vektor.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b2_02_rantai_vektor.py",
   "baris_kode": 3,
   "sha256": "9879b78ac1d6da2a956a759351bdfeb93a1028a73aa2d70dcb4853a93bded208",
   "kode_sha256": "3d5854177c9da9b6763065756c8d14d09a91936b1043445cca06f5b20ba188fd",
   "sintaks_python3_ok": true
  },
  {
   "bab": 32,
   "bab_judul": "Dari QGIS ke ArcPy dan Kembali: Pola, Padanan, dan Cara Menerjemahkan",
   "bagian": "C",
   "jenis": "potongan",
   "konteks": "Latihan menerjemahkan",
   "berkas": "bab32/bab32_potongan_04_b1_arcpy_pro.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/arcpy_pro/b1_arcpy_pro.py",
   "baris_kode": 2,
   "sha256": "8316a506f1f6b1406a542ecc29165fede3df61331fcb8efc4e4a28be0242af50",
   "kode_sha256": "c0bb94f78fc613f9b3a07518edbe23b659e0695e6e66942d63893ab743b6bfc0",
   "sintaks_python3_ok": true
  },
  {
   "bab": 32,
   "bab_judul": "Dari QGIS ke ArcPy dan Kembali: Pola, Padanan, dan Cara Menerjemahkan",
   "bagian": "C",
   "jenis": "potongan",
   "konteks": "Latihan menerjemahkan",
   "berkas": "bab32/bab32_potongan_05_b3_02_batch_per_kph.py",
   "bahasa": "python",
   "seri_asal": "I4",
   "sumber": "seri/I4/skrip/b3_02_batch_per_kph.py",
   "baris_kode": 3,
   "sha256": "11423a42a22cdd722a681754303a12968e54f5b23738272fc9c7cab67181c41a",
   "kode_sha256": "94651d84e2768c23bfb371828947f13379a155e787d0eb982cfe916c3fa837ae",
   "sintaks_python3_ok": false
  }
 ]
}