<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ASTOMO PANCORO PUTRO</title>
    <description>The latest articles on DEV Community by ASTOMO PANCORO PUTRO (@hibiscusht).</description>
    <link>https://dev.to/hibiscusht</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3341208%2F16874eda-cdfa-4dc6-8e61-b1db0fd0196c.jpeg</url>
      <title>DEV Community: ASTOMO PANCORO PUTRO</title>
      <link>https://dev.to/hibiscusht</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hibiscusht"/>
    <language>en</language>
    <item>
      <title>ABCDE nya DevOps itu Begini...</title>
      <dc:creator>ASTOMO PANCORO PUTRO</dc:creator>
      <pubDate>Thu, 30 Apr 2026 02:28:24 +0000</pubDate>
      <link>https://dev.to/hibiscusht/abcde-nya-devops-itu-begini-51i5</link>
      <guid>https://dev.to/hibiscusht/abcde-nya-devops-itu-begini-51i5</guid>
      <description>&lt;p&gt;Dalam dunia pengembangan perangkat lunak, budaya DevOps semakin menjadi hal yang tak dapat dikesampingkan. Namun banyak organisasi yang hanya bermodalkan semangat mencoba menerapkan budaya DevOps sebab pengetahuannya minim dan justru fokus pada automation. Padahal, inti dari budaya DevOps itu hanyalah sederhana saja.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A: Agile - Lincah&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lincah itu dimaknai sebagai kemampuan organisasi untuk merespon perubahan dengan cepat. Namun bukan berarti perubahan business flow di luar kontrak yang disepakati. Lalu apa dong? Perubahan yang direspon dengan cepat adalah perubahan yang memiliki &lt;em&gt;business value&lt;/em&gt; tinggi bagi klien. Business value ini artinya, perubahan fitur tersebut bisa menggenjot revenue bagi klien. Di sini, lincah bermakna memberikan challenge kepada klien: mengutamakan fitur yang mendesak, penting, dan business value tinggi supaya timeline project tetap sesuai kontrak yang disepakati - dengan kata lain klien harus memprioritisasi ulang fitur yang sudah disepakati.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B: Blameless - Tidak mencari kesalahan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dalam organisasi, permasalahan teknis bisa timbul kapan saja. Dengan budaya DevOps masalah itu dihadapi bersama sebagai tim, bukan menunjuk siapa yang salah. Seringkali dalam organisasi masih tertinggal budaya feodal masalah senioritas. Bukan dalam hal pengalaman, namun masa kerja. "Gue lebih lama di sini masa nurut-nurut aja sama orang baru". Sehingga ide-ide segar seringkali diabaikan. Padahal dalam ide tersebut ada paparan permasalahan yang bisa jadi kendala di kemudian hari. Dalam budaya feodal, tentu harus cari kambing hitam alih-alih melihat akar permasalahan (root cause analysis) dan memikirkan bersama solusinya. Dengan budaya DevOps, permasalahan dipandang sebagai tantangan bersama untuk dicarikan solusinya dan menjadi pembelajaran di masa yang akan datang.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C: Collaboration - Kerjasama&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kerjasama dalam budaya DevOps itu makna nya luas. Tidak sekedar mengerjakan suatu hal bersama-sama, namun juga lintas platform. Dalam satu project tidak mungkin satu orang dev mengerjakan semuanya sendirian, apalagi jika menghadapi suatu tool atau runtime yang tidak dia kuasai. Hal semacam ini bukan sesuatu yang memalukan. Dengan budaya DevOps, kerjasama dengan personal yang memiliki kecakapan dalam bidang lain justru wajib. Misalnya ada project web app berbasis Node.js, namun memerlukan suatu tool berbasis python atau golang. Meng-hire personal yang bisa mengerjakan tool tersebut lebih menguntungkan ketimbang mencoba sendiri oleh personal yang tidak punya skill di situ. Justru jika memaksa mencoba sendiri tanpa skill malah akan menghabiskan waktu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D: Decentralised - Berbagi&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Salah satu manfaat menerapkan budaya DevOps adalah memecah kebuntuan antara developer dan operation. Namun budaya DevOps juga menekankan pentingnya berbagi. Pekerjaan tidak harus dikerjakan sendiri, namun dipecah-pecah menjadi module yang bisa dikerjakan banyak orang. Kebutuhan teknologi (tech stack) juga wajib dibagikan informasi nya ke seluruh tim supaya ditemukan solusi final dan permanen. Seperti soal deployment apakah memakai containerisasi atau hanya transfer file lalu mensetup runtime di server sasaran. Kemudian perlu nya ada stage dan production server. Dan sebagainya. Semua hal tersebut perlu dipikirkan bersama antara developer dan operation. Tidak ada yang namanya terima jadi dalam budaya DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E: Empathy - Perduli&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Perduli bermakna menyediakan solusi untuk menghadapi kendala bersama. Perduli ini lebih kearah investasi ketimbang ide. Investasi bukan berarti harus menyediakan device gahar, namun menciptakan sistem dan kondisi yang bersifat inklusif. Misalnya, tidak mewajibkan tim untuk menggunakan laptop dengan spesifikasi atau OS tertentu (BYOD/Bring Your Own Device). Solusinya bisa dengan menyewa layangan hosting murah untuk membikin sistem self hosted yang terintegrasi untuk proses development, testing, dan deployment. Perduli dalam bentuk lain bisa juga dengan tidak menambah overtime dengan alasan extra effort karena habis cuti. Cuti (leave) adalah hak setiap personal tim. Pekerjaan yang dipending sementara seharusnya diprioritisasi ulang sehingga bagian yang belum dikerjakan adalah bagian yang tidak mengganggu keseluruhan business flow. Misalnya pekerjaan menambah layer 2FA pada login, jika ada permintaan verifikasi via email dan via whatsapp maka setelah salah satu dikerjakan maka metode verifikasi lain bisa dipending dan dikerjakan di hari-hari selanjutnya. Sebab multi metode untuk verifikasi itu bersifat redundant dan tidak mendesak jika salah satu saja sudah bisa digunakan. Namun tidak berarti redundancy ini diabaikan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kesimpulan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Budaya DevOps memecahkan kebuntuan antara development dan operation. Inti dari budaya DevOps adalah kerjasama dan perduli, sehingga setiap permasalah yang dihadapi dipandang sebagai tantangan bersama yang perlu dicarikan solusinya. Solusi dalam budaya DevOps selalu bersifat inklusif dan memberikan keuntungan bersama.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>culture</category>
      <category>softwaredevelopment</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Waktu nya Males Belajar Tech Stack (Baru)</title>
      <dc:creator>ASTOMO PANCORO PUTRO</dc:creator>
      <pubDate>Sat, 06 Sep 2025 08:34:42 +0000</pubDate>
      <link>https://dev.to/hibiscusht/waktu-nya-males-belajar-tech-stack-baru-3dg1</link>
      <guid>https://dev.to/hibiscusht/waktu-nya-males-belajar-tech-stack-baru-3dg1</guid>
      <description>&lt;p&gt;Perkembangan model pembuatan aplikasi semakin meriah akhir-akhir ini. Hanya dalam hitungan bulan, beragam tech stack baru bermunculan -- dengan akronim nya masing-masing. Tech stack menggabungkan berbagai lini dalam pembuatan aplikasi -- mulai dari bahasa pemrograman, sistem deployment, sampai manajemen data. Di tengah membanjirnya tech stack baru timbul skeptisme: perlukah para dev yang sudah berkecimpung di suatu tech stack untuk segera beradaptasi dengan tech stack baru? Benarkah alasan bahwa bertahan pada suatu tech stack akan tertinggal kemajuan? Baca sampai selesai beberapa fakta menarik berikut ini!&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun Fact #1: Client tidak perduli dengan tech stack yang digunakan pada aplikasi yang dibutuhkannya
