- Butuh sekitar 3 tahun untuk membongkar dan mendaur ulang Lenovo ThinkPad 11e Chromebook bekas sekolah yang sedianya akan dibuang, lalu membuat video wall dengan 10 layar
- Alih-alih memakai display controller terpisah, mainboard laptop yang ada menjalankan masing-masing layar, dan sistem sinkronisasi berbasis web membagi satu video menjadi 10 potongan untuk diputar
c-syncberbasissocket.iomengalami masalah performa lambat, perbedaan waktu loading, latensi, dan masalah jam sistem, tetapi berhasil mewujudkan pemutaran yang nyaris sinkron dengan memperlambat loop mengikuti klien paling lambat- Enterprise enrollment ChromeOS, pembatasan Developer Mode, dan masalah daya saat baterai dilepas diakali dengan coreboot, tool MrChromebox, USB instalasi otomatis Debian, serta kontrol kipas
ectool - Meski sudut pandang panel TN, perbedaan warna, dan sinkronisasi yang belum sempurna masih tersisa, ini menjadi contoh mengubah limbah elektronik menjadi instalasi yang benar-benar berfungsi lewat kolaborasi dan desain iteratif
Video wall yang berawal dari Chromebook yang akan dibuang
- Proyek ini dimulai ketika sekolah hendak membuang Chromebook lama, lalu muncul pertanyaan apa yang bisa dibuat dengan memanfaatkannya
- Perangkat yang digunakan adalah Lenovo ThinkPad 11e, laptop untuk distribusi sekolah yang sudah tidak lagi menerima pembaruan software Google
- Sebagian besar bahkan kesulitan memuat halaman web, dan karena masih terikat Enterprise Enrolment lama, perangkat sulit digunakan tanpa akun Google sekolah
- Tujuannya adalah membuat video wall yang bekerja dengan menata beberapa layar seolah-olah menjadi satu display besar
Cara menjalankan layar dan eksperimen sinkronisasi
- Awalnya dipertimbangkan pendekatan melepas panel display laptop saja lalu menjalankan 10 layar sekaligus dari satu komputer kuat
- Karena beban waktu dan biayanya besar, sementara layar sudah terpasang pada laptop yang masih berfungsi, pendekatannya diubah menjadi menjalankan tiap layar dengan mainboard laptop masing-masing
- Eksperimen juga dilakukan dengan streaming VLC untuk mengirim video ke beberapa perangkat dalam jaringan yang sama, tetapi tidak sesuai dengan kebutuhan video wall
- Sistem itu tidak dirancang agar video tersinkronisasi sempurna
- Bukan menampilkan video yang sama berulang-ulang di 10 layar, melainkan harus membagi satu video panjang menjadi 10 potongan dan menampilkan input berbeda di tiap layar
Menyetel timing pemutaran dengan c-sync
- Dibuat sistem server/klien ExpressJS
c-syncyang menggunakan halaman web dansocket.iountuk menyelaraskan pemutaran video antar-klien - Struktur dasarnya adalah server mengirim event
play, lalu elemen<video>pada tiap klien mulai memutar - Dalam pengujian di komputer desktop, sinkronisasinya tampak cukup baik, tetapi pada Chromebook sebenarnya performa yang kurang membuatnya tidak bisa stabil
- Perbedaan waktu loading
- Latensi jaringan
- Perbedaan jam sistem
- Pendekatan final diubah sehingga tiap klien memancarkan event
startketika mencapai akhir video- Komputer paling lambat membuat komputer yang lebih cepat menunggu, sehingga ada waktu untuk loading video
- Tiap layar bisa menerima 10 event
start, sehingga titik loop bisa sedikit bergeser - Jika beberapa frame pertama video sama, pengguna sulit menyadari perbedaannya
- Pemutaran terjadwal berbasis timestamp tampak memungkinkan, tetapi Chromebook ini tidak mampu menyelaraskan waktu satu sama lain secara stabil pada tingkat milidetik, sehingga cara itu tidak bekerja
Pekerjaan firmware untuk keluar dari ChromeOS
- Dalam satu atau dua bulan, proyek sudah sampai pada tahap membuka halaman web secara manual untuk menampilkan video sinkron layar penuh
- Agar bisa dipakai sebagai instalasi nyata, perangkat harus otomatis boot saat diberi daya dan membuka halaman klien
c-sync - ChromeOS bawaan boot ke layar login Google yang terkunci pada domain sekolah, dan ketika baterai dilepas perangkat tidak otomatis menyala meski daya disambungkan
- ChromeOS Firmware Recovery Script dari MrChromebox digunakan untuk menangani mainboard GLIMMER
- Masuk ke Recovery Mode
- Mengaktifkan Developer Mode
- Menjalankan skrip dari ChromeOS Shell
- Sebagian Chromebook menolak masuk Developer Mode karena Enterprise Enrolment, dan bahkan perangkat yang berhasil dipasangi Linux pun setelah beberapa waktu berhenti memutar video atau seluruh sistem terkunci
- Solusinya adalah melepas sekrup Write Protection dari tiap mainboard laptop dan menimpa seluruh firmware bawaan dengan
coreboot- Proses ini tampaknya juga melewati batasan enrollment
- Karena harus diulang pada lebih dari 20 komputer, prosesnya lambat dan merepotkan
- Setelah itu,
Wake on ACbekerja sebagai fitur firmware, dan pemutaran video juga tidak rusak secara acak
Membuat kiosk Linux yang boot otomatis
- Awalnya digunakan skrip startup yang membuka Chromium dan menirukan input tombol untuk masuk ke mode layar penuh
FullPageOSpernah digunakan pada proyek sebelumnya, tetapi tidak berjalan di hardware x86- Porteus Kiosk bekerja dengan baik karena merupakan distro Linux minimal yang menjalankan Chromium layar penuh dan bisa mengatur flag untuk mengizinkan pemutaran video tanpa interaksi pengguna
- Namun, Porteus Kiosk memiliki hambatan untuk operasi instalasi nyata
- Splash screen yang menampilkan logo Porteus setiap kali boot tidak bisa diubah
- Setelah instalasi, operasi jarak jauh seperti mengubah URL halaman tidak bisa dilakukan, sehingga bisa menjadi masalah setelah perangkat dipasang di dinding
- Untuk membuat konfigurasi yang mendekati distro sendiri, dicoba pendekatan menjalankan Chromium dalam kiosk mode secara otomatis pada sistem minimal tanpa desktop environment
- NixOS gagal dipasang karena ruang penyimpanan Chromebook yang kecil
- Kemudian dibuat skrip provisioning berbasis Debian minimal install
- Membuat
KIOSK_ID - Mengatur hostname menjadi
csync-client-$KIOSK_ID - Menghubungkan ke WiFi sekolah
- Membuat pengguna dan permission
- Menjalankan Chromium dalam kiosk mode layar penuh secara otomatis dengan
openbox
- Membuat
- Karena instalasi Debian manual merepotkan, digunakan FAI - Fully Automatic Installation dan FAI.me
- Pada akhirnya dibuat satu USB yang, saat dicolokkan ke Chromebook yang sudah memakai
coreboot, melakukan provisioning otomatis sebagai klienc-sync - Pada
c-syncjuga ditambahkan controller untuk mengelola klien yang terhubung dan menetapkan video ke tiap klien - Setelah stress test selama 3 hari menunjukkan pemutaran tetap mulus, proyek lanjut ke tahap pemasangan di dinding
Pemasangan, daya, dan penanganan panas
- Hardware pemasangan dirancang oleh Aksel Salmi, menggunakan struktur yang memungkinkan mainboard dan display digantung di dinding
- Catu daya dikonfigurasi dengan menyambung kabel agar setiap adaptor dapat memberi daya ke dua komputer
- Setelah instalasi, masalah terbesar adalah panas, dan setelah proses penghapusan firmware kipas laptop tidak berputar
- ChromeOS Embedded Controller bisa diakses dengan
ectool, sehingga kecepatan kipas dapat diatur manual - Dokumentasi online terbatas, dan ada kebingungan karena
ectooldaricorebootberbeda dengan versi Google, tetapi binary yang didapat melalui Wayback Machine berfungsi normal untuk mengatur kecepatan kipas - Melalui pengujian, ditemukan nilai kecepatan kipas yang menyeimbangkan kebisingan dan suhu
Membuat video untuk 10 layar
- Resolusi tiap display adalah 1366×768, sehingga video untuk seluruh 10 layar menjadi 13660×768
- Tidak banyak software yang mampu mengedit video selebar ini, dan pada praktiknya hanya Final Cut Pro dan Blender yang bisa digunakan
- Setelah merender video selebar penuh,
ffmpegdigunakan untuk memotongnya menjadi 10 segmen dan menetapkannya ke masing-masing layar - Skrip pemisahan membuat segmen yang sesuai dengan posisi tiap layar dalam bentuk
crop=1366:768:x_offset:0
Hasil akhir dan batasan yang tersisa
- Video wall yang selesai memiliki urutan boot, proses yang tampak seperti kalibrasi mandiri, pemutaran video sinkron, enclosure, dan routing kabel
- Hasilnya tidak sempurna
- Sudut pandang panel TN kurang baik
- Warna berbeda di tiap layar
- Sinkronisasi tidak sempurna
- Untuk tiap keputusan, mungkin ada alternatif yang lebih baik
- Meski begitu, proyek ini berhasil mengubah limbah elektronik menjadi instalasi yang menarik, sekaligus menjadi hasil akhir yang menunjukkan desain iteratif dan kolaborasi tim
1 komentar
Opini Hacker News
Selamat karena telah menyelesaikan proyek yang menarik. Saya banyak mengerjakan sinkronisasi media di berbagai perangkat, jadi selalu menyenangkan melihat solusi apa yang dibuat orang
Cara standar industri untuk membuat video wall tersinkron seperti ini adalah memakai pemutar media BrightSign, tetapi untuk sekitar 20 display, biaya membeli player dan layarnya saja bisa dengan mudah naik hingga puluhan ribu dolar. Hebat sekali karena bisa membuatnya berjalan dengan perangkat daur ulang
Kalau tertarik mengerjakan codebase terkait sinkronisasi media, silakan hubungi saya. Kami cukup sering merekrut developer kontrak freelance
Saya selalu penasaran berapa porsi biaya untuk hardware dan software masing-masing, dan sepertinya digital signage profesional memang dirancang dengan mempertimbangkan hal-hal seperti reliabilitas dan umur pakai
Saya bekerja di Google saat Chromebook diluncurkan, dan ketika mereka mengumpulkan ide dekorasi untuk lobi, saya mengusulkan sesuatu yang mirip, tetapi ditolak. Mungkin karena saya meminta 40–64 perangkat
Namun saya rasa saya tidak akan mencoba menyinkronkan video; sebagai gantinya saya akan membuat animasi berbasis waktu dan menyelaraskan jam lewat jaringan
Contohnya bisa dilihat di sini: https://www.youtube.com/watch?v=64TcBiqmVko
Itu adalah 8 perangkat yang menjalankan Chrome, dan yang disinkronkan hanya pengaturan serta waktu. Perangkatnya juga tidak harus berbentuk grid, dan inspirasinya dari akuarium virtual di Boston Science Museum
Isinya: “Sayangnya, Chromebook ini tidak bisa menjaga waktu satu sama lain secara andal pada tingkat milidetik, jadi pendekatan ini tidak berhasil bagi kami”
Seperti yang disebutkan, dibutuhkan sinkronisasi jam yang baik, dan terutama jika ada audio, selisih 20–30 ms pun sangat terlihat sehingga tidak mudah. Meski begitu, dengan NTP/PTP hasilnya bisa cukup jauh
Keren. Saya pernah membuat yang mirip dengan tablet 4x4, menghubungkan semua 16 unit ke ADB dan satu host, lalu bisa mengotomatiskan sebagian besarnya
Setelah itu saya membuat 16 layar virtual dan 16 klien VNC di sway, lalu menguji dengan streaming semuanya lewat Wi-Fi; Wi-Fi-nya bekerja terlalu baik, jadi saya tidak mencari solusi yang lebih efisien
Selama periode itu PC saya punya 19 display, 17 di antaranya VNC, dan pemandangannya luar biasa. Bisa menjalankan hal yang sama di semuanya, atau memakai masing-masing untuk tujuan berbeda seperti musik, htop, kalender, jam, sesi ssh
Namun mengurus hardware-nya cukup merepotkan. Sebagian mengalami throttling, sebagian punya masalah koneksi, dan beberapa baterai tidak bisa mempertahankan pengisian daya
Dulu ada sesuatu yang mirip bernama Junkyard Jumbotron. Itu memungkinkan berbagai display yang berbeda-beda dikumpulkan untuk menampilkan masing-masing bagian dari gambar yang lebih besar
https://github.com/mitmedialab/Junkyard-Jumbotron
Video: https://youtu.be/cAUtSVSTbzU?feature=shared
Cara mengirim foto untuk penyelarasan lewat email juga terlihat cukup menarik
Kalau hanya membaca sekilas dan belum membaca seluruh blognya, proyek ini dibuat oleh siswa SMA selama masa sekolah mereka. Itu membuatnya terlihat lebih mengesankan
Melihat bagian “Saya tidak sepenuhnya yakin mengapa ini bekerja begitu baik, tetapi secara tidak sengaja saya menemukan solusi yang konyol” dan “komputer paling lambat menahan komputer paling cepat”, ini bekerja dengan baik karena desain sistemnya dioptimalkan mengikuti bottleneck
Sebaiknya lihat Theory of Constraints
Saya pernah harus melakukan hal serupa dengan 5 TV layar sentuh besar yang disusun seperti meja. Setiap sisi harus menjadi aplikasi layar sentuh terpisah, semuanya memutar video latar yang tersinkron, sementara pengguna bisa berinteraksi dengan elemen yang mengalir dari satu ujung ke ujung lain, atau mengirim objek yang ditemukan ke pengguna di sisi meja yang berlawanan
Pada akhirnya, hampir satu-satunya perangkat dalam anggaran yang bisa menggerakkan semua layar sekaligus adalah Mac Pro berbentuk silinder, jadi kami memakainya, dan aplikasinya disinkronkan dengan Redis. Bagian itu saya yang menulis
Itu berjalan cukup baik, tetapi saya tidak sempat melihat produk akhirnya sebelum meninggalkan perusahaan. Awalnya kami ingin menyinkronkan komputer-komputer terpisah, tetapi tidak bisa membuatnya cukup stabil; setelah berjalan sebentar, sinkronisasi melenceng karena berbagai faktor dan aplikasi harus direstart secara berkala, dan itu tidak mungkin dilakukan
Sejak masa awal PC, hal yang selalu saya inginkan adalah kemampuan mengikat beberapa perangkat lewat jaringan agar bisa berbagi sumber daya dan bekerja lebih kolaboratif. Saya membayangkan semua komputer di kantor dimanfaatkan seperti superkomputer untuk memproses pekerjaan. Tentu itu masalah yang sangat sulit, dan aplikasi serta sistem operasi harus dirancang seperti itu, serta dibutuhkan algoritma baru. Apalagi kalau mengingat bahkan memanfaatkan multiprosesor dengan benar dalam satu perangkat di board yang sama saja butuh waktu lama; tetapi proyek seperti seti@home atau folding@home sudah melakukan hal semacam itu sampai batas tertentu, dan saya berharap suatu hari komputer itu sendiri mendukungnya
Dari bagian “Saya mulai membuat ‘distro saya sendiri’ yang bisa dipasang di laptop. Sistemnya harus dimulai dengan konfigurasi minimal, dan memiliki skrip elegan yang otomatis menjalankan instance Chromium dalam mode kiosk tanpa desktop environment. Awalnya saya mencoba NixOS, tetapi saya segera menyadari penyimpanan Chromebook ini terlalu kecil sehingga tidak mungkin, dan instalasinya juga selalu gagal. Akhirnya saya menyerah dan memulai dengan instalasi minimal Debian, tetapi saya sadar instalasi Debian membutuhkan terlalu banyak menekan tombol sehingga sangat membuang waktu, lalu saya menemukan ‘FAI - Fully Automatic Installation’ dan tool web FAI.me”, DietPi, OpenWrt, dan OpenBalena juga punya opsi instalasi otomatis untuk memilih paket tertentu dan memasangnya ke bare metal minimal
Saya juga penasaran apakah ada opsi non-desktop lain
Hal paling menarik adalah macetnya hilang setelah beralih ke coreboot. Saya penasaran apakah ada teori mengapa begitu
Mungkin terkait ACPI/DSDT, atau mungkin karena BIOS aslinya salah menginisialisasi controller hardware