存档

‘IT’ 分类的存档

golang cgo编译问题与坑

2014年11月26日 没有评论

golang这个语言最大的好处就是和c结合得非常好,非常方便与c互相调用。虽然其他语言也可以调用c的库,但是调用没有golang这个语言这么方便。其实想讲,golang就是现代版的c语言。

首先golang如何调用c的库,文档写得比较清楚。请参照文档cgo编译cgo命令。这个看来之后基本就大概明白了。而且讲解了一些基本的类型转换。例如string的转换等。不过真实使用的时候,会用到char**的。这个问题如何解决。stackoverflow上有解,请自行观看。

看完这些问题,大家觉得是不是就没有问题。我也是这样想的,不过真实的时候就遇到一个非常恼火的问题。就是golang对格式的一些严格要求。

问题来源,在调试cgo的程序的时候。发觉本来调试好的程序,后来也没有改什么,突然编译不了。找了很久也没有找出原因。由于是测试代码,没有放入代码管理,回滚不了。看来看去也没有看出什么问题。最后只能从最开始重新编写这个代码。最后发现是一个空行引发的血案。悲哀啊,搞了我大半天。

看下边的代码吧:

package main

/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lclibrary

#include "clibrary.h"

int callOnMeGo_cgo(int in); // Forward declaration.
*/
import "C"  //这里不能与上边注释的c代码有任何空行。

import (
        "fmt"
        "unsafe"
)

//export callOnMeGo
func callOnMeGo(in int) int {
        fmt.Printf("Go.callOnMeGo(): called with arg = %d\n", in)
        return in + 1
}

func main() {
        fmt.Printf("Go.main(): calling C function with callback to us\n")
        C.some_c_func((C.callback_fcn)(unsafe.Pointer(C.callOnMeGo_cgo)))
}

大家可以尝试在import “C”上边插入空行。你就发现会不能编译了。真是不太明白golang为什么搞怎么严格的格式检查。真的服了它了。多一个空行而已。

还有一个问题是,目前我使用cgo与ffmpeg的库进行编译,经常出现编译问题。但是重新编译多一次就成功了。也搞不懂什么原因。

Bookmark and Share
分类: IT, 编程 标签: , , ,

迁移Blog到DigitalOcean的VPS

2014年7月22日 没有评论

终于把blog迁移到DigitalOcean VPS了。离开了使用了6年的hostmonster。离开的原因主要有两个:

1、hostmonster的虚拟主机服务太贵了,最然你在主页看到它的价钱好吸引,当时当你续费的的时候什么优惠都没有了。我2008年注册第一年使用的时候费用是101.4美金左右,包括一个独立的ip,送一个域名。之后就是每年137.40美元。最气的是旧年开始又升价了。涨到159.84。其实我旧年就想转到VPS了,因为这个价钱直逼VPS。不过去年我对DigitalOcean不太了解,只了解Linode,当时Linode最低只有20元美元/月。加上上年续费的时候没有空搞迁移。当时就想下年一定要迁移。所以今年就提早就准备了迁移。这次选择了DigitalOcean,原因其实好简单,最低资费是5美元/月。我想这个配置足够我用了,就是想升级也比较简单。而Linode最低也只有10美元/月。DigitalOcean的口碑也非常不错。

2、VPS的可玩性比起虚拟主机大好多。虽然国外的虚拟主机服务还不错,有SSH登陆等。不过还是不如VPS的自我控制性那么好。自己想怎样就怎样。不过所有东西都需要自己设置安装。不过DigitalOcean 都提供不少的教程帮助。

现在把迁移工作大概写下来,看看对其他朋友看看是否有帮助。

1、在DigitalOcean注册账号,并新建立一个Droplets,你可以选择你需要的机器配置,我目前选择了最低的配置,机房位置我选择了San Francisco 1.(听讲这个机房的速度在国内访问都不错)。系统我就选择了Ubuntu的14.04裸系统。其实你可以选择一些安装好应用的系统。不过我还是选择自己安装。

2、对服务器进行安全配置,不用担心DigitalOcean有教程给你,你按照他的步骤就可以了。

a)初始化你的服务器,包括添加账号,更改ssh端口等。Initial Server Setup with Ubuntu 14.04

b)安装failbban软件,防止ssh被暴力破解。   How To Protect SSH with fail2ban on Ubuntu 12.04 

c)安装LEMP环境,即安装Nginx,MySql,PHP  How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 14.04

d)安装phpMyAdmin。 How To Install phpMyAdmin on a LEMP server

