Skip to content

Instantly share code, notes, and snippets.

View haoflynet's full-sized avatar
🤔
Puzzled

haofly haoflynet

🤔
Puzzled
View GitHub Profile
@haoflynet
haoflynet / BCConvert.java
Last active October 19, 2020 02:31
Java DFA sensitive words filter Java实现的敏感词过滤(支持停顿词/重复词/全半角/字符串替换,改进https://www.jb51.net/article/128990.htm)
package com.haofly.net.sensitiveword;
public class BCConvert {
/**
* ASCII表中可见字符从!开始,偏移位值为33(Decimal)
*/
static final char DBC_CHAR_START = 33; // 半角!
@haoflynet
haoflynet / LaravelCustomSoftDeletes.php
Last active September 14, 2018 07:18
替换Laravel deleted_at为NULL的默认行为,使deleted_at不能为NULL
<?php
/**
* 覆盖Laravel默认的SoftDeletingScope,用于替换软删除的默认行为,解决deleted_at必须为NULL的问题,为NULL的时候不能设置唯一键
* 即默认是whereNull更改为判断timestamp的0值,即'0000-00-00 00:00:00'(空字符串在某些数据库版本也是可以的,但是考虑到兼容性还是写全吧),以使deleted_at字段不为NULL
* 使用时只需要把之前Model中的`use SoftDeletes`替换为`use LaravelCustomSoftDeletes`即可
* 请自行替换本文件中的部分命名空间
*/
namespace Common;
@haoflynet
haoflynet / graphene-sqlalchemy-example
Created August 14, 2018 09:33
graphene-sqlalchemy使用示例,教程见https://haofly.net/python-graphql
import graphene
from graphene import String
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
from promise import Promise
from promise.dataloader import DataLoader
from sqlalchemy import Column, BigInteger, ForeignKey
from sqlalchemy.orm import relationship
from db import Base, db_session # 这里自己去定义
@haoflynet
haoflynet / qiniu_sync.py
Created June 28, 2018 00:04
qiniu-for-static-web-hosting 同步文件夹至七牛云
from qiniu import Auth, put_file, etag, urlsafe_base64_encode, BucketManager
from typing import List, Dict
import os
from qiniu import build_batch_delete
class Sync:
"""
同步目录至七牛云
import re
def mycmp(version1, version2):
def normalize(v):
return [int(x) for x in re.sub(r'(\.0+)*$','', v).split(".")]
return cmp(normalize(version1), normalize(version2))
if __name__ == '__main__':
assert mycmp("1", "1") == 0
assert mycmp("2.1", "2.2") < 0
# coding: utf-8
# author: haofly
#
# fun: 生成随机姓名、随机电话号码、随机字符串,目前仅支持Python2
import random
def generateName(first_len=0, last_len=0):
surnames = [
window.onload=function(){
var mobileAgent = new Array("iphone", "ipod", "ipad", "android", "mobile", "blackberry", "webos", "incognito", "webmate", "bada", "nokia", "lg", "ucweb", "skyfire");
var browser = navigator.userAgent.toLowerCase();
for (var i=0; i<mobileAgent.length; i++){
if (browser.indexOf(mobileAgent[i])!=-1){
alert(mobileAgent[i]);
break;
}
}
}