&lt;/h2&gt;

&lt;p&gt;Fakta menarik ini cukup mencengangkan bukan? Pada dasarnya client mengabaikan detil teknis aplikasi yang dibutuhkannya. Mereka menurut saja, namun memiliki &lt;em&gt;emphasis&lt;/em&gt; (penekanan). Untuk client di bidang keuangan, emphasis pada keamanan dan kecepatan. Untuk client di bidang commerce, emphasis pada kemampuan handling request massal secara real time. Client bidang lain emphasis pada &lt;em&gt;total cost of ownership&lt;/em&gt; yang terjangkau. Sebuah quote menarik untuk disimak:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;there is no technology fits all client needs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tim development yang baik harus memerhatikan emphasis ini. Pemilihan tech stack tinggal menyesuaikan emphasis dan tentu saja ketersediaan budget. Jangan sampai terjadi over budget malah mendapatkan tech stack yang tidak memenuhi target emphasis. Atau sebaliknya, budget mepet dipaksa memakai tech stack terkini dengan fitur yang sebenarnya di luar emphasis client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun Fact #2: Jumlah penduduk bumi sekitar 8 milyar dan semua nya butuh makan
&lt;/h2&gt;

&lt;p&gt;Mungkin fakta menarik ini menimbulkan pertanyaan: "apakah saya harus ikut memikirkan kebutuhan makan semua penduduk bumi?". Dalam kaitan dengan perkembangan tech stack, jika kita perhatikan alasan terkuat seseorang berusaha menguasai segala macam tech stack adalah takut tidak kebagian job yang menggunakan tech stack yang belum dikuasainya. Pada dasarnya alasan ini bisa dibilang mengada-ada. Betul, ada sebagian software house yang menentukan tech stack terlalu dini, bahkan sebelum mengetahui real kebutuhan client dan merekrut dev baru. Namun hal tersebut tetap saja tidak dapat dijadikan landasan agar setiap dev mengantisipasi segala kemungkinan.&lt;/p&gt;

