2 poin oleh GN⁺ 2023-09-09 | 1 komentar | Bagikan ke WhatsApp
  • Dari cakupan catatan yang diberikan saja, tidak dapat dipastikan apa program Erlang pada judul itu atau mengapa itu penting
  • Teks yang bisa diverifikasi terutama hanya berupa potongan skrip Shell dan kalimat koreksi singkat
  • Skrip tersebut melakukan iterasi atas file *.png.png.meta di direktori saat ini, lalu mengekstrak bagian sebelum titik pertama dari nama file
  • Perintah yang benar-benar dijalankan adalah git mv $i $j.png.meta, dan perintah untuk mengubah $j.png.png menjadi $j.png hanya ditampilkan sebagai output
  • Karena chunk asli 5-104 dihilangkan, klaim inti yang terkait dengan judul atau penjelasan kode Erlang tidak dapat dipastikan

Isi yang dapat diverifikasi

  • Hanya dari cakupan yang diberikan, sulit menilai apa sebenarnya “program Erlang favorit” itu, alasan menyukainya, atau struktur kodenya
  • Potongan kode yang bisa diverifikasi adalah skrip Shell untuk mengganti nama file yang dimulai dengan #!/bin/sh
    • Mengulangi file *.png.png.meta
    • Dengan j="${i%%.*}", mengekstrak bagian sebelum titik pertama dari nama file
    • git mv $i $j.png.meta benar-benar dijalankan
    • git mv $j.png.png $j.png hanya ditampilkan melalui echo
  • Ada kalimat “Actually you don't need the really do this. It should have been water the plants.”, yang dapat dibaca sebagai koreksi bahwa instruksi atau contoh sebelumnya sebenarnya tidak perlu, dan seharusnya adalah “water the plants”
  • Di bagian akhir, Joe Armstrong dan Jeremy Ruston disebut bersama

Konteks yang membatasi penilaian

  • Beberapa chunk terdiri dari metadata status/sidebar TiddlyWiki, data Base64 yang tampak seperti JPEG/PNG, atau konten kosong, sehingga sulit mengekstrak fakta isi utama
  • Catatan yang diberikan tidak memuat informasi inti seperti cara kerja program Erlang, kode, alasan desain, contoh, angka, alur kerja, atau klaim
  • Potongan skrip Shell juga hanya diberikan sebagian tanpa penjelasan sekitar, sehingga tidak dapat dipastikan ini bagian dari tugas apa

Rentang yang dihilangkan

  • Input secara eksplisit menyatakan bahwa chunk asli 5-104 dihilangkan karena batas panjang/biaya
  • Ringkasan ini hanya mencerminkan cakupan catatan yang diberikan, dan tidak mencakup detail atau kesimpulan dari keseluruhan teks asli