e)安装wordpress。 How To Install WordPress with nginx on Ubuntu 12.04 (其实我并没有安装这里的步骤来安装wordpress,因为我是迁移旧的。)其实迁移也好简单。把原有的wordpress目录直接通过scp拷贝到新的机器。并把旧的数据库导出到文件。然后在新这边的数据库进行导入就可以了。

3、就是域名的迁移与DNS配置了。域名我也迁移了,因为hostmonster不是专业的域名管理公司,而且收费也比较贵。不过DigitalOcean并没有提供域名托管,不过有免费的DNS服务。我这次选择了namecheap的服务。其实域名服务商大家的费用都差不了多少,就是睇网站的服务。这个也没有太多去考虑,都不知道什么原因选择了namecheap的服务。可能他的网站做得漂亮一点。不过登陆后内部设置的网页也是丑到不得了。反正这个一年也操作不了几次。

域名迁移工作都是全自动的,只要你提供一下域名,和那个什么转移code。就可以了,操作不是很人性化,小小反人类,。不过会发一份邮件到你注册域名的邮箱,你需要在邮箱点击确认连接。转移都要预计1-3天的时间。我实际用了1天的时间。

迁移完域名后,就更改DNS服务商。namecheap提供免费的DNS服务。这些安步骤操作就可以了。没有难度的。另外DigitalOcean也提供DNS服务。

 

另外大家可以通过这个连接进行注册DigitalOcean注册可以有$10优惠,需要充值后才有哦。不是注册就有。DigitalOcean的营销比较病毒式。不过大家都好。

Bookmark and Share
分类: IT 标签:

Macbook pro 313更换SSD,吐槽Time Machine。

2014年5月26日 没有评论

更换SSD工作在大半年前已经完成。在更换SSD之前做了一个测试,结果惊人的低,我平时用机的确感到比较慢,比起新安装系统的时候慢,虽然别人都说Mac机不用整理磁盘的。而且磁盘速度也是不会约用约慢的。不过结果告诉我们事实是相反的。后来上网搜索了一下,速度不降低是有条件的。

DiskSpeedTest

阅读全文…

Bookmark and Share
分类: IT, 生活 标签:

在redhat6上安装gitlab

2014年3月12日 没有评论

由于公司需要搭建一个代码服务器,我当然选择了Git啦,不过如果只是安装Git的话,缺少了web界面去管理这个Git代码库,所以选择了Gitlab。不过Gitlab的官方安装指引只有ubuntu。我在ubuntu安装的时候没有遇到任何问题。不过在redhat6上安装就遇到较多的问题。所以在此记录一下,方便后人。讲真,为了安装这个代码服务器前前后后折腾了差不多成个星期,从成本效益来说,还不如去使用第三方的服务,例如,githut、bitbucket,或者国内的一些类似的服务商。还免维护。不过老板最终决定自己搭建。老细永远是对的。那就只能做。

由于文章我从markdown编辑器Mou copy过来的,可能在wordpress排版有点问题,大家将就看吧。

在github上找到一篇装教程 https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos

在安装前先看看注意事项。

阅读全文…

Bookmark and Share
分类: IT, 编程 标签: , ,

使用xcode去开发makefile的project(Building Makefile Projects With Xcode)

2014年2月19日 2 条评论

最近的工作方向又发生了变化,暂时放下IOS的开发。不过业余时间还是会继续研究IOS和MAC的原生程序开发的。这次又走回以前的伤疤–视频。希望这次可以成功。以前在视频这块搞左好多年。但是产品没有出来,最终已失败告终。这次一定要把产品搞出来。要不然以后都不再接触视频这一块。

言归正传,由于需要搞视频这一块,又需要重回到C/C++的大家庭。又需要解决开发环境的问题。经过多放面的考察和选择,暂定选择了xcode为开发环境,这2-3年都是使用xcode作为开发环境。一是熟悉。而且xcode有插件配置成VI的编辑模式。而且在mac属于POSIX系统。mac与linux的跨平台运行应该问题不大。可以在mac上进行测试与调试。最后再在linux测试。应该不会有太大的问题。不需要在开发的时候老是开着虚拟机。

使用xcode会存在一个问题,如何与编译现有的开源软件或者将来编写的程序进行跨平台编译。不过xcode还是比较强大的。支持makefile编译。具体如何做,请看官方说明。说明比较清晰。不过我还是来一篇图文说明,并把我遇到的问题给大家说明一下。省得大家走弯路。使用的是xcode 5。并使用一个流媒体的的开源软件Live555作为说明(live555这个软件下载解压后需要运行./genMakefiles macosx生成makefile)。

