Hacks on Computer Vision

golang中json科学计数法的问题

昨天线上一个golang写的模块遇到了下面这个问题:

strconv.ParseUint: parsing "%!d(float64=1.46949287e+08)": invalid syntax

这个模块会从MCQ中读取json格式的消息并解析处理,显然上面这个问题是解析数字出错了~

一般使用golang解析json数据时,在不知道具体数据格式时,可以先把数据解析为map[string]interface{},然后再从中取出本次处理需要的数据,步骤如下:

msg := make(map[string]interface{})

if err := json.Unmarshal(b, &msg); err != nil {
    // 处理错误
    return
}

if _, exist := msg["id"]; !exist {
    // 没有我们需要的字段
    return
}

id, ok := msg["id"].(float64)
if !ok {
    // 我们需要的字段不是数字
    return
}

这么做的好处是:当修改了json消息的结构时,只要后续处理的逻辑没变,这段代码就不需要修改。

......

caffe syncedmem 源码简析

最近想把caffe简化一下,于是又开始了看源码。刚看完了syncedmem的代码,写个总结记录一下~

从名字看,syncedmem是内存同步相关的功能,即数据从内存到GPU显存的同步。

syncedmem.hpp文件中,有下面这两个内联函数,简单的对mallocfree内存做了封装:

inline void CaffeMallocHost(void** ptr, size_t size) {
  *ptr = malloc(size);
}

inline void CaffeFreeHost(void* ptr) {
  free(ptr);
}

从注释上看,作者原想也封装在GPU的内存,但在使用 cuda 5.0 时遇到些问题,就简单这样处理。

......

基于nginx-rtmp-module的视频点播小试

前几天基于nginx-rtmp-module做了个测试HTTP Live Streaming的小demo,主要是为了测试在单个m3u8文件中包含同一个视频不同码率的切片流的运行情况,简单记录一下。

多码率的m3u8简介

根据苹果官网的描述,使用多码流HLS的主要好处有下面几点:

  • 当播放其中一个码率的视频遇到404错误时,客户端可以直接跳转到其他的码率;
  • 客户端可以根据自己的网络条件选择合适码率的视频播放。

要支持多码率视频,其m3u8文件可以这么做:

......

树莓派安装小记

去年从 v2ex 上收了一个树莓派,但一直放在那吃灰,今天闲来无事,拿出来折腾了一把。

在SD卡上安装raspbian系统

安装系统是比较简单的,下载好系统后,直接使用 dd 命令即可。

sudo dd bs=1m if=raspbian.img of=/dev/diskn

其中把diskn换成对应的SD卡位置即可。

扩展 raspbian 的系统容量

......

2015总结

一转眼2015已经到了最后一天了,回顾这一年,幸福多过难过,工作之余,抽空简单写个流水做个总结,给自己留一份回忆。

1-4月份,简单的忙碌着

1月份接了一份翻译的活,但春节前一直忙着工作的事,并没有怎么翻译。于是过完春节后就开始了废寝忘食的翻译工作:早上6点半起床,洗漱完毕后就开始翻译,一直到8点,然后上班,晚上下班后,随便做点饭吃,一般从8点半翻译到11点半,一共持续了一个多月,一个字一个字的敲出来,一共也快10w字了。翻译完后,距离提交时间还有一周时间,就又整体过了一遍,修改了一些错别字。老实讲,翻译真的是很累啊,看的懂是一回事,写的通是另一回事。这也导致我今年很少翻译技术文章了,汗!!

翻译完后没多久,就搬家了,从三环路上直接跑到了五环外。每日半个小时左右的公交,感觉也还可以。

四月中,被高中同学拉到北科大,参加了他们的一个创业分享活动。今年创业热嘛!听着在坐的各位分享着自己做的东西,挺新鲜的。轮到我,我简单讲了下自己的一些想法,并没有创业的打算,但想自己做点好玩的东西,仅此而已。后来又陆陆续续参加了几次,和一些创业的人交流,也随势High了一把,然后就没有然后了,哈哈哈。。

......