糖糖发烧了,好担心
Tag 琐碎, on by view 82

糖糖昨天下午开始就发烧了,晚上喝了布洛芬退烧了,半夜2点又发烧了,爸爸妈妈外婆起来给糖糖吃退烧药和物理降温,今天一早又发烧了,温度高的时候有39度。一早妈妈请假,外婆和妈妈带糖糖去儿童医院看病,爸爸去公司上班。

爸爸现在完全无心工作,看病回来下午这会儿糖糖又发烧了。再加上公司的事情,昨天凌晨手欠在公司某系统评论了某事,一早被领导diss了,心情真是糟糟的,烦烦的,真是手欠,半夜两点还关心公司的事情,更欠的事情是还顺手评论了某事。

希望糖糖能够早日康复,健康快乐成长。公司的事情该忙的还是要继续忙,吃一堑长一智,谨行慎言。


矛盾
Tag 情感, on by view 583

已经结婚快要2年了,娃也已经开始整天“babababa”的咿呀学语了。

休完产假刚上班,工作上的事情并不太多,挺闲的。所以就上网刷知乎玩儿。最近刷到几个问题,“爸爸能爱女儿到什么程度?”,大概就是这样的问题,主题在表现爸爸对女儿的爱。刷了挺多答案的,看到了各种各样爸爸疼女儿的回答。每个回答都是满满的爱,虽然都各有各的可爱,每个故事都可爱的与别人不同。

想到了娃爸,似乎没有网上那样,难道这就是说的别人家的爸爸?难道我糖以后也只能看着别人家的爸爸然后满满羡慕?每次想到这里都很替我糖抱不平,会找娃爸抱怨几句。

但是回头想一想,其实娃爸也很爱臭糖,从来都想要把最好的给她,从来都愿意惯着她的小脾气(别看小小一个人,还穿纸尿裤,甚至还不会爬,但是小脾气绝对是足足的)。比如臭糖要吃奶睡觉觉,比如臭糖要抱抱不肯自己做着玩,比如臭糖要人陪着不肯自己呆着,比如臭糖睡觉觉的时候要把腿放在我身上,比如臭糖吃奶睡觉觉的时候大脚丫子使劲在我身上蹬,等等等等这些时候。她爸都会说,哎呀你糖喜欢这样就让她这样嘛。嗯,反正折腾的都是麻麻,不是爸爸!手动白眼。

这么说来,似乎糖爸对糖的爱也很假,都不是需要他付出的他就很慷慨,是不是这样?老实说,心里有时候也是这样觉得的。可是看着糖爸的眼睛,又知道他其实是真的很爱糖。

其实糖爸很信任我,他只是将我当成了他最放心的人,将他心里最重要的部分交给了我,并认为我一定能照顾好他最爱的人。

所以,我想他是爱我的,很爱我。不然,如何敢将自己最脆弱的部分完全依靠在我身上。虽然有时候又会突然怀疑他是不是像别人口中的渣男一样,并没有我想的那么伟大,只是单纯的不在乎我和糖。不过静下心来,我还是选择相信我的男人。

即便心里偶尔很矛盾。偶尔不平衡。



对gin应用基于TCP窗口的流量控制
Tag gin, tcp, 窗口, 流量控制, on by view 1600

TCP可以基于滑动窗口进行流量控制,使用setsockopt系统调用实现,可以限定客户端或者服务端连接的入网或出网流量,http是基于TCP协议的,因此http也可以基于TCP滑动窗口实现流量控制。golang自有的net包不支持server端TCP窗口设置,因此无法直接实现基于TCP窗口的流量控制。今天我们要对一个基于gin实现的微服务进行流量限制。

首先,gin自带的r.Run()启动的http肯定是不行的,然后http包中的http.ListenAndServer()也是不行的,那么我们就基于TCP来实现,但是golang得net包中的net.Listen()也是不行的。这时候我们只有调用底层的系统调用了(不是cgo),我们可以使用syscall包来实现系统调用。我们分为五步:创建socket,设置socket选项,绑定端口地址,转换为golang的listener,listen。

  • 创建原生的socket

s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM|syscall.SOCK_NONBLOCK|syscall.SOCK_CLOEXEC, 0)
if err != nil {
    log.Println("create socket failed, err:", err.Error())
    return
}
  • 设置socket选项

// set receive buffer here
err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_RCVBUF, 2350)
if err != nil {
    log.Println("set socket option receive buffer failed, err:", err.Error())
    return
}

// set send buffer here
err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_SNDBUF, 2450)
if err != nil {
    log.Println("set socket option send buffer failed, err:", err.Error())
    return
}
  • 绑定端口地址

err = syscall.Bind(s, &syscall.SockaddrInet4{Port: 8099, Addr: inetAddr("192.168.31.11")})
if err != nil {
    log.Println("bind socket failed, err:", err.Error())
    return
}
  • 转换为golang的listener