1、新建项目,选择Command Line Tool。(其实选择其他都可以,不过千万别选择External build system ,因为如果选择了这个,将会失去智能提示与定义跳转)。

Screen Shot 2014-02-18 at 5.24.04 PM

Screen Shot 2014-02-19 at 11.21.37 AM

阅读全文…

Bookmark and Share
分类: IT, 编程 标签: , , , ,

2013 AirPort Time Capsule备份大小设置及实用感受。

2013年11月28日 3 条评论

买左2013版本的AirPort Time Capsule有3个月时间了,最近这几天才在上边设置Time Machine备份,Time Machine的备份是非常霸道的,没有设置最大备份空间的。会把整个分区都占满的。在Time Capsule也不例外,移动硬盘可以专门划分一个分区给Time Machine,这样可以有效控制备份的大小。不过Time Capsule是不能划分分区的,Time Machine会慢慢把整个空间都填满。不过Time Machine是通过在Time Capsule上生成一个sparsebundle的磁盘影像文件进行备份的。可以通过这个sparsebundle文件进行做手脚,从而达到控制备份的大少。
在网络上找到好几种方法,不过发觉都不行。
1、修改Time Machine的配置文件,以控制大小。(不过这种方法在10.7以后的系统已经不支持了。)
2、自己生成sparsebundle这个文件。网络教授的方法是通过网络的mac地址生成sparsebundle文件,不过现在Time Machine生成的文件已经不带mac地址了。
3、Time Machine自动生成文件,然后删除分区,重新分区。或者重新调整分区大小。
这种方法会出现下边的提示
自上次备份后,备份磁盘““daozhao”的“AirPort 基站””的标识已更改。

该磁盘可能已被更换或抹掉,或者有人可能正尝试诱骗您的电脑备份到错误的磁盘。

阅读全文…

Bookmark and Share
分类: IT, 生活 标签:

ios5与ios6的屏幕旋转的差异

2013年5月3日 没有评论

ios5和6在屏幕的选择方面做了不少的修改。主要是取消了几个api的函数。
– didAnimateFirstHalfOfRotationToInterfaceOrientation: Deprecated in iOS 5.0
– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: Deprecated in iOS 5.0
– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: Deprecated in iOS 5.0

– shouldAutorotateToInterfaceOrientation: Deprecated in iOS 6.0
剩余:
– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:
剩余这几个函数。平时的项目一般用系统旋转后自动对齐功能,大部分都可以满足需求。这次修改一个项目,tableview在旋转后cell需要加载不同的xib文件,于是重载didRotateFromInterfaceOrientation,不过发现系统并没有调用这个函数。想了一下,估计是tableviewController并不是rootviewControlller。而且是放在其他第三方的ViewController内,估计是第三方ViewController没有使用addChildViewController把tableViewController放入其子controller。查看了一下代码。发现估计是正确的。但是不太想修改这个第三方的ViewController。因为嵌套了2个第三方的ViewController,要修改起来会比较麻烦。
想了想使用注册旋转事件来处理这个需求。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) 
name:@"UIDeviceOrientationDidChangeNotification" object:nil];
 
- (void)didRotate:(NSNotification *)notification
{
 
NSLog(@"didRotate:。---interFaceOrientation:%d,DeviceOrientation:%d",
        self.interfaceOrientation,[[UIDevice currentDevice] orientation]);
//[self.tableView reloadData];
}

阅读全文…

Bookmark and Share
分类: IT, 编程 标签: , , , , ,

准备研究node.js

2013年4月3日 没有评论

node.js—使用javascript开发后台程序,这东西一直对它都有误解,我一路都以为它是给前端的朋友玩玩后台的玩具。

直到早几天看到一个报道《LinkedIn从Rails迁移到Node:服务器减少27台,速度提升了20倍》(注:由30台减少到3台),才开始去认真了解node.js这个新玩意。发觉这个玩具非常强大。

对node.js的误解可能是由于一些对这个node.js的介绍都是介绍它是一个使用javascript的开发后台的解析器。其实node.js是一个基于事件驱动开发的服务器组件,,javascript只不过是这个组件的粘合剂。node.js是一种开发模式,是一种编程思想。其实它不一定选择javascript作为开发语言,可以选择lua,或者一种全新的语言。据说作者初期做的时候选择过使用lua的,不过速度不是很理想。选择javascript主要是因为google的javascript V8引擎速度超快,再加上javascript的闭包特性比较适合这种事件驱动开发模式和面向过程的语言。

