Skip to content

Instantly share code, notes, and snippets.

@hscstudio
hscstudio / index.js
Created March 11, 2022 09:01
NodeJS Digital Signature
const signer = require('node-signpdf').default
const fs = require('fs')
const { plainAddPlaceholder } = require('node-signpdf/dist/helpers');
const pdfSignedPath = `./signed.pdf`;
const pdfBuffer = fs.readFileSync(`./source.pdf`);
const certBuffer = fs.readFileSync(`./certificate.p12`);
let inputBuffer = plainAddPlaceholder({
pdfBuffer,
const toInt = (string) => parseInt(string) || 0
console.log(
toInt(null), // 0
toInt(undefined), // 0
toInt(NaN), // 0
toInt(""), // 0
toInt({}), // 0
toInt(0), // 0
toInt([]), // 0
@hscstudio
hscstudio / progress-online-exam-app.md
Last active August 26, 2020 10:30
Progress Aplikasi Ujian Online

PROGRESS

BY TABLE

  • assignments (penugasan pengguna)
  • categories (kategori pertanyaan)
  • organizations (unit)
  • packages (paket soal)
  • program (program ujian)
  • questions (bank soal)
  • schedules (jadwal ujian + paket soal setiap peserta)
import React from 'react'
import { useHistory, useParams } from 'react-router-dom'
import Axios from 'axios'
const getProduct = async (productId, callback) => {
try {
const response = await Axios.get(`http://localhost:3000/product/${productId}`)
console.log(response)
callback(response.data)
} catch (error) {
@hscstudio
hscstudio / simple-queue.js
Created July 14, 2020 11:18
Simple Queue with ExpressJS
const express = require('express')
const bodyParser = require('body-parser')
const methodOverride = require('method-override')
const app = express()
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }))
app.use(bodyParser.json({limit: '50mb'}))
app.use(methodOverride())
app.use((err, req, res, next) => {
@hscstudio
hscstudio / adonis-rbac.md
Last active December 13, 2023 18:27
Implementasi Role Base Access Control (RBAC) di AdonisJS

Implementasi Role Base Access Control (RBAC) di AdonisJS

Buat field role (String) pada tabel user

Untuk menentukan role dari user, misalnya apakah di administrator, staff, member, dll

Buat middelware: app/Middleware/Rbac.js

class Rbac {
@hscstudio
hscstudio / Resize.sh
Created April 27, 2020 12:07
Batch Resize Image Imagick
find . \( -iname "*.jpg" -o -iname "*.png" \) -print0 | \
while read -d $'\0' -r image; do
convert $image -resize '500>' $image;
read w h < <(sips -g pixelWidth -g pixelHeight "$image" | \
awk '/Width:/{w=$2} /Height:/{h=$2} END{print w " " h}')
echo $image $w $h
done
@hscstudio
hscstudio / ListUser.js
Created April 20, 2020 09:04
Pattern Call Data Pada React Hooks
import React from 'react'
const getUsers = async (callback) => {
// call api
// dummy response
const response = {
status: 'success',
message: 'get data user success',
data: [
{id: 1, name: 'AAA'},
class Check {
constructor(value) {
this.value = value
this.result = false
}
match(pattern) {
const patterns = {
alpha: /^[a-z\s]+$/i,
alnum: /^[a-z0-9\s]+$/i,
-- phpMyAdmin SQL Dump
-- version 4.7.7
-- https://www.phpmyadmin.net/
--
-- Host: mysql
-- Generation Time: Jul 26, 2018 at 07:44 AM
-- Server version: 5.7.21
-- PHP Version: 7.1.9
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";