&lt;p&gt;Seandainya dalam kondisi tertentu tim dev terpaksa memakai lebih dari 1 macam tech stack, maka sikap bijaksana yang dapat diambil adalah dengan collab -- memecah project sesuai dengan tech stack yang dikuasai anggota tim dev. &lt;/p&gt;

&lt;p&gt;Dalam setiap keputusan tim dev selalu ada &lt;em&gt;trade off&lt;/em&gt; (harga):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;jika memaksa dev untuk bekerja dengan tech stack yang tidak dikuasai maka akan memperlambat proses development karena dev lebih banyak beradaptasi ketimbang mengembangkan fitur yang dibutuhkan client&lt;/li&gt;
&lt;li&gt;jika merekrut dev serba bisa maka akan menurunkan performa dev ybs sebab fokus nya bercabang cabang&lt;/li&gt;
&lt;li&gt;jika melakukan collab untuk menyesuaikan skill dev terhadap tech stack yang digunakan maka akan menambah biaya pembuatan aplikasi&lt;/li&gt;
&lt;li&gt;jika melibatkan AI maka selain ada penambahan biaya untuk sewa AI -- yang hanya berguna saat development -- maka timeline akan makin panjang khususnya untuk melakukan code check yang dihasilkan AI guna memastikan kesesuaian dengan fitur yang dibutuhkan client&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dari trade off tersebut, yang paling bijaksana dan realistis tetaplah melakukan collab. Tentu saja, poin terpenting dari collab adalah memberikan kesempatan bagi dev baru untuk meraih pendapatan yang diharapkan dapat membantu mengurangi pengangguran.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun Fact #3: Project yang dikerjakan oleh banyak dev cenderung lebih stabil
&lt;/h2&gt;

&lt;p&gt;Fakta menarik ini tak kalah mencengangkan bukan? Mungkin banyak yang merasa heran -- khusus nya para dev serba bisa dan single fighter -- kok bisa?&lt;/p&gt;