现在讲讲我为什么对node.js有一种强烈的愿望去研究它。

1、node.js开发的产品吞吐量大,符合现在一些高并发的需求。而且比较方便扩展到分布式的应用。

2、我比较喜欢这种事件驱动模型的编程方式,以前搞tcp通信程序的时候我都是选择这种事件驱动方式去处理。虽然这种异步编程的复杂度比同步编程方式复杂些,但是这种复杂度比起多线程同步的处理还是方便很多。出错机会小很多,特别死锁这些情况很难在开发的时候发现的问题。

3、虽然我个人很喜欢c语言,但是使用c语言开发成本实在太贵了。加上有时候开发一些应用服务使用c语言也不合适。我觉得c比较适合在底层通信和网络通信部分用c是一个好选择,其它开发还是别用c比较好。node.js就是使用c来开发最底层的东西,例如:tcp通信通信。其余用脚本来处理。这样可以大大降低开发成本,需要速度快的地方可以用c/c++来来处理。既有开发速度又有运行速度。

4、我希望在我一个项目中编写一个爬虫服务。使用node.js可以方便地嵌入jquery。jquery的选择器对于爬虫服务抽取数据非常方便。不过目前发现node.js的html分析器都是直接用javascript编写的。可能性能不是特别好。希望可以把webkit的dom解析器嵌入node.js就强了,还可以适应一些不太标准的网页,例如一些闭合标签不完整的网页。

5、研究node.js的源码,希望将来可以参照它,把V8 javascript引擎引入在IOS开发中,提高一些ios程序的灵活性。虽然现在一些游戏框架使用lua来实现。不过我感觉用javascript实现会比Lua好。

6、还有一点,node.js比较简洁,轻量级结构。核心只包含最基本的库。其他通过插件扩充。这样学习成本比较底,同时拥有超强的扩充能力。

这里提一提Erlang,这个语言同样是一个面向高并发,和面向过程的语言。去年这个时候也花费了一些时间学习了。不过现在已经忘记七七八八了,只是记得它的编程思想,方式,方法。语法那些都忘记了。加上Erlang这个语言加上OTP的组件过于庞大。需要化好多时间才可以深入。不过它比起node.js的确强很多。但是node.js简单得多了。非常符合make it sample的原则。

Bookmark and Share
分类: 编程 标签: , , ,

发布一个ios的组件,4格菜单

2013年4月2日 没有评论

最近下载了一个应用“布丁电影”,发觉它的菜单效果好好睇。于是就仿造了一个。操作上也改造了一下,区别不大。

代码托管在GitHub上,欢迎大家下载使用。

支持IOS6.X IOS5.X , xcode  4.6,使用ARC。

Bookmark and Share
分类: IT, 编程 标签: ,

今天google reader被判死刑。7月进行处决。

2013年3月14日 没有评论

今天google reader被判死刑。7月进行处决。听到这个消息后,感觉google切底地变了。不作恶,真tmd的狗屁。乔布斯讲得没有错,google的不作恶口号,就是狗屁。上次在google GAE服务把免费时间大幅减少,我已经吐槽过一次了。这次真的要认真思考以后是否继续使用google的服务了。

google reader是我每天必修课。每天都会在itouch,ipad上用byline扫描RSS.每天在上边花费的时间超过1小时。上边订阅的RSS源超过200个。如果没有google reader是否有影响,我估计还有3个月的期限。找代替的方案应该会有的。不过可能会没有那么方便。

由于google这个巨人,所以好多人围绕着它的api开发了好多应用。例如一些rss阅读器基本上都使用google reader为接口,方便不同设备之间同步。

大家尽量逃离google服务把。其实我最早以前是用抓虾的rss服务的。由于出现过一段时期不稳定,也听说它会倒闭。所以我转用google reader。当时转用google reader最大的原因是因为它老爸是google,相信这个服务不会倒闭。最多被墙。今天睇来我是错的。

大家尽量逃离google服务把。我从今以后都不会向别人推荐google的服务了,也号召大家远离google服务。目前除搜索业务没有很好的代替品,其他的项目都有其他很好的代替品。我自己也不使用他新推的服务,起码不会把重要数据存储在google上边。那些什么google存储千万别用。等你存储上当数据的时候就告诉你要收费,不交钱,你的数据就没有了。tmd,tmd。

目前我还是gmail的用户,好怕有一天这个强大的gmail告诉我要关闭或者收费了。要计划好gmail逃亡路线了。大家一起逃离go ogle把,尽快逃离,让google死去把。

Bookmark and Share
分类: IT 标签: ,