Skip to content

Instantly share code, notes, and snippets.

View ihsangan's full-sized avatar
💬
ingfokan mood buat ngoding

Ihsan ihsangan

💬
ingfokan mood buat ngoding
View GitHub Profile

Keybase proof

I hereby claim:

  • I am ihsangan on github.
  • I am ihsangans (https://keybase.io/ihsangans) on keybase.
  • I have a public key ASDwLPordAgg0m1gJhVkbd0OZlyi2lWV55m4HuB5akUCtQo

To claim this, I am signing this object:

async function handleRequest(request) {
const url = new URL(request.url)
// change the hostname
url.hostname = "example.domain.com"
let req = new Request(url, request)
let response = await fetch(req, {
// RequestInitCfProperties
// see: https://developers.cloudflare.com/workers/runtime-apis/request#requestinitcfproperties
cf: {
minify: { javascript: true, css: true, html: true },
async function handleRequest(request) {
const url = new URL(request.url);
// change the hostname
url.hostname = "rule34.paheal.net";
let req = new Request(url, request);
const response = await fetch(req, {
// RequestInitCfProperties
// see: https://developers.cloudflare.com/workers/runtime-apis/request#requestinitcfproperties
cf: {
minify: {
@ihsangan
ihsangan / index.js
Created March 4, 2022 02:22
How i serve https://www.isan.eu.org/ using Cloudflare Workers and GitHub Pages
async function handleRequest(request) {
let ms = Date.now()
let add = new Date(ms + 604800000)
const url = new URL(request.url)
url.hostname = "ihsangan.github.io"
let req = new Request(url, request)
let response = await fetch(req, {
cf: {
minify: { javascript: true, css: true, html: true },
cacheTtl: 86400,
@ihsangan
ihsangan / index.js
Last active April 30, 2025 11:42
Send email from Workers with MailChannel API
async function readRequestBody(request) {
const { headers } = request;
const contentType = headers.get('content-type') || '';
if (contentType.includes('application/json')) {
return JSON.stringify(await request.json());
} else if (contentType.includes('form')) {
const formData = await request.formData();
const body = {};
for (const entry of formData.entries()) {
body[entry[0]] = entry[1];
@ihsangan
ihsangan / error-404-page-not-found-80s-hacker-theme.markdown
Created May 15, 2022 21:22
Error 404: Page not found – 80s hacker theme
async function AboutMe() {
  const name = 'Muhammad Ihsan';
}
dig NS +additional +trace takeover.us.kg. @208.67.222.222
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15.tuxcare.els1 <<>> NS +additional +trace takeover.us.kg. @208.67.222.222
;; global options: +cmd
.			518400	IN	NS	a.root-servers.net.
.			518400	IN	NS	b.root-servers.net.
.			518400	IN	NS	c.root-servers.net.
.			518400	IN	NS	d.root-servers.net.
.			518400	IN	NS	e.root-servers.net.
.			518400	IN	NS	f.root-servers.net.

Kisah Cinta dengan Vue-chan: Dari Options API hingga Composition API 💚

Masih kuingat hari pertama bertemu Vue-chan di sebuah tech conference. Saat itu aku hanyalah seorang developer yang lelah dengan vanilla JavaScript. Di tengah keramaian, mataku terpaku pada sosoknya yang anggun dengan logo berwarna hijau yang menenangkan. "A-ano... kamu kelihatan bingung. Mau aku ajari cara membuat website yang reactive?" sapanya malu-malu. Hatiku langsung berdebar. Cara bicaranya yang lembut dan dokumentasinya yang begitu jelas membuatku jatuh cinta pada pandangan pertama. Awalnya Vue-chan mengajariku dengan Options API, pendekatan tradisional yang mudah dipahami:

<script>
export default {
    data() {
 return {