Skip to content

Instantly share code, notes, and snippets.

View lam0819's full-sized avatar
💭
Busy

Alan Lam lam0819

💭
Busy
View GitHub Profile
@lam0819
lam0819 / ChineseSlugGenerator.php
Created June 12, 2025 07:50
Chinese Slug Generator
<?php
class ChineseSlugGenerator {
public static function generate($text, $maxLength = 50) {
// Method 1: Try ICU transliterator (best option)
if (function_exists('transliterator_transliterate')) {
$slug = self::useTransliterator($text);
if ($slug && strlen($slug) > 0) {
return self::limitLength($slug, $maxLength);
@lam0819
lam0819 / CustomWebView.tsx
Created May 19, 2025 04:39
React Native Interact with Webview
// CustomWebView.tsx (Simplified Conceptual Outline)
import React, { forwardRef, useImperativeHandle, useRef, useState, useMemo, useEffect } from 'react';
import { ActivityIndicator, Platform, StyleSheet, View, ViewStyle } from 'react-native';
import WebView, { WebViewProps, WebViewMessageEvent, WebViewNavigation } from 'react-native-webview';
import DeviceInfo from 'react-native-device-info'; // Can be kept if generally useful (e.g. for version header)
// Default JavaScript bridge injected into the WebView
const DEFAULT_BASE_INJECTED_JAVASCRIPT = `
// Create a namespace to avoid polluting the global window object too much
window.ReactNativeWebViewBridge = {
@lam0819
lam0819 / GPSTracker.js
Last active February 3, 2025 10:30
GPSTracker
class GPSTracker {
constructor(gpsData = [], geofenceBounds = null, requirements = { minDistance: 1, minSpeed: 5 }) {
this.gpsData = gpsData;
this.geofenceBounds = geofenceBounds;
this.requirements = requirements;
}
// Haversine 距离计算
static haversine(lat1, lng1, lat2, lng2) {
const R = 6371e3; // 地球半径(米)
(function(modules) {
'use strict';
window.Translate = modules[0];
//Translate.BindObj('btnId', '繁', '以繁體中文查看内容');
})([
{
strJT : '啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗
@lam0819
lam0819 / PanOverview.php
Last active October 17, 2024 17:40
A simple filamentphp Widget for pan package https://github.com/panphp/pan
<?php
namespace App\Livewire;
use Filament\Forms\Get;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Checkbox;
@lam0819
lam0819 / chunking-regex.ts
Created August 15, 2024 04:59 — forked from hanxiao/testRegex.js
Use regex to do chunking by using all semantic cues
// Used in https://jina.ai/tokenizer (Aug. 14th version)
// Define variables for magic numbers
const MAX_HEADING_LENGTH = 6;
const MAX_HEADING_CONTENT_LENGTH = 200;
const MAX_HEADING_UNDERLINE_LENGTH = 200;
const MAX_HTML_HEADING_ATTRIBUTES_LENGTH = 100;
const MAX_LIST_ITEM_LENGTH = 200;
const MAX_NESTED_LIST_ITEMS = 5;
const MAX_LIST_INDENT_SPACES = 7;
const MAX_BLOCKQUOTE_LINE_LENGTH = 200;
@lam0819
lam0819 / sentry-docker-compose.yaml
Created August 29, 2022 15:52
Self host Sentry Docker compose
x-restart-policy: &restart_policy
restart: unless-stopped
x-depends_on-healthy: &depends_on-healthy
condition: service_healthy
x-depends_on-default: &depends_on-default
condition: service_started
x-healthcheck-defaults: &healthcheck_defaults
# Avoid setting the interval too small, as docker uses much more CPU than one would expect.
# Related issues:
# https://github.com/moby/moby/issues/39102
@lam0819
lam0819 / tooltips.blade.php
Last active April 9, 2021 14:36
Tooltips : tailwindcss + alpinejs
<div class="relative flex items-center" x-data="{ tooltip : false}" >
<svg x-on:mouseover="tooltip = true" x-on:mouseleave="tooltip = false" class="cursor-pointer w-5 h-5 text-red-primary" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
</svg>
<div x-cloak x-show.transition.origin.top="tooltip" class="absolute bottom-0 flex flex-col mb-3 w-auto min-w-max">
<span class="relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-red-primary shadow-lg rounded">{{ $text }}</span>
<svg class="w-6 h-6 -translate-y-2 -translate-x-1 z-10 text-red-primary transform fill-current stroke-current" width="8" height="8">
<rect x="12" y="-10" width="8" height="8" transform="rotate(45)" />
</svg>
@lam0819
lam0819 / web.php
Created March 24, 2021 02:47
Simple Clear Cache in Laravel route
Route::get('/clear-cache', function() {
Artisan::call('cache:clear');
return "Cache is cleared";
});