存档

‘编程’ 分类的存档

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的库进行编译,经常出现编译问题。但是重新编译多一次就成功了。也搞不懂什么原因。

分类: 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

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

阅读全文…

分类: IT, 编程 标签: , ,

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

2014年2月19日 18 条评论

最近的工作方向又发生了变化,暂时放下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

阅读全文…

分类: 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];
}

阅读全文…

分类: 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的原则。

分类: 编程 标签: , , ,

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

2013年4月2日 没有评论

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

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

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

分类: IT, 编程 标签: ,

庆祝第一个App上线App shop

2013年2月4日 没有评论

第一个App Goflytoday 终于上线app shop了。非常开心。因为第一次,而且是一次审核通过。这个app主要是搜索东南亚一些航空公司的机票搜索对比软件。目前只支持四家航空公司。

airasia
jetstar
tigerairways
cebupacificair

目前这个软件的界面比较丑陋,还需要进行改进。下载地址:http://t.cn/zYyHJqQ

barcode

阅读全文…

分类: IT, 编程 标签: , ,

升级xcode4.5真机调试杯具了!!!

2012年9月30日 2 条评论

昨天更新了xcode4.5,不过杯具发生了。居然不能链接真机调试。
提示信息如下:
Xcode cannot run using the selected device.

Choose a destination with a supported architecture in order to run on this device.

1、怀疑证书有问题。不过检查了很久都没有发现。

2、开始怀疑ios的版本问题。真机的ios版本是ios5.1。xcode4.5是给最新版本的ios6的。不过感觉也不对,以前的xcode版本会提示xcode不支持你现有设备的版本。建议你下载这个版本的ios debug包。但是这次并没有这个提示。
我又用一台4.1版本的设备链接到xcode。这次就提示xcode只支持ios 4.3、5.0、5.1、6.0这几个版本。这次排除了设备的ios版本问题。
这时候只能求助万能的google了。发现解决方案了。http://stackoverflow.com/questions/11673424/xcode-4-4-unable-to-run-project

原来是xcode4.5现在只支持ARM7指令的编译。现有项目设置是同时支持ARM6和ARM7编译。把项目编译选择成只支持ARM7就可以真机调试了。根据帖子讲,xcode4.5编译出来的程序只能运行在ios4.3以上的系统。如果想兼容旧有版本的话需要使用旧版本的xcode编译。(可能还有另外的解决方案,暂时没有去研究)

分类: 编程 标签: , , , ,

Hg代码管理转换Git代码管理-方便xcode使用Git

2012年9月27日 1 条评论

最近搞iphone开发,iphone开发使用xcode是好必然的。虽然有其他开发工具,例如appcode。不过我觉得还是原生的xcode比较好。特别是查看帮助的时候非常方便。加上appcode这个工具是java开发的。运行速度不乐观。还有些开发者是vim+插件,我就真的不想折腾vim+插件。所以我老老实实用xcode。

xcode在在代码管理方面集成了svn和git的。svn现在来算已经是老古董了。所以使用git是必然的。不过公司使用的居然是Hg代码管理。这就真的难为了xcode了。由于xcode不支持Hg。虽然可以用其他图像化Hg软件来进行管理,例如SourceTree(支持Git和Hg)、MacHg。在代码对比与版本对比都没有使用xcode那样直观方便,可以边对比边修改开发。在xcode哪里非常方便查找出某一段代码是什么时候添加上去的。由谁添加的。当时代码提交的注释都会详细显示出来。这个功能非常实用。

现在需要把hg的代码库转换成git的代码库。

转换方式有:

1、一次性转换。把hg的代码库转成git的代码库。以后都用git代码库。

大家可用hg-fast-export 脚本

$ git clone git://repo.or.cz/fast-export.git

不过这个对于我来说不是一个好方面,因为你不能够要求公司以后都改用Git来管理。

2、使用插件把Hg转换成git。服务端为Hg,客户端数据为git的。

找了一下,发觉有一个比较有名的插件Hg-Git mercurial plugin。 不过是服务端是Git,客户端是Hg。与我的需求相反的。虽然在github.com上有几个Git-Hg的插件。当时看了一下说明好像都是在Hg-Git上修改的。而且都是只读单向的。即可以从Hg服务器上clone成Git的代码库,还可以pull新的更新。当是客户端的git代码库有文件修改后是不能push上Hg服务器的。

有点杯具啊。不过我认真研究Hg-Git后。发觉他可以把一个现有的hg项目推送一个空的Git服务。这样又出现一个新希望了。上网再搜索了一下,果然有人和我的想法有点相同。大家请点这里, 我的应用可能比他再复杂一点。

阅读全文…

分类: 编程 标签: , , , ,

我所写的wordpress插件都上存到wordpress.org

2011年12月8日 没有评论

我终于把我所写的wordpress的插件全部都上存到wordpress.org了。我一共制作了4个插件。

我写的插件大家可以在http://wordpress.org/extend/plugins/profile/daozhao下载我写的插件。

Dynamic template field display.

这个插件是我第一个练手的wordpress插件,功能简单。你可以添加多个模板,在编辑文章的时候插入模板,在可视化编写器中集成了插入菜单按钮。在文章或者页面显示的时候会根据模板的设定替换成你需要显示的内容。你可以随时更改模板的内容,而文章的中的模板也会动态修改成你需要显示的内容。

flickr picture backup

该插件主要是对wordpress文章中有外连接到flickr的图片进行备份。以防止flickr停止服务或者更改服务协议,例如禁止外连的时候,可以把wordpress上的文章中的flickr图片链接更改为本地连接。

Geo lightbox

图片已lightbox形式显示,并可以在地图显示拍摄位置(需要有地理信息)。

Add flickr photo with geo tag

这个插件是基于Flickr Photo Album plugin修改的。主要为了配合geo-lightbox使用,插入图片时候顺便把地理信息一并插入其中。

 

dynamic template field display和flickr picture backup我2年前已经发布到wordpress上了。另外两个geo-lightbox和add-flickr-photo-with-geo-tag这两个插件最近才发布到wordpress.org上,主要因为这两插件不是我100%原创的。所以一路都不太好意思发布上wordpress上。不过最近整理资料的时候,想想还是把它们发布吧,开源精神是公开源代码给大家学习和进一步修改。geo-lightbox发布没有几天就过百的下载量了。

分类: IT, 编程 标签: , , , ,