<?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: Roby Cigar</title>
    <description>The latest articles on DEV Community by Roby Cigar (@robycigar).</description>
    <link>https://dev.to/robycigar</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%2F483329%2Ff921d00e-bbf8-4a37-a970-bb89b7c3100d.JPG</url>
      <title>DEV Community: Roby Cigar</title>
      <link>https://dev.to/robycigar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robycigar"/>
    <language>en</language>
    <item>
      <title>How I Boost SEO with AI &amp; Data Analysis</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Wed, 23 Apr 2025 09:08:02 +0000</pubDate>
      <link>https://dev.to/robycigar/how-i-boost-seo-with-ai-data-analysis-3l87</link>
      <guid>https://dev.to/robycigar/how-i-boost-seo-with-ai-data-analysis-3l87</guid>
      <description>&lt;p&gt;In the competitive world of e-commerce, SEO is the backbone of online visibility. For &lt;strong&gt;souvenirlilin.id&lt;/strong&gt;, a website specializing in unique candle souvenirs, leveraging AI and data analysis transformed their SEO strategy—resulting in a surge from &lt;strong&gt;257 clicks, 12.3k impressions, and a 2.1% CTR&lt;/strong&gt; to even higher metrics. Here’s how I did it, step by step.  &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Extract Keyword Data from Google Search Console&lt;/strong&gt;
&lt;/h3&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%2F285poky8k04zyemveqfe.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%2F285poky8k04zyemveqfe.png" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The journey began by exporting 3–6 months of keyword query data from Google Search Console. This dataset included metrics like search queries, impressions, clicks, CTR, and average position. This raw data became the foundation for uncovering hidden opportunities.  &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Analyze Trends with ChatGPT&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The dataset was uploaded to ChatGPT, paired with a strategic prompt to extract actionable insights:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ChatGPT Prompt Used&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
*“Based on the provided dataset, please analyze and present the top 3 to 5 most interesting observations, highlights, or trends. This may include identifying segments (e.g., age, gender, etc.) that were more likely to respond in a certain way, significant patterns, or unexpected insights from the data.  &lt;/p&gt;

&lt;p&gt;Your analysis should be detailed and insightful, focusing on the most compelling aspects of the dataset. Provide a clear and concise summary that highlights the key findings, ensuring that the trends or observations are presented in an engaging and informative manner.  &lt;/p&gt;