1 komentar

 
GN⁺ 2023-09-09
Opini Hacker News
  • Jika closure server F bisa menerima pesan {become, F} selain pesannya sendiri, server bisa terus diubah menjadi perilaku baru
    Ini agak melenceng, tapi saya masih ingat pernah berbicara dengan Joe di konferensi Erlang. Ia selalu antusias soal teknologi dan dengan senang hati berbicara dengan siapa pun. Ia prihatin melihat Windows makin buruk dan makin kurang layak dipakai dari tahun ke tahun, dan pernah berkata bahwa suatu hari nanti, untuk melihat file, kita harus menonton iklan beberapa saat dulu agar kuncinya terbuka—dan itu hampir menjadi kenyataan. Windows 11 sudah punya iklan, dan untuk menghapusnya kita harus sengaja mencari pengaturannya, jadi rasanya sekitar Windows 13 hal itu benar-benar akan terjadi

    • Di rumah saya memakai Linux dan di kantor memakai Windows, dan yang lebih mengejutkan daripada iklan adalah masalah-masalah aneh yang dulu hanya saya lihat di Linux lama kini jauh lebih sering muncul di Windows
      Misalnya suara salah satu earphone jauh lebih keras, aplikasi Microsoft mati secara aneh, halaman dokumentasi Windows tidak bisa dibuka di browser apa pun sehingga harus memakai situs arsip, monitor eksternal yang sebelumnya terdeteksi baik tiba-tiba tidak terdeteksi atau layarnya berkedip. Office pada dasarnya mendorong penyimpanan ke cloud, bukan lokal, tetapi saya lebih suka file lokal dulu, sementara cloud menjadi cadangan. WSL cukup berantakan, tetapi setidaknya hampir menjadi satu-satunya alasan Windows masih bisa dipakai
      Saya selalu mendengar Joe adalah orang yang hebat, dan saya bisa memahaminya. Saat pertama kali belajar coding sendiri, saya membaca buku Erlang-nya, dan sifatnya yang jenaka, rendah hati, serta imajinatif sangat memengaruhi saya. Saya hampir tidak pernah benar-benar memakai Erlang, tetapi tulisannya mengubah cara saya berpikir tentang kode, dan saya berharap budaya matematika, rekayasa perangkat lunak, dan ilmu komputer lebih menerima sifat jenaka dan kerendahan hati
    • Isi paragraf pertama sebenarnya adalah fitur model aktor. Saya sebelumnya tidak tahu bahwa itu juga bisa dilakukan di BEAM
    • Iklan invasif di Windows 11 bukan hal baru. Itu sudah ada di Windows 10
  • Video ringkasan singkat 35 menit yang menjelaskan mengapa BEAM berbeda dari mesin virtual lain seperti JVM atau Node: https://www.youtube.com/watch?v=pO4_Wlq8JeI

    • Saya menonton presentasi serupa, The Soul of Erlang and Elixir, dan itu sangat bagus; setiap kali menontonnya saya kembali bersemangat
  • Saya merindukan Joe. Semangat menularnya untuk membuat komputasi menjadi lebih baik sangat membekas pada diri saya saat masih muda dan pada cara saya mendekati teknologi sekarang

  • universal_server() -> receive {become, F} -> F() end.
    Sejujurnya saya belum sepenuhnya memahami kekuatan universal_server ini. Akan bagus jika ada yang bisa menjelaskannya

    • Jika Anda terbiasa dengan Go, ini mirip goroutine yang menunggu seseorang mengirim fungsi anonim untuk dijalankan
      Di Erlang, Anda memecahkan masalah dengan menjalankan banyak proses, dan sebagian besar proses menunggu pesan. Perbedaan pentingnya adalah proses Erlang bisa berjalan mulus juga di mesin jarak jauh. Proses ini menerima pesan tuple yang berisi atom bernama become dan sebuah fungsi; kapan pun proses lain mengirim pesan itu, ia “berubah” menjadi fungsi tersebut
      Dengan kata lain, logika loop tunggunya bisa diganti dengan logika protokol yang diinginkan. Dalam contohnya, loop ini dijalankan di beberapa mesin lalu dikirimi fungsi yang mengimplementasikan protokol gossip, tetapi Anda juga bisa mengirim pesan yang membuatnya menjadi klien BitTorrent. Joe adalah seorang jenius sekaligus orang yang sangat ramah, dan Erlang adalah salah satu kreasi teknis terindah yang pernah saya lihat. Ia membuat saya melihat konkurensi dengan cara yang benar-benar baru
    • Jika dijabarkan sedikit lagi, kata kunci receive seperti pernyataan switch untuk pesan masuk, tetapi sebenarnya itu adalah pattern matching
      Misalnya, Anda bisa membuat server faktorial yang menerima {From, N} dan mengembalikan hasilnya dengan From ! factorial(N). ! adalah operator untuk mengirim hasil ke proses pengembali
      Kode pengujiannya menjalankan universal_server, membuatnya menjadi server faktorial dengan Pid ! {become, fun factorial_server/0}, lalu mengirim {self(), 50} untuk menerima faktorial dari 50. Keunggulan besar Erlang adalah paralelisme terdistribusi dan hot code update, dan di sini itu terlihat sebagai bentuk menimpa loop penerimaan universal_server dengan loop penerimaan factorial_server. Namun saya kira hot code update yang sebenarnya tidak bekerja persis seperti ini
    • Biasanya Anda harus tahu lebih dulu server akan dipakai untuk apa saat menulis kodenya
      Namun di Erlang, Anda bisa membuat jaringan server Erlang terdistribusi dan menjadikan server sebagai sumber daya komputasi serbaguna yang dapat melakukan pekerjaan yang diinginkan klien. Kode datang dari klien; tanpa perlu meminta administrator sistem memasang binary di semua mesin, Anda cukup mengirim fungsi dan mesin jarak jauh akan memanggilnya
    • Intinya adalah server bisa berubah menjadi jenis server apa pun yang diinginkan
      Fungsi aktual yang akan menjalankan server dikirim oleh klien, dan proses Erlang menjadi server tersebut berdasarkan fungsi itu. Jika mempertimbangkan kemampuan hot reloading Erlang, struktur sederhana ini menjadi lebih kuat. Proses Erlang adalah sumber daya komputasi yang menunggu pekerjaan, dan jika pekerjaan itu adalah menjalankan server lengkap, itu cukup keren
    • Struktur Erlang unik; baik mesin virtual maupun bahasanya dibangun di atas gagasan bahwa proses-proses kecil berjalan serentak dan masing-masing proses menunggu dalam loop tak berhingga untuk menafsirkan pesan masuk
      Karena itu, proses bisa menjadi apa saja tergantung kode yang Anda kirim. Jika ia harus mengendalikan microwave, lalu melakukan komputasi kuantum, dan keesokan harinya memprediksi pemenang pertandingan sepak bola, cukup kirim kode yang diperlukan untuk tiap tugas dan ia akan menjalankannya
  • Saya menghabiskan banyak waktu menjelaskan mengapa BEAM istimewa, dan mengapa konkurensi di Erlang/Elixir berbeda dari konkurensi di Go atau Java
    Mulai sekarang sepertinya cukup menautkan program Erlang favorit Joe dan thread HN ini

  • Tulisan blog ini juga dibahas dalam presentasi terbaru yang bagus: https://youtu.be/pQ0CvjAJXz4

    • Presentasi ini membahas dan menjelaskan dengan sangat baik setiap tahap arsitektur sistem Erlang terdistribusi dengan ketersediaan tinggi dan toleransi kegagalan
    • Saya penasaran apakah itu sistem yang merepresentasikan setiap pasien sebagai satu proses Erlang
  • Saya hanya punya pemahaman tingkat tinggi tentang Erlang sebagai bahasa dan belum pernah benar-benar memprogram dengannya, jadi saya penasaran mengapa kode ini diperlukan
    universal_server() -> receive {become, F} -> F() end.
    Rasanya bukankah cukup menjalankan F() langsung di mesin jarak jauh? Karena kode F harus sudah ada di mesin virtual jarak jauh, contoh ini mungkin berarti kode F diserialisasi lalu dikirim. Kalau ini menangani boilerplate umum, saya bisa memahami kegunaannya, tetapi saat ini terlihat seperti menunggu pesan become F lalu menjalankan F()

    • Kode ini keren, tetapi mungkin bukan gaya yang sangat idiomatis atau cara yang sering terlihat dalam kode produksi sungguhan. Meski begitu, Joe memang suka mengeksplorasi dan bereksperimen
      Di sini F adalah closure, jadi ia bisa mencakup bukan hanya kode, tetapi juga variabel yang ditangkap dan lingkungan saat ia dibuat. Saat F() dipanggil, kode itu dijalankan dan dapat mengakses lingkungan sekitarnya pada saat F dibuat
      Di Erlang, closure bisa dikirim melintasi jaringan ke node Erlang lain. Namun, kode modul yang dirujuk oleh closure harus ada di semua node. Dalam kode produksi, kemungkinan besar seperti yang Anda katakan, modul F akan dipanggil langsung dan argumennya diteruskan secara eksplisit; ini lebih dekat ke demonstrasi keren yang menunjukkan kemungkinannya
    • Berkat desain fungsional Erlang, F() bisa menjadi konteks tingkat atas yang sama baiknya dengan konteks sebelumnya, dan itu keren
      Permintaan yang sudah ada bisa diproses secara alami dengan logika lama, sementara permintaan baru dimulai dengan logika baru, dan pada akhirnya logika lama bisa di-garbage collect
    • Memang benar kode F harus sudah ada di mesin virtual jarak jauh, tetapi kode juga bisa dikirim ke mesin virtual jarak jauh
      Misalnya di Elixir, Anda bisa mendapatkan nama modul dan biner bytecode BEAM dengan Code.compile_string. Bytecode itu bisa dikirim ke mesin virtual lain, dimuat ke mesin virtual jarak jauh dengan :rpc.call('node@remote_host', :code, :load_binary, [the_module_name, "filename_doesnt_really_matter", binary_code]), lalu dijalankan dengan spawn('node@remote_host', my_module, my_function, [args])
    • Program yang dikutip memang dimaksudkan untuk berjalan di mesin jarak jauh, dan mesin jarak jauh melakukan deserialisasi program baru yang harus dijalankan
      Di sini F adalah variabel yang merepresentasikan program baru yang diserialisasi dan dikirim sebagai pesan antarproses, dan dalam kasus ini juga dikirim melalui jaringan
  • Ada juga kuliah tempat Joe menjelaskan cara menulis server dasar dengan Erlang: https://gioorgi.com/2015/erlang-lesson1/
    Saya menyalinnya sendiri dan menambahkan sedikit penjelasan; itu menunjukkan kekuatan bahasa asinkron seperti Erlang/Elixir dibanding bahasa lain. Sayangnya, sekarang tidak banyak digunakan

  • Belakangan saya sedang tertarik pada Julia, dan tampaknya ia cukup banyak meminjam ide Erlang dalam model terdistribusinya
    Server spontan semacam ini, yang bekerja seperti sulap di banyak node, juga bisa direproduksi dengan cukup mudah di Julia. Saya tidak yakin, tetapi rasanya mustahil modul Distributed Julia tidak terinspirasi sedikit pun oleh Erlang
    Saya sangat menyukai Erlang dan berharap ada lebih banyak kesempatan untuk menggunakannya, tetapi menyenangkan juga melihat konsep-konsepnya meresap ke platform lain

    • Sepertinya komunitas Julia akan berada di pihak yang sama saat meyakinkan orang tentang pelajaran seperti let it crash yang berasal dari filosofi pelaporan kesalahan Erlang