&lt;p&gt;Tentu saja! Sebab project yang dikerjakan oleh banyak dev itu memiliki bagian-bagian yang terpisah. Jika satu bagian mengalami crash, bagian lain tetap normal. Dengan begitu test juga bisa dilakukan bertahap, bagian per bagian. Tak hanya itu, deployment pun bisa dilakukan bertahap pula, bagian per bagian. Selain itu semakin banyak dev yang terlibat, semakin banyak pula kepala yang ikut memikirkan solusi atas permasalahan, bug fixing, serta patch. Dengan sendirinya, project tersebut semakin stabil per rilis. Quite simple!&lt;/p&gt;

&lt;p&gt;Berkaca dari project-project open source besar, terlihat bahwa project tersebut memiliki sekian ratus contributor yang bekerja di bagian yang berbeda-beda. Hal ini terlihat dari antrian pull request di repo project tsb. Dan hasilnya bisa kita lihat, project tersebut bisa rilis stable version secara rutin.&lt;/p&gt;

&lt;p&gt;Namun dibalik luar biasanya para contributor, ada skeptisme: apa yang terjadi jika ada dev yang tiba-tiba meninggalkan bagian nya yang belum selesai? bukankah akan menimbulkan banyak legacy code? Nah, di sini lah clean code mengambil peran. Project open source maupun open contribute wajib menerapkan clean code termasuk coding style standar. Hal ini akan memudahkan handover task antar dev tanpa perlu transfer of knowledge lagi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun Fact #4: Tech stack hopping bisa merugikan diri sendiri dan tim
&lt;/h2&gt;

&lt;p&gt;Inilah fakta menarik yang paling mencengangkan! &lt;em&gt;Tech stack hopping&lt;/em&gt; makna nya adalah berpindah-pindah tech stack sebelum benar-benar menguasainya. Alasannya sederhana saja: harus sesegera mungkin beradaptasi dengan tech stack baru supaya memiliki kesempatan untuk mendapat job.&lt;/p&gt;

&lt;p&gt;Jika kita melihat ke linkedin atau github, mungkin sering ada yang mengisikan informasi tech stack yang sudah dikuasai. Ada yang mengaku bisa lebih dari 3 bahasa pemrograman, ada yang mengaku bisa lebih dari 3 framework, ada yang mengaku bisa lebih dari 3 deployment system, dst. Namun ketika interview banyak yang failed sebab fitur-fitur dari tech stack yang disyaratkan dalam suatu project ternyata alpa dikuasai pelamar. Parahnya, ada tim rekrutmen yang tetap menerima pelamar meski minim penguasaan nya terhadap tech stack yang disyaratkan.&lt;/p&gt;

&lt;p&gt;Kenapa terjadi ada pelamar yang portfolio nya wow namun aslinya penguasaan nya minim? Ya itu tadi, tech stack hopping. Akibatnya mereka cenderung hanya melatih skillnya pada fitur-fitur standar. Katakan ada backend framework baru maka para tech stack hopper hanya melatih pada CRUD namun meninggalkan coding standard, fitur-fitur penting bahasa basis nya, middleware, dst. Dalih nya fitur tadi bisa dipelajari sambil jalan.&lt;/p&gt;

&lt;p&gt;Kerugian tim yang diisi tech stack hopper jelas: project berjalan tersendat-sendat sebab ada fitur-fitur dasar yang dibutuhkan namun tidak dikuasai secara mendalam oleh dev nya, misalnya integrasi oAuth dengan backend framework atau integrasi payment gateway dengan frontend framework. Sedangkan kerugian di sisi tech stack hopper, jam produktif nya tersita untuk mendalami tech stack yang digunakan. &lt;/p&gt;