&lt;p&gt;Please ensure that your response encourages creativity and originality in identifying and presenting the most compelling insights from the dataset while maintaining accuracy and relevance.”*  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Here's the Example Insights from ChatGPT&lt;/strong&gt;:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Long-Tail Keyword Opportunities&lt;/strong&gt;: Queries like “custom wedding candles Bali” had high impressions but low clicks, signaling untapped content potential.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seasonal Trends&lt;/strong&gt;: Searches for “Christmas candle souvenirs” spiked in Q4, but existing content was under-optimized.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Intent&lt;/strong&gt;: 40% of queries included location modifiers (e.g., “Jakarta,” “Bandung”), suggesting a need for geo-targeted pages.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Dominance&lt;/strong&gt;: 75% of clicks came from mobile users, yet the site lacked mobile-first content structuring.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Create Targeted Content at Scale&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using these insights, the team generated &lt;strong&gt;50+ articles&lt;/strong&gt; addressing gaps:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Localized Guides&lt;/strong&gt;: “10 Best Wedding Candle Souvenirs in Bali” (targeting geo-specific queries).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seasonal Content&lt;/strong&gt;: “Festive Christmas Candles: 2023 Trends” (released ahead of Q4).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile-Optimized Tutorials&lt;/strong&gt;: “How to Personalize Candles on Mobile” (improving mobile engagement).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each piece incorporated ChatGPT-identified keywords, driving relevance and alignment with search intent.  &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Technical SEO Overhaul with Claude AI&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Claude AI was tasked with optimizing technical SEO:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Meta Tag Optimization&lt;/strong&gt;: Rewrote title tags and descriptions to include high-value keywords.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Snippet Testing&lt;/strong&gt;: Generated FAQ schema and product snippets, then validated them using Google’s Rich Results Test.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;The Results&lt;/strong&gt;
&lt;/h3&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%2Fwvttixk6e77gcsxka06a.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%2Fwvttixk6e77gcsxka06a.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
Within days, SouvenirLilin.id saw dramatic improvements:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impressions&lt;/strong&gt;: 12.3k → 15k+ (and climbing)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clicks&lt;/strong&gt;: 257 → 500+ daily
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CTR&lt;/strong&gt;: 2.1% → 3.3%
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average Position&lt;/strong&gt;: Jumped from #9.4 to #5.2 for priority keywords
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Key Lessons Learned&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Drives Creativity&lt;/strong&gt;: AI transforms raw numbers into storytelling opportunities (e.g., seasonal blogs).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed Matters&lt;/strong&gt;: Claude AI streamlined technical fixes that would take weeks manually.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test and Iterate&lt;/strong&gt;: Regular Rich Results Tests and Ahrefs audits ensured sustained growth.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For SouvenirLilin.id, blending AI analysis with strategic execution unlocked unprecedented SEO success. By letting ChatGPT decode user intent and Claude AI refine technical health, they turned data into a growth engine.  &lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Unable to create lockable file: /var/www/. Please ensure you have permission to create files in this location.</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Tue, 22 Apr 2025 01:56:01 +0000</pubDate>
      <link>https://dev.to/robycigar/unable-to-create-lockable-file-varwww-please-ensure-you-have-permission-to-create-files-in-2pd2</link>
      <guid>https://dev.to/robycigar/unable-to-create-lockable-file-varwww-please-ensure-you-have-permission-to-create-files-in-2pd2</guid>
      <description>&lt;p&gt;That error means the current user (probably &lt;code&gt;root&lt;/code&gt; or &lt;code&gt;www-data&lt;/code&gt;) doesn’t have &lt;strong&gt;write permissions&lt;/strong&gt; to the Laravel &lt;code&gt;storage&lt;/code&gt; directory or its subfolders.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔧 &lt;strong&gt;Fix File Permissions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Run these commands to &lt;strong&gt;give proper ownership and permissions&lt;/strong&gt;:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Give the web server user access (assuming you're using Apache or Nginx)&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/html/million-candles/backend

&lt;span class="c"&gt;# Set correct ownership (adjust 'www-data' if your web server uses a different user)&lt;/span&gt;
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data storage bootstrap/cache

&lt;span class="c"&gt;# Give read/write/execute permission to owner&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 storage bootstrap/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you're running commands as &lt;code&gt;root&lt;/code&gt;, and Laravel is executed via &lt;code&gt;www-data&lt;/code&gt;, this ensures the app can write to the necessary folders.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ✅ Recommended &lt;code&gt;.gitignore&lt;/code&gt; reminder
&lt;/h3&gt;

&lt;p&gt;Make sure &lt;code&gt;storage&lt;/code&gt; contents like cache, logs, and sessions are ignored in Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/storage/*
!/storage/.gitignore
!/storage/framework/
/storage/framework/cache/*
!/storage/framework/cache/.gitignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  After Fixing Permissions
&lt;/h3&gt;

&lt;p&gt;You can now retry the failed Git commands or run Laravel normally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan config:cache
php artisan route:cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me know if your Laravel app is running on a different user or if you'd like to reset the file permissions entirely.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Photolithography Machines: Teknologi Canggih di Balik Pembuatan Chip Semikonduktor</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Thu, 30 Jan 2025 18:52:00 +0000</pubDate>
      <link>https://dev.to/robycigar/photolithography-machines-teknologi-canggih-di-balik-pembuatan-chip-semikonduktor-474o</link>
      <guid>https://dev.to/robycigar/photolithography-machines-teknologi-canggih-di-balik-pembuatan-chip-semikonduktor-474o</guid>
      <description>&lt;p&gt;Dalam dunia industri semikonduktor, photolithography adalah salah satu proses paling kritis dan kompleks. Proses ini melibatkan penggunaan mesin photolithography canggih, seperti ASML EUV (Extreme Ultraviolet) scanners, yang memungkinkan pembuatan chip dengan ukuran nanometer. Blog ini akan membahas apa itu photolithography, bagaimana mesin-mesin ini bekerja, dan mengapa ASML EUV scanners dianggap sebagai salah satu pencapaian teknologi terbesar dalam industri semikonduktor.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Apa Itu Photolithography?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Photolithography adalah proses yang digunakan untuk mencetak pola sirkuit elektronik pada wafer silikon. Proses ini mirip dengan mencetak foto, di mana cahaya digunakan untuk mentransfer desain chip ke permukaan wafer. Photolithography adalah langkah kunci dalam pembuatan chip semikonduktor, karena menentukan seberapa kecil dan efisien transistor dapat dibuat.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Bagaimana Photolithography Bekerja?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Proses photolithography melibatkan beberapa tahapan utama:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pelapisan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Wafer silikon dilapisi dengan material fotosensitif yang disebut photoresist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pencahayaan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Desain chip diproyeksikan ke wafer menggunakan cahaya melalui sebuah masker (fotomasa). Cahaya ini mengubah sifat photoresist di area tertentu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pengembangan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Photoresist yang terkena cahaya akan larut, meninggalkan pola yang sesuai dengan desain chip.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Etsa dan Deposisi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Wafer kemudian melalui proses etsa (pengikisan) atau deposisi material untuk membentuk lapisan-lapisan sirkuit.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;ASML EUV Scanners: Teknologi Terdepan dalam Photolithography&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;ASML, perusahaan Belanda, adalah pemimpin global dalam produksi mesin photolithography. Mesin EUV (Extreme Ultraviolet) buatan ASML adalah yang paling canggih saat ini dan memungkinkan pembuatan chip dengan node 5nm, 3nm, dan bahkan lebih kecil.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Apa yang Membuat ASML EUV Unik?&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sumber Cahaya EUV&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
EUV menggunakan cahaya dengan panjang gelombang 13.5nm, jauh lebih pendek daripada teknologi sebelumnya (193nm). Ini memungkinkan pencetakan pola yang lebih kecil dan presisi tinggi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kompleksitas Teknis&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mesin EUV adalah salah satu peralatan paling rumit yang pernah dibuat. Mereka terdiri dari lebih dari 100.000 komponen dan membutuhkan teknologi tinggi untuk menghasilkan dan memfokuskan cahaya EUV.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kolaborasi Global&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ASML bekerja sama dengan ratusan pemasok dan mitra teknologi, termasuk Zeiss (Jerman) untuk lensa dan Cymer (AS) untuk sumber cahaya. Hal ini menjadikan EUV sebagai produk kolaborasi global.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Mengapa ASML EUV Scanners Sangat Penting?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mendorong Hukum Moore&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hukum Moore menyatakan bahwa jumlah transistor pada chip akan berlipat ganda setiap dua tahun. ASML EUV scanners memungkinkan industri semikonduktor untuk terus memenuhi prediksi ini dengan membuat transistor yang semakin kecil.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mendukung Inovasi Teknologi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Chip yang dibuat dengan EUV digunakan dalam berbagai aplikasi canggih, seperti AI, 5G, dan komputasi kuantum. Tanpa EUV, perkembangan teknologi ini akan terhambat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dominasi Pasar&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ASML adalah satu-satunya produsen mesin EUV di dunia, menjadikannya pemain kunci dalam rantai pasokan semikonduktor global. Perusahaan seperti TSMC, Samsung, dan Intel bergantung pada mesin ASML untuk memproduksi chip terkini.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Tantangan dalam Pengembangan EUV&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Biaya Tinggi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mesin EUV harganya bisa mencapai $150 juta per unit, menjadikannya salah satu peralatan paling mahal di dunia.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kompleksitas Produksi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Membuat dan merawat mesin EUV membutuhkan keahlian tinggi dan rantai pasokan yang sangat khusus.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keterbatasan Pasokan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Karena kompleksitasnya, ASML hanya bisa memproduksi sekitar 50 mesin EUV per tahun. Hal ini menciptakan bottleneck dalam industri semikonduktor.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Masa Depan Photolithography&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High-NA EUV&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ASML sedang mengembangkan generasi berikutnya dari EUV, yang disebut High-NA EUV. Teknologi ini akan menggunakan lensa dengan aperture numerik yang lebih tinggi, memungkinkan pencetakan pola yang lebih kecil dan presisi yang lebih baik.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Beyond EUV&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Peneliti sedang mengeksplorasi teknologi baru, seperti lithography berbasis partikel (electron beam atau ion beam), untuk melampaui batas fisik EUV.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrasi dengan Teknologi Lain&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Photolithography akan terus dikombinasikan dengan teknologi lain, seperti Directed Self-Assembly (DSA) dan nanoimprint lithography, untuk meningkatkan efisiensi dan mengurangi biaya.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Kesimpulan&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Photolithography machines, terutama ASML EUV scanners, adalah jantung dari industri semikonduktor modern. Mereka memungkinkan pembuatan chip yang semakin kecil, cepat, dan efisien, yang pada gilirannya mendorong inovasi di berbagai bidang teknologi. Meskipun menghadapi tantangan seperti biaya tinggi dan kompleksitas produksi, masa depan photolithography tetap cerah dengan perkembangan teknologi seperti High-NA EUV dan beyond.&lt;/p&gt;

&lt;p&gt;Dengan peran krusialnya dalam mendukung revolusi digital, tidak berlebihan untuk mengatakan bahwa photolithography adalah salah satu pencapaian teknologi terbesar abad ini.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Apakah Anda tertarik dengan teknologi semikonduktor atau ingin tahu lebih banyak tentang ASML EUV? Beri tahu kami di kolom komentar!&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mengenal Industri Semikonduktor: Pilar Teknologi Modern</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Mon, 27 Jan 2025 13:29:32 +0000</pubDate>
      <link>https://dev.to/robycigar/mengenal-industri-semikonduktor-pilar-teknologi-modern-1345</link>
      <guid>https://dev.to/robycigar/mengenal-industri-semikonduktor-pilar-teknologi-modern-1345</guid>
      <description>&lt;p&gt;Dalam beberapa dekade terakhir, industri semikonduktor telah menjadi salah satu sektor paling penting dalam perkembangan teknologi global. Semikonduktor, yang sering disebut sebagai "otak" dari perangkat elektronik, memainkan peran krusial dalam berbagai aspek kehidupan modern, mulai dari smartphone, komputer, kendaraan listrik, hingga infrastruktur jaringan 5G. Blog ini akan membahas lebih dalam tentang apa itu industri semikonduktor, mengapa ia begitu penting, serta tantangan dan peluang yang dihadapi oleh sektor ini.&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%2Fjae4gv8pmbz8vdre6dsz.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%2Fjae4gv8pmbz8vdre6dsz.png" alt="Gambar mesin EUV Lithography" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Apa Itu Semikonduktor?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Semikonduktor adalah material yang memiliki sifat konduktivitas listrik antara konduktor (seperti tembaga) dan isolator (seperti kaca). Material ini biasanya terbuat dari silikon, yang kemudian diolah menjadi komponen elektronik seperti transistor, dioda, dan integrated circuit (IC). Komponen-komponen ini menjadi dasar dari hampir semua perangkat elektronik yang kita gunakan sehari-hari.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Mengapa Industri Semikonduktor Penting?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dasar Teknologi Modern&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Semikonduktor adalah fondasi dari revolusi digital. Tanpa semikonduktor, perangkat seperti smartphone, laptop, dan IoT (Internet of Things) tidak akan bisa berfungsi. Bahkan, industri otomotif modern pun sangat bergantung pada semikonduktor untuk mengembangkan kendaraan otonom dan listrik.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pendorong Inovasi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Perkembangan semikonduktor memungkinkan inovasi di berbagai bidang, seperti kecerdasan buatan (AI), komputasi kuantum, dan energi terbarukan. Semakin kecil dan efisien semikonduktor, semakin besar kemungkinan untuk menciptakan teknologi yang lebih canggih.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ekonomi Global&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Industri semikonduktor bernilai miliaran dolar dan menjadi tulang punggung ekonomi digital. Negara-negara yang menguasai teknologi semikonduktor, seperti Amerika Serikat, Taiwan, Korea Selatan, dan Tiongkok, memiliki pengaruh besar dalam perekonomian global.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Proses Produksi Semikonduktor&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Produksi semikonduktor adalah proses yang sangat kompleks dan membutuhkan presisi tinggi. Berikut adalah beberapa tahapan utamanya:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desain&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Desain chip dilakukan oleh insinyur menggunakan software khusus. Tahap ini menentukan fungsi dan performa chip.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fabrikasi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Fabrikasi dilakukan di pabrik yang disebut "fab" atau foundry. Proses ini melibatkan pembuatan wafer silikon dan penambahan lapisan-lapisan material untuk membentuk transistor dan komponen lainnya.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pengemasan dan Pengujian&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Setelah fabrikasi, chip dikemas dan diuji untuk memastikan kualitas dan fungsionalitasnya.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Tantangan dalam Industri Semikonduktor&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kompleksitas Teknologi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Semakin kecil ukuran transistor (seperti 3nm atau 5nm), semakin sulit dan mahal proses produksinya. Hal ini membutuhkan investasi besar dalam penelitian dan pengembangan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ketergantungan Global&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Industri semikonduktor sangat tergantung pada rantai pasokan global. Misalnya, Taiwan memproduksi lebih dari 60% chip dunia melalui perusahaan seperti TSMC. Ketergantungan ini menimbulkan risiko geopolitik dan gangguan pasokan, seperti yang terjadi selama pandemi COVID-19.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2F5q6blru7cd8qhbo2g8m0.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%2F5q6blru7cd8qhbo2g8m0.png" alt="Gambar logo perusahaan TSMC" width="800" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keterbatasan Bahan Baku&lt;/strong&gt;
Silikon, bahan utama semikonduktor, membutuhkan proses ekstraksi dan pemurnian yang rumit. Selain itu, ada kekhawatiran tentang ketersediaan bahan baku lain seperti helium dan logam langka.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Peluang di Masa Depan&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Era AI dan IoT&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Semikonduktor akan terus menjadi kunci dalam pengembangan AI dan IoT. Chip khusus untuk AI, seperti GPU dan TPU, semakin dibutuhkan untuk aplikasi seperti pembelajaran mesin dan analisis data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kendaraan Listrik dan Otonom&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Industri otomotif membutuhkan semikonduktor untuk mengembangkan kendaraan listrik dan otonom. Hal ini membuka peluang besar bagi perusahaan semikonduktor untuk berinovasi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Energi Terbarukan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Semikonduktor juga berperan dalam teknologi energi terbarukan, seperti panel surya dan sistem penyimpanan energi. Ini menjadi area pertumbuhan yang menjanjikan.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Kesimpulan&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Industri semikonduktor adalah pilar utama teknologi modern yang terus mendorong inovasi dan pertumbuhan ekonomi. Meskipun menghadapi berbagai tantangan, peluang di masa depan tetap besar, terutama dengan perkembangan AI, IoT, dan energi terbarukan. Bagi negara-negara yang ingin memimpin dalam era digital, investasi dalam industri semikonduktor adalah langkah strategis yang tidak bisa diabaikan.&lt;/p&gt;

&lt;p&gt;Semoga blog ini memberikan gambaran yang jelas tentang pentingnya industri semikonduktor dan bagaimana ia membentuk masa depan kita. Jika Anda tertarik untuk mempelajari lebih lanjut, jangan ragu untuk menjelajahi topik-topik terkait seperti fabrikasi chip, rantai pasokan global, atau perkembangan terbaru dalam teknologi semikonduktor.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Apakah Anda tertarik dengan topik tertentu dalam industri semikonduktor? Beri tahu kami di kolom komentar!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>semikonduktor</category>
      <category>tsmc</category>
    </item>
    <item>
      <title>Why I Chose Not to Work in an Office Job</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Wed, 15 Jan 2025 13:46:13 +0000</pubDate>
      <link>https://dev.to/robycigar/why-i-chose-not-to-work-in-an-office-job-7hk</link>
      <guid>https://dev.to/robycigar/why-i-chose-not-to-work-in-an-office-job-7hk</guid>
      <description>&lt;p&gt;For two years, I worked as a software engineer at a private company. My work hours were the usual 9-to-5, and my salary was more than enough for my needs. It felt like a steady and reliable job, the kind of job that many people aim for. But everything changed in June 2024 when I found out I had cancer. This news turned my world upside down and made me rethink my career and what I really wanted out of life.&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/C_-ZFXdPDzF/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;


&lt;p&gt;When I got my diagnosis, everything started to feel harder. It wasn’t just the emotional stress; my body also felt very weak. I didn’t have the energy to sit at a desk all day, solve difficult problems, and meet deadlines. Even small tasks felt like they took a lot out of me. No matter how much I tried, I couldn’t keep up with the demands of a 9-to-5 job. I felt so tired all the time, and just the idea of going back to work felt overwhelming. I realized that my health had to come first.&lt;/p&gt;

&lt;p&gt;Leaving my job was a really tough choice, but it was something I needed to do. Quitting meant giving up a stable income and leaving behind my coworkers, who had become my friends. But I knew it was the right thing for me. After I quit, I started helping my parents with their daily tasks. It made me feel good to help them and feel useful at home. This was something I hadn’t experienced before in the same way, and it gave me a new sense of purpose.&lt;/p&gt;

&lt;p&gt;At the same time, I found out I really liked making content on Instagram and TikTok. I started sharing fun moments, ideas, and stories, and it turned into a creative outlet for me. Making videos helped me express myself and connect with other people. It also made me feel like I was still doing something meaningful, even though I wasn’t working a traditional job. It was exciting to see how others enjoyed my content, and it gave me a sense of accomplishment.&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/DBLyLeWPC49/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;
&lt;br&gt;
&lt;em&gt;Alt: My first 3 million views on instagram&lt;/em&gt;

&lt;p&gt;This change in my lifestyle also helped me find something I had been missing: work-life balance. I didn’t have to follow a strict schedule anymore, and I could plan my days in a way that suited me better. I could sleep in, spend time on things I enjoyed, and focus on staying healthy. This freedom gave me time to think about what I really wanted in life. I realized that I needed to find work that wasn’t too demanding but could still support me financially. This would let me keep living a balanced life that made me happy and healthy.&lt;/p&gt;

&lt;p&gt;As I settled into this new way of living, I picked up hobbies that have brought me a lot of joy. I started doing parkour and going to the gym. These activities have helped me feel stronger and stay active. Parkour, especially, has taught me how to adapt and keep going even when things are hard. It’s also a lot of fun! Going to the gym has been a way for me to challenge myself and feel proud of what I can do. These hobbies keep me motivated and help me feel good about myself.&lt;/p&gt;

&lt;p&gt;I’ve also started making new friends and connections. I’ve met other people who are also dealing with chronic illnesses, and we’ve formed a supportive community. It feels great to have friends who understand what I’m going through because they’ve been through it too. These friendships have given me strength and reminded me that I’m not alone in this journey.&lt;/p&gt;

&lt;p&gt;At the same time, I’m spending time learning new things, especially in technology. Even though I’m not in an office job anymore, I still want to keep my skills sharp. Learning about new tech trends and tools has been really exciting. It makes me feel connected to my old career while also giving me ideas for the future. Maybe I’ll do freelance work or start my own projects. These learning experiences keep me inspired and ready for what’s next.&lt;/p&gt;

&lt;p&gt;One part of my life that hasn’t changed is my medical treatment. I still go to RSUP Sardjito in Yogyakarta for my treatments, which happen about one to four times a month. These visits remind me that I’m still on this journey, but they also show me how far I’ve come. The doctors and nurses there have been so supportive, making my treatments a little easier to face. Even though it’s tough, I try to focus on the progress I’ve made and the strength I’ve gained.&lt;/p&gt;

&lt;p&gt;I’m still figuring out what this new chapter of my life will look like. 😊 Whether it’s making videos, doing freelance work, or exploring other options, I’m focused on keeping a good balance between work and life. Leaving my office job was a big change, but I don’t regret it. This journey is about finding work that fits my values, keeps me healthy, and lets me live the way I want. 🌟 It’s been a challenging road, but it’s also been full of chances to grow, make new friends, and think about what success really means to me.&lt;/p&gt;

</description>
      <category>cancer</category>
    </item>
    <item>
      <title>file_put_contents(...): Failed to open stream: No such file or directory</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Thu, 28 Nov 2024 23:32:02 +0000</pubDate>
      <link>https://dev.to/robycigar/fileputcontents-failed-to-open-stream-no-such-file-or-directory-4mmh</link>
      <guid>https://dev.to/robycigar/fileputcontents-failed-to-open-stream-no-such-file-or-directory-4mmh</guid>
      <description>&lt;p&gt;problem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;file_put_contents(/home/souv1390/public_html/jiwaku.souvenirlilin.com/mental-health-app/backend/storage/framework/sessions/B4BFl0ZHxq0c8wz4r7u2onSCR1eq5JFFQ1H9Ql9T): Failed to open stream: No such file or directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;yg udah dicoba:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer dump-autoload
composer install
php artisan cache:clear
php artisan clear-compiled
chmod -R 775 storage

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

&lt;/div&gt;



&lt;p&gt;solution:&lt;br&gt;
bikin folder &lt;code&gt;/storage/framework/sessions&lt;/code&gt;&lt;br&gt;
&lt;code&gt;mkdir storage/framework/sessions&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>service worker</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Fri, 16 Jun 2023 02:57:13 +0000</pubDate>
      <link>https://dev.to/robycigar/service-worker-1h0d</link>
      <guid>https://dev.to/robycigar/service-worker-1h0d</guid>
      <description>&lt;p&gt;To add a service worker to your application, you'll need to follow a few steps. Service workers are JavaScript files that run in the background of your web application and enable features like offline caching and push notifications. Here's a basic outline of the process:&lt;/p&gt;

&lt;p&gt;Create a Service Worker JavaScript file: Start by creating a new JavaScript file (e.g., service-worker.js) in the root directory of your application.&lt;/p&gt;

&lt;p&gt;Register the service worker: In your main HTML file, add the following script tag to register the service worker. Place this code within the  tag, usually just before the closing &amp;lt;/body&amp;gt; tag.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;javascript&amp;lt;br&amp;gt;
Copy code&amp;lt;br&amp;gt;
if (&amp;amp;#39;serviceWorker&amp;amp;#39; in navigator) {&amp;lt;br&amp;gt;
  window.addEventListener(&amp;amp;#39;load&amp;amp;#39;, function() {&amp;lt;br&amp;gt;
    navigator.serviceWorker.register(&amp;amp;#39;/service-worker.js&amp;amp;#39;)&amp;lt;br&amp;gt;
      .then(function(registration) {&amp;lt;br&amp;gt;
        console.log(&amp;amp;#39;Service Worker registered with scope:&amp;amp;#39;, registration.scope);&amp;lt;br&amp;gt;
      })&amp;lt;br&amp;gt;
      .catch(function(error) {&amp;lt;br&amp;gt;
        console.log(&amp;amp;#39;Service Worker registration failed:&amp;amp;#39;, error);&amp;lt;br&amp;gt;
      });&amp;lt;br&amp;gt;
  });&amp;lt;br&amp;gt;
}&amp;lt;br&amp;gt;
Define the service worker logic: Open your service-worker.js file and add the necessary logic to handle events such as install, activate, and fetch. Here&amp;amp;#39;s a simple example:&amp;lt;br&amp;gt;
javascript&amp;lt;br&amp;gt;
Copy code&amp;lt;br&amp;gt;
// service-worker.js&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;// Install event&amp;lt;br&amp;gt;
self.addEventListener(&amp;amp;#39;install&amp;amp;#39;, function(event) {&amp;lt;br&amp;gt;
  event.waitUntil(&amp;lt;br&amp;gt;
    caches.open(&amp;amp;#39;my-app-cache-v1&amp;amp;#39;)&amp;lt;br&amp;gt;
      .then(function(cache) {&amp;lt;br&amp;gt;
        return cache.addAll([&amp;lt;br&amp;gt;
          &amp;amp;#39;/&amp;amp;#39;,&amp;lt;br&amp;gt;
          &amp;amp;#39;/index.html&amp;amp;#39;,&amp;lt;br&amp;gt;
          &amp;amp;#39;/styles.css&amp;amp;#39;,&amp;lt;br&amp;gt;
          &amp;amp;#39;/script.js&amp;amp;#39;,&amp;lt;br&amp;gt;
          // Add additional files to cache as needed&amp;lt;br&amp;gt;
        ]);&amp;lt;br&amp;gt;
      })&amp;lt;br&amp;gt;
  );&amp;lt;br&amp;gt;
});&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;// Activate event&amp;lt;br&amp;gt;
self.addEventListener(&amp;amp;#39;activate&amp;amp;#39;, function(event) {&amp;lt;br&amp;gt;
  // Perform any necessary cleanup tasks&amp;lt;br&amp;gt;
});&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;// Fetch event&amp;lt;br&amp;gt;
self.addEventListener(&amp;amp;#39;fetch&amp;amp;#39;, function(event) {&amp;lt;br&amp;gt;
  event.respondWith(&amp;lt;br&amp;gt;
    caches.match(event.request)&amp;lt;br&amp;gt;
      .then(function(response) {&amp;lt;br&amp;gt;
        if (response) {&amp;lt;br&amp;gt;
          return response; // Serve cached version if available&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        return fetch(event.request); // Otherwise, fetch from the network&amp;lt;br&amp;gt;
      })&amp;lt;br&amp;gt;
  );&amp;lt;br&amp;gt;
});&amp;lt;br&amp;gt;
In this example, the service worker caches specified files during the installation event. Then, during the fetch event, it checks if the requested resource is available in the cache and serves it from there if possible. Otherwise, it fetches the resource from the network.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Customize the caching logic: Modify the caching logic within the install event to cache the specific files and assets required by your application. You can add URLs to the cache.addAll method to include additional files or assets that should be available offline.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Test and debug: Load your application in a supported browser (service workers are not supported in all browsers), and open the browser&amp;amp;#39;s developer tools to check for any errors or debug messages related to the service worker registration or caching.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Update the service worker: Whenever you make changes to your service worker file, the browser will use the older version until all tabs with the website are closed. To force the service worker to update, you can add a versioning mechanism to the cache name (e.g., change &amp;amp;#39;my-app-cache-v1&amp;amp;#39; to &amp;amp;#39;my-app-cache-v2&amp;amp;#39;). Alternatively, you can use a tool like workbox to simplify service worker versioning and caching strategies.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Remember, service workers have certain limitations and behaviors that you should be aware of. It&amp;amp;#39;s important to test and validate their functionality in various scenarios to ensure they work as expected for your specific application.&amp;lt;/p&amp;gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>indexed db</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Fri, 16 Jun 2023 02:22:09 +0000</pubDate>
      <link>https://dev.to/robycigar/indexed-db-5cio</link>
      <guid>https://dev.to/robycigar/indexed-db-5cio</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Open or create the IndexedDB database
const request = indexedDB.open('todo', 1);

// Handle database upgrade or creation
request.onupgradeneeded = function (event) {
  const db = event.target.result;

  // Create an object store
  const objectStore = db.createObjectStore('tasks', { keyPath: 'id', autoIncrement: true });

  // Create an index
  objectStore.createIndex('taskName', 'taskName', { unique: false });
};

// Handle successful database opening
request.onsuccess = function (event) {
  const db = event.target.result;

  // Perform database operations here
  // For example, you can add, delete, or retrieve data

  // Close the database connection (optional)
  db.close();
};

// Handle database opening errors
request.onerror = function (event) {
  console.error('IndexedDB error:', event.target.error);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Open or create the IndexedDB database
const request = indexedDB.open('todo', 1);

// Handle database upgrade or creation
request.onupgradeneeded = function (event) {
  const db = event.target.result;

  // Create an object store
  const objectStore = db.createObjectStore('tasks', { keyPath: 'id', autoIncrement: true });

  // Create an index
  objectStore.createIndex('taskName', 'taskName', { unique: false });
};

// Handle successful database opening
request.onsuccess = function (event) {
  const db = event.target.result;

  // Start a transaction and get the object store
  const transaction = db.transaction(['tasks'], 'readwrite');
  const objectStore = transaction.objectStore('tasks');

  // Create a new task object
  const newTask = { taskName: 'Task 1', priority: 'High', completed: false };

  // Add the new task to the object store
  const requestAdd = objectStore.add(newTask);

  // Handle successful task addition
  requestAdd.onsuccess = function (event) {
    console.log('Task added successfully');
  };

  // Handle task addition errors
  requestAdd.onerror = function (event) {
    console.error('Error adding task:', event.target.error);
  };

  // Complete the transaction
  transaction.oncomplete = function () {
    // Close the database connection (optional)
    db.close();
  };
};

// Handle database opening errors
request.onerror = function (event) {
  console.error('IndexedDB error:', event.target.error);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Setup Symlink di CPanel</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Thu, 30 Mar 2023 14:47:07 +0000</pubDate>
      <link>https://dev.to/robycigar/setup-symlink-di-cpanel-2c99</link>
      <guid>https://dev.to/robycigar/setup-symlink-di-cpanel-2c99</guid>
      <description>&lt;p&gt;Cara Membuat Symlink di cPanel&lt;br&gt;
Setidaknya ada 3 cara yang bisa anda gunakan, untuk membuat symlink di cPanel hosting. Berikut 3 cara yang bisa Anda pilih.&lt;/p&gt;

&lt;p&gt;Cara 1. Membuat symlink melalui SSH&lt;br&gt;
Untuk pengguna layanan hosting Medium keatas serta Cloud hosting, Anda dapat membuat symlink cPanel melalui SSH. Berikut adalah langkah-langkah membuat symlink melalui SSH cPanel:&lt;/p&gt;

&lt;p&gt;Login ke cPanel hosting Anda.&lt;br&gt;
Klik menu Terminal.&lt;br&gt;
Masukkan perintah dengan format berikut:&lt;br&gt;
ln -s target_path link_path&lt;br&gt;
Contoh: misalkan Anda ingin membuat symlink laravel dari folder laravel/storage/app/public ke public_html/storage gunakan syntax berikut:&lt;/p&gt;

&lt;p&gt;ln -s /home/usernamecpanel/laravel/storage/app/public /home/usernamecpanel/public_html/storage&lt;br&gt;
(sesuaikan usernamecpanel sesuai username cPanel hosting Anda)&lt;/p&gt;

&lt;p&gt;Cara 2. Membuat symlink melalui script PHP&lt;br&gt;
Apabila paket hosting yang Anda gunakan belum support SSH, maka Anda bisa membuat symlink melalui script php.&lt;/p&gt;

&lt;p&gt;Buatlah sebuah file, misalnya bernama symlink.php. Lalu anda bisa mengisi script tersebut, menggunakan contoh script PHP symlink sebagai berikut:&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
    $target = $_SERVER['DOCUMENT_ROOT']."/../laravel/storage";&lt;br&gt;
    $link = $_SERVER['DOCUMENT_ROOT']."/storage";&lt;br&gt;
    if(symlink( $target, $link )){&lt;br&gt;
        echo "OK.";&lt;br&gt;
    } else {&lt;br&gt;
        echo "Gagal.";&lt;br&gt;
    }&lt;br&gt;
?&amp;gt;&lt;br&gt;
Keterangan :&lt;/p&gt;

&lt;p&gt;Pada bagian “$target = $_SERVER[‘DOCUMENT_ROOT’].”/../laravel/storage“;” Silahkan sesuaikan path target storage folder yang digunakan.&lt;br&gt;
Lalu, pada bagian “$link = $_SERVER[‘DOCUMENT_ROOT’].”/storage“;” . Silahkan sesuaikan ke path dimana folder storage akan di link kan.&lt;br&gt;
Untuk menjalankan script tersebut silahkan langsung akses melalui &lt;a href="https://namadomainanda.com/namafilesymlink.php" rel="noopener noreferrer"&gt;https://namadomainanda.com/namafilesymlink.php&lt;/a&gt; atau sesuaikan dengan nama file php yang anda buat. Apabila setelah di eksekusi muncul “OK” . Berarti symlink folder storage Anda berhasil di buat.&lt;/p&gt;

&lt;p&gt;Cara 3. Membuat symlink melalui Cron Job&lt;br&gt;
Apabila paket hosting yang Anda miliki kebetulan tidak memiliki akses SSH, Anda masih tetap bisa membuat symbolic link dengan mudah, dengan menggunakan bantuan Cron Jobs.&lt;/p&gt;

&lt;p&gt;Sebagai contoh, kali ini kami ingin membuat symbolic /public_html/dataku, yang diarahkan ke sebuah direktori yang berlokasi di /home/usercpanel/dataku. Berikut langkah-langkahnya:&lt;/p&gt;

&lt;p&gt;Login ke cPanel, masuk ke menu Cron Jobs. Pilih Common Settings, kemudian pilih Once Per Minute. Pada kolom command, masukkan perintah berikut:&lt;/p&gt;

&lt;p&gt;ln -s /home/usercpanel/dataku /home/usercpanel/public_html/dataku&lt;/p&gt;

&lt;p&gt;Tunggu sekitar 1 menit, kemudian masuk ke File Manager, dan masuk ke public_html. Symbolic link dataku sudah berhasil dibuat. Apabila symbolic link dataku diklik, maka akan diarahkan ke dalam direktori /home/usercpanel/dataku.&lt;/p&gt;

&lt;p&gt;Kembali lagi ke menu Cron Jobs, kemudian hapus cron jobs yang sudah dibuat sebelumnya. Langkah ini penting dilakukan, supaya cron job yang sudah dibuat tidak terus menerus terproses oleh cPanel.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Import Component in SwiftUI</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Thu, 02 Mar 2023 07:54:29 +0000</pubDate>
      <link>https://dev.to/robycigar/how-to-import-component-in-swiftui-4me7</link>
      <guid>https://dev.to/robycigar/how-to-import-component-in-swiftui-4me7</guid>
      <description>&lt;p&gt;In SwiftUI, components are created using views, and you can import them into your project by creating a new SwiftUI file and defining your view there. Here's an example of how to create a custom component and import it into your project:&lt;/p&gt;

&lt;p&gt;Open Xcode and create a new SwiftUI file by selecting File &amp;gt; New &amp;gt; File... from the menu bar.&lt;br&gt;
Select SwiftUI View as the template and click Next.&lt;br&gt;
Enter a name for your view, such as MyComponent, and click Create.&lt;br&gt;
Define your view in the body property of the struct. For example:&lt;br&gt;
swift&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct MyComponent: View {
    var body: some View {
        VStack {
            Text("Hello, world!")
            Image(systemName: "star.fill")
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and import it into your project by adding the following code to your SwiftUI view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            MyComponent()
            Text("This is my main view")
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the MyComponent view is imported into the ContentView view using the name of the file and the name of the struct that defines the view. The MyComponent view can be used like any other SwiftUI view in the body property of the ContentView view.&lt;/p&gt;

&lt;p&gt;You can define as many custom components as you need in separate files and import them into your project as needed. This allows you to modularize your code and reuse components across different views and projects.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Fetch Data in SwiftUI</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Thu, 02 Mar 2023 07:52:39 +0000</pubDate>
      <link>https://dev.to/robycigar/how-to-fetch-data-in-swiftui-2d1d</link>
      <guid>https://dev.to/robycigar/how-to-fetch-data-in-swiftui-2d1d</guid>
      <description>&lt;p&gt;Fetching data from an API in SwiftUI can be done using the URLSession class provided by the Swift standard library. Here's an example of how to fetch data from an API and display it in a SwiftUI view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import SwiftUI

struct ContentView: View {
    @State private var data: [Post] = []

    var body: some View {
        List(data, id: \.id) { post in
            VStack(alignment: .leading) {
                Text(post.title)
                Text(post.body)
                    .font(.subheadline)
                    .foregroundColor(.secondary)
            }
        }
        .onAppear {
            fetchData()
        }
    }

    func fetchData() {
        guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return }

        URLSession.shared.dataTask(with: url) { data, response, error in
            guard let data = data else { return }
            do {
                let posts = try JSONDecoder().decode([Post].self, from: data)
                DispatchQueue.main.async {
                    self.data = posts
                }
            } catch {
                print(error.localizedDescription)
            }
        }.resume()
    }
}

struct Post: Codable {
    let id: Int
    let title: String
    let body: String
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, a List is used to display the data fetched from the API. The @State property wrapper is used to store the fetched data as a property of the view. The onAppear modifier is used to trigger the fetchData() method when the view appears.&lt;/p&gt;

&lt;p&gt;The fetchData() method uses URLSession.shared.dataTask(with:completionHandler:) to fetch data from the API. The fetched data is then decoded using JSONDecoder() and stored in the data property using the DispatchQueue.main.async method to ensure that the UI is updated on the main thread.&lt;/p&gt;

&lt;p&gt;Note that in this example, the Post struct conforms to the Codable protocol, which allows it to be decoded from JSON data using the JSONDecoder() class provided by the Swift standard library. If the API returns data in a different format, you may need to use a different decoding method or update the Post struct to match the data format.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Install C++ Language Server on VIM</title>
      <dc:creator>Roby Cigar</dc:creator>
      <pubDate>Wed, 11 May 2022 12:57:26 +0000</pubDate>
      <link>https://dev.to/robycigar/how-to-install-c-language-server-on-vim-44c7</link>
      <guid>https://dev.to/robycigar/how-to-install-c-language-server-on-vim-44c7</guid>
      <description>&lt;p&gt;In this tutorial i'll show you how to install language server on vim/nvim.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Firstly, you need to install the ccls
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sudo pacman -S ccls&lt;/code&gt; or &lt;code&gt;sudo apt install ccls&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install coc.nvim
&lt;/h3&gt;

&lt;p&gt;Inside vim config(put this following line inside &lt;code&gt;.vimrc&lt;/code&gt; or &lt;code&gt;~/.config/nvim/init.vim&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plug 'neoclide/coc.nvim', {'branch': 'release'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Set coc.nvim configuration
&lt;/h3&gt;

&lt;p&gt;Open vim, go to insert mode(press esc) and type &lt;code&gt;:CocConfig&lt;/code&gt;, then a popup file will be shown and then copy paste the following script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"languageserver": {
  "ccls": {
    "command": "ccls",
    "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"],
    "rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"],
    "initializationOptions": {
        "cache": {
          "directory": "/tmp/ccls"
        }
      }
  }
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Here's some of the features you can try:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tab for completion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt; to choose first completion item&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gd&lt;/code&gt; to jump to definition&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gr&lt;/code&gt; for references&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gy&lt;/code&gt; for type definition&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;K&lt;/code&gt; for documentation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;leader&amp;gt;rn&lt;/code&gt; for renaming&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;ic&lt;/code&gt; for func/class selection in visual mode&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;space&amp;gt;a&lt;/code&gt; to list diagnostics&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[g and ]g&lt;/code&gt; to go prev/next in diagnostics&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