f := os.NewFile(uintptr(s), "")
ln, err := net.FileListener(f)
if err != nil {
    log.Println("create listener failed, err:", err.Error())
    return
}
  • listen

err = syscall.Listen(s, 0)
if err != nil {
    log.Println("listen failed, err:", err.Error())
    return
}

最后我们把我们自定义的支持限流的listener应用于gin上

r := gin.Default()

r.GET("/", func(context *gin.Context) {
    context.File("socket")
})

err = http.Serve(ln, r)
if err != nil {
    log.Println("create http server failed, err:", err.Error())
    return
}

一个支持限流的http server就此实现。


将caffemodel编译为movidius的graph模型
Tag caffe,model,movidius, on by view 1815

首先需要安装ncsdk, 去movidius官网下载 https://developer.movidius.com/start 

mkdir -p ~/workspace
cd ~/workspace
wget https://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk-01_12_00_01-full/ncsdk-1.12.00.01.tar.gz
tar xvf ncsdk-1.12.00.01.tar.gz
cd ncsdk-1.12.00.01
make install

安装完毕后可以调用mvNCCompile进行编译

mvNCCompile ./deploy.prototxt -w ./resnet_50_1by2_nsfw.caffemodel -s 12 -0 ./nsfw.graph

若是遇到编译失败

mvNCCompile v02.00, Copyright @ Movidius Ltd 2016

Error importing caffe

请设定环境变量后重试

export PYTHONPATH=/opt/movidius/caffe/python:$PYTHONPATH

编译成功后会生成 msfw.graph 文件,接下来可以使用 movidius 和 graph 模型进行推导了。


幸福的孤独者
Tag 散文, on by view 2072

人,一旦进入天命之年后就意味着进入了孤独期。尤其是独生子女家庭。记得二十几年前,父亲常常喊:“兵伢,来,来坐哈?”那时无知的我面对老父的招呼,显出明显的不耐烦,甚至冷漠,无动于衷。那时我是多么的冷酷自私呀!为什么那时我心中就没有一丝的对老人的怜悯或同情呢?其实我内心是非常悲悯老父老母的,只是自己不愿表露而已。我不想因为自己的“行孝而招来弟兄之间更深的仇隙”。这就是事实的症结,别人的不孝姑且不论,人在做天在看!我心底的内疚从没有消失过,时至今天他还让自己难安。就让自已在时间中慢慢讦悔吧!那时,而且那时父亲已经身患重病:老血栓。父亲在喊叫几遍无应后,他就孤独地喃喃自语地拖着垂暮之年的病弱之躯慢慢地走入他那低矮的老房子……

当时我为什么心中有恁大的抵触情绪呢?根源还是因为弟兄之间的不和。这不和的根源多是由老人的厚此薄彼引起的,当时自己为什么就过不了自己心魔那道坎呢?归根结底还是自已太自私了。现在父亲走了十一年,母亲也走了三年,我们也进入了天命之年还多五的光景,幸运的是我们还在工作还能工作!虽然如此,空闲时就感觉日子中似乎少了点什么?那就是孩子不在身边的空虚!这时自已就常常于寂寞中感受到“孤独的可怕”!是的,父辈们的“今天就是我们的明天。”“我的今天就是父亲的昨天”啊!我这不孝之子,现在终于体味到当年父亲为什么老是喊我陪他坐坐……?啊!往事堪追忆?可是这后悔能改变一切吗?能回到当年吗?能让自己重新“行孝”吗?俱往矣!现在我终于懂得了父亲当年常对我唠叨的“养儿方知父母恩”是什么意思!“寂寞使人孤独,孤独使人易老”。我现在感受到“寂寞的可怕”,或者这是“上天对自己的警告吧”!我有个和协美满的家,可是一家几囗常年在外工作,儿子儿媳他们就是把全年的假期算在内,在家住的时间也没有一个月?我现在能要求他在家陪陪我们吗?笑话!这是不可能的。当年父亲不就是这样要求我吗?可是当年父亲求孩子在身边陪坐几十分钟的愿望就变成了奢侈?唉!现在我们的孩子他为了自己的发展跑到天涯海角去打拼,如果想孩子就默默地盯住天空飞来飞去的银色机冀吧!说不定那架飞机内就坐着自己的小子呢!



golang客户端取消http请求
Tag golang, cancelable, http, on by view 2397

首先,创建带有Cancel Context的http请求

var cx context.Context
cx, req.cancel = context.WithCancel(context.Background())

if req.httpreq, err = http.NewRequest(req.method, req.url, reqbody); err != nil {
    return
}
req.httpreq = req.httpreq.WithContext(cx)
req.httpreq.Header = req.Headers
req.httpreq.ContentLength = reqbodyLength

然后,需要停止请求的时候调用req.cancel()方法

if req.cancel != nil {
    req.cancel()
    fmt.Println("running cancel...")
}

return nil

这样才能够客户端强行主动取消正在进行的http连接。就是这么简单


下一页