&lt;p&gt;Atas dasar inilah penting bagi seorang dev untuk tidak buru-buru memelajari tech stack baru sebelum benar-benar menguasai tech stack lama. Meskipun ujung-ujung nya terlihat stuck pada 1 atau 2 tech stack namun dia bisa bekerja lebih optimal berkat penguasaan nya yang mendalam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Hal yang bisa kita tarik dari beberapa fun fact di atas ada pada quote yang bermakna tidak ada teknologi bisa memenuhi segala kebutuhan client. Suka tidak suka akan ada saat nya tim dev memakai lebih dari 1 macam teknologi. Dan mau tidak mau harus melakukan collab dengan banyak dev yang skill nya beragam. Dev yang baik bukan yang mengantisipasi perkembangan teknologi namun yang siap bekerjasama untuk membuat aplikasi yang bekerja sebagaimana seharusnya.&lt;/p&gt;

</description>
      <category>hopper</category>
      <category>tech</category>
    </item>
    <item>
      <title>Hilirisasi Fiber di PHP dapat Membuka 19 juta Lapangan Lambo</title>
      <dc:creator>ASTOMO PANCORO PUTRO</dc:creator>
      <pubDate>Thu, 14 Aug 2025 09:58:08 +0000</pubDate>
      <link>https://dev.to/hibiscusht/hilirisasi-fiber-di-php-dapat-membuka-19-juta-lapangan-lambo-44p7</link>
      <guid>https://dev.to/hibiscusht/hilirisasi-fiber-di-php-dapat-membuka-19-juta-lapangan-lambo-44p7</guid>
      <description>&lt;p&gt;Bahasa pemrograman PHP terkenal melakukan proses yang bersifat &lt;em&gt;blocking&lt;/em&gt;, yakni sumber daya tidak dapat dipakai untuk keperluan lain sampai proses selesai. Namun di versi 8.* ada peningkatan fitur yang memungkinkan developer untuk menghentikan proses dan menjalankannya kembali kapan saja.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengenal Fiber
&lt;/h2&gt;

&lt;p&gt;Fiber merupakan suatu class di PHP yang berguna untuk menjalankan proses yang dapat dihentikan (suspend) dan dijalankan kembali (resume) kapan saja sesuai kebutuhan. Konsep Fiber ini mirip dengan async di Javascript namun dengan perbedaan, proses di dalam Fiber secara default hanya bisa resume satu kali saja. Berikut ini cara mendefinisikan Fiber.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

$timer = new Fiber(function($argument){
    $value = Fiber::suspend("your message");
    echo $value;
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di dalam instance Fiber ada sebuah callback yang dapat menerima argumen. Di dalam callback, ada pemanggilan method static &lt;code&gt;suspend()&lt;/code&gt; yang akan langsung menghentikan proses dan mengembalikan pesan di argumen method ini.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengontrol Fiber
&lt;/h2&gt;

&lt;p&gt;Untuk memulai Fiber caranya sbb.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

$response = $timer-&amp;gt;start("message");
echo $response;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Method &lt;code&gt;start()&lt;/code&gt; akan memulai Fiber dalam kondisi berhenti (suspended), memasukkan nilai argumen nya sebagai argumen callback Fiber, dan menangkap nilai dari argumen method &lt;code&gt;suspend()&lt;/code&gt;. Untuk menjalankan kembali Fiber cara nya sbb.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

while(!$timer-&amp;gt;isTerminated()){
    $timer-&amp;gt;resume("message");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di sini digunakan infinity loop while yang akan berhenti saat kondisi Fiber mati (terminated) sambil memanggil method &lt;code&gt;resume()&lt;/code&gt;. Argumen method ini akan dikembalikan oleh method &lt;code&gt;suspend()&lt;/code&gt; dan bisa ditampilkan setiap iterasi selama Fiber belum mati. Secara umum proses Fiber dapat dilihat pada flow chart berikut.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln3o8f57osq83c4zqg3o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln3o8f57osq83c4zqg3o.jpg" alt="Diagram alir proses Fiber di PHP" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 1. Diagram alir proses Fiber di PHP&lt;/p&gt;

&lt;h2&gt;
  
  
  Contoh Koding Fiber dan Penjelasan nya
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3w5trnr5dz3qji4n1319.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3w5trnr5dz3qji4n1319.jpg" alt="Contoh koding Fiber" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 2. Contoh koding Fiber&lt;/p&gt;

&lt;p&gt;Pada gambar di atas bisa kita pecah menjadi 3 bagian. Bagian pertama ada definisi Fiber. Pada definisi ini terdapat sebuah loop for yang panjang nya dibatasi oleh argument callback. Di dalam loop for terdapat function &lt;code&gt;sleep()&lt;/code&gt; yang berguna untuk menunda eksekusi Fiber selama 30 detik. Selanjutnya perintah &lt;code&gt;Fiber::suspend()&lt;/code&gt; akan otomatis menghentikan Fiber saat dijalankan pertama kali. Secara default, method &lt;code&gt;suspend()&lt;/code&gt; ini akan menampilkan pesan dari argumen nya saat dijalankan pertama kali lalu akan terminate. Namun looping for bisa digunakan untuk menunda terminate selama belum mencapai akhir loop.&lt;/p&gt;

&lt;p&gt;Bagian kedua merupakan perintah untuk menjalankan Fiber pertama kali. Dalam hal ini digunakan method &lt;code&gt;start()&lt;/code&gt;. Argumen method ini akan diterima oleh callback, sementara method ini akan menerima pesan dari &lt;code&gt;Fiber::suspend()&lt;/code&gt;. Setelah pesan diterima, defaultnya Fiber akan terminate.&lt;/p&gt;

&lt;p&gt;Bagian ketiga merupakan suatu infinity loop while. Selama Fiber tidak mengirim sinyal terminate, maka status &lt;code&gt;Fiber::isTerminated&lt;/code&gt; akan false sehingga loop terus berjalan. Di dalam loop terdapat perintah &lt;code&gt;resume()&lt;/code&gt;. Argumen dari perintah ini akan diterima oleh Fiber setelah &lt;code&gt;suspend()&lt;/code&gt;. Karena itulah argumen &lt;code&gt;resume()&lt;/code&gt; hanya berisi current timestamp. Berikut ini adalah hasil akhir dari proses Fiber di PHP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fss9knwcof0jh84bk53jl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fss9knwcof0jh84bk53jl.jpg" alt="Hasil akhir proses Fiber di PHP yang dijalankan lewat terminal" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 3. Hasil akhir proses Fiber di PHP yang dijalankan lewat terminal&lt;/p&gt;

</description>
      <category>php</category>
      <category>fiber</category>
      <category>async</category>
    </item>
    <item>
      <title>Pakai Atribut di PHP Nggak Perlu Bayar Royalti</title>
      <dc:creator>ASTOMO PANCORO PUTRO</dc:creator>
      <pubDate>Tue, 12 Aug 2025 05:01:30 +0000</pubDate>
      <link>https://dev.to/hibiscusht/pakai-atribut-di-php-nggak-perlu-bayar-royalti-5gaf</link>
      <guid>https://dev.to/hibiscusht/pakai-atribut-di-php-nggak-perlu-bayar-royalti-5gaf</guid>
      <description>&lt;p&gt;Perkembangan bahasa pemrograman PHP sedemikian pesat nya. Di rilis terbaru nya versi 8.*, bahasa ini menawarkan syntax baru yang dapat digunakan untuk memproses class pada saat runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengenal Attribute
&lt;/h2&gt;

&lt;p&gt;Attribute adalah sebuah keterangan (annotation) yang dapat diproses oleh PHP dan dapat memengaruhi class dan komponennya. Untuk menuliskan attribute syntax nya sbb:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#[NamaAttribute]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Berikut ini beberapa contoh penempatan annotation pada suatu class&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

#[ClassAttribute]
class MyClass {

#[PropertyAttribute]
private $my_property;

#[MethodAttribute]
public function myMethod()
{ 
}

private function myJob(#[ParamAttribute] $request)
{
}

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penamaan pada attribute ini mengikuti aturan &lt;strong&gt;fully qualified name&lt;/strong&gt; di PHP, yakni memerlukan namespace. Dengan sendirinya wujud attribute adalah sebuah class.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mendeklarasikan Attribute
&lt;/h2&gt;

&lt;p&gt;Untuk mendeklarasikan attribute, sama saja seperti mendeklarasikan class di PHP. Namun perlu ditambahkan annotation &lt;code&gt;#[Attribute]&lt;/code&gt;. Berikut ini contoh nya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace MyAttributes;

use Attribute;

#[Attribute]
class MethodAttribute {
public function __construct($value)
{
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sedangkan untuk menambahkan attribute, maka annotation harus ditempatkan di bagian class yang sesuai.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

use MyAttributes\MethodAttribute;

class MyClass {
#[MethodAttribute("hello")]
public function myMethod(){
}
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Annotation bisa menerima argumen jika saat deklarasi ditambahkan konstruktor. Nantinya nilai dari argumen ini bisa dipanggil saat diproses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memproses Attribute
&lt;/h2&gt;

&lt;p&gt;PHP menyediakan built in interface bernama &lt;code&gt;Reflection&lt;/code&gt; yang bisa digunakan untuk menedeteksi annotation yang ditambahkan pada class tersebut. Interface ini terdiri dari beberapa class sesuai dengan bagian class yang hendak dimodifikasi. Class yang tersedia antara lain sbb.&lt;/p&gt;

&lt;p&gt;ReflectionClass -- untuk memproses class&lt;br&gt;
ReflectionProperty -- untuk memproses property&lt;br&gt;
ReflectionMethod -- untuk memproses method&lt;br&gt;
ReflectionParameter -- untuk memproses parameter&lt;/p&gt;

&lt;p&gt;Untuk mendeteksi annotation, tiap-tiap class tersebut memiliki method &lt;code&gt;getAttributes&lt;/code&gt; yang mengembalikan array dari semua annotation yang terdeteksi. Sebagai catatan, tiap komponen class bisa memiliki lebih dari satu annotation. Array ini terdiri atas class &lt;code&gt;ReflectionAttribute&lt;/code&gt;. Class ini juga memiliki method yang bisa digunakan untuk berinteraksi dengan annotation yang dipilih. Berikut ini contoh memproses annotation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
use MyAttribute\MethodAttribute;
use MyClass;

function processAttribute(){
  $method = new ReflectionMethod(MyClass::class,"myMethod");
  $attr = $method-&amp;gt;getAttributes(MethodAttribute::class);
  foreach($attr as $item){
    //panggil attribute yang terdeteksi di sini
    $attr_class = $item-&amp;gt;newInstance();
  }
  //panggil class di sini
  $class = new ReflectionClass(MyClass::class);
  $main_class = $class-&amp;gt;newInstance();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contoh Kode Pemanfaatan Reflection dan Annotation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faynoflrz8lbovt38bs0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faynoflrz8lbovt38bs0y.png" alt="Gbr 1. Deklarasi Attribute" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 1. Deklarasi Attribute&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m0axg582n4bvfehz5e1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m0axg582n4bvfehz5e1.jpg" alt="Gbr 2. Annotating Class" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 2. Annotating Class&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61f0jouebh76qh5euklp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61f0jouebh76qh5euklp.jpg" alt="Gbr 3. Parsing Attribute (gunakan require jika tidak autoloading class)" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 3. Parsing Attribute (gunakan require jika tidak autoloading class)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vkhequjxiyhv2tn57ll.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vkhequjxiyhv2tn57ll.jpg" alt="Gbr 4. Hasil akhir" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
Gbr 4. Hasil akhir&lt;/p&gt;

</description>
      <category>php</category>
      <category>attributes</category>
    </item>
  </channel>
</rss>
