创建项目
本例子基于Grunt构建
如果,你用过grunt,要创建一个node-webkit 非常简单,我已经写好了一个node-webkit的grunt-init的项目模板. 至于怎么安装这个模板,跟官方的教程一样. 如果你是windows 用户
md %USERPROFILE%.grunt-init\node-webkit
git clone git@github:youxiachai/grunt-init-node-webkit.git %USERPROFILE%.grunt-init\node-webkit
linux or mac
git clone git@github.com:youxiachai/grunt-init-node-webkit.git ~/.grunt-init/node-webkit
你只需要用
grunt-init node-webkit
就可以创建完毕.
app.nw 这个目录就是我们准备要开始写的pc 客户端的项目文件夹,运行node-webkit项目很简单,只需要把node-webkit 的运行环境配置到环境变量,然后运行
nw app.nw 就可以运行起来了. nodewebkit1
PS: 如果你不想接触grunt,不过我建议还是学一下grunt,你可以到github/rogerwang/node-webkit#quick-start 学习如何启动一个node-webkit应用.
效果图
oscdesk1
oscdesk2
这个就是所谓的 win 8 风格的客户端了吧....界面用的框架是这货:aozora.github.io/bootmetro/ 90% 的时间都是调整界面...蛋疼死了......连个 win8 风格的progress 都没..让我非常伤心..也可能是alpha 的原因吧. 不过最后的效果,还是很难看,就凑合着过去吧....
开发
基于node-webkit 开发pc 客户端语言支持 c/c++,html5,css3, js,node api.好了,现在我们开始用html 5 + css3 写一个pc 客户端吧. node-webkit本质就是一个可以跑node 的浏览器,所以,我们用web 开发的技巧来开发pc 客户端毫无问题.
首先,打开toolbar,在package.json文件里面有个toolbar的参数,设置为true即可,就会见到如下图所示:
toolbar
点击那个三横线的按钮,一个chrome 风的调试窗口就出来了.
console
开发的时候,我们修改完文件,并不需要重新运行程序来看结果,我们,可以直接点击左边的刷新按钮即可看到我们修改的运行结果.用node-webkit开发客户端是不是很方便了!
那么接下来,要开发一个oschina pc 客户端,我们只需要知道,相关api 就行了,从android 客户端源码里面可以得到相关api...具体代码在app/model/oschinaApi.js 文件里面.
node-webkit,已经吧相关的安全限制已经去掉,所以说,用node-webkit开发pc客户端,用webkit 发的请求不受同源限制. 用node-webkit 开发一些restful 应用是非常舒服的事情,只要有个不错的界面.关于node-webkit的东西也就这么些了,剩下的就是web 开发,不在本文node-webkit范围内,所以就不再啰嗦..
如果你想应聘Linux运维工程师,那么你就要有一份相对应的简历,下面是我为你整理的linux运维工程师简历模板,希望对你有用!
linux运维工程师简历模板一
基本信息
姓 名:张某某 性别:男
婚姻状况:未婚 民族:汉
户 籍:广西 年龄:27
现所在地:浙江-杭州 身高:1.76
联系电话:
电子邮箱:
求职意向
职位类型:全职
期望月薪:面议
期望地点:浙江省-杭州 ,广东省-深圳
期望职位:linux运维工程师 网络工程师/管理员 IT
意向概述:希望从事linux服务器维护与网络硬件相关方面的工作……
工作经历/社会实践经历
时间 工作单位 职务
2011年7月 - 2011年11月 浙江台升实业有限公司 硬件维护科网络工程师
2010年7月 - 2010年9月 中国联通宜州分公司 网络产品销售员与实际上门 *** 作员
教育背景
毕业院校:广西河池学院
最高学历:本科 毕业日期:2012-07
所学专业:网络工程
校内奖励
获得时间 获得奖项 学校
2010年12月 汉字录入一等奖 河池学院
2010年9月 优秀共青团员 河池学院
校内职务
担任时间 职务名称 学校
2011年1月 - 2012年7月 班级与个人入党联系人 河池学院
证书
1、计算机技术与软件专业技术资格(水平)考试-网络工程师认证
2、全国大学英语四级
3、全国普通话2乙
职业技能特长
1、熟练掌握windows server2007各种服务器搭建与管理。
2、熟练掌握inux 各种服务器搭建与管理。
3、具有扎实的CCNA 网络水平,现在正在学习NP。
自我评价
勤奋,踏实, 网络基础扎实,乐观开朗,具有团队合作精神。
linux运维工程师简历模板二
个人信息
目前所在:广州年龄:26
户口所在:湖南国籍:中国
婚姻状况:未婚民族:汉族
求职意向
人才类型:普通求职
应聘职位:计算机软件:,it-品管、技术支持及其它:,运维工程师
工作年限:3 职称:中级
求职类型:全职 可到职日期:一个星期
月薪要求:5000--8000 希望工作地区:广州,,
工作经历
广州新科佳都科技有限公司 起止年月:XX-04 ~ XX-04
公司性质:私营企业所属行业:计算机服务(系统、数据服务,维修)
担任职位:运维工程师
工作描述:1、负责地铁afc系统产品的工程项目实施,软件维护,新软件测试升级等工作。
2、熟练 *** 作qnx系统(类似于linux),sybase、sql数据库维护,以及软件安装调试。
3、协调处理好业主的需求。
离职原因:
广州爱递思电子科技有限公司 起止年月:XX-07 ~ XX-03
公司性质:私营企业所属行业:电子技术/半导体/集成电路
担任职位:助理工程师
工作描述:1、从事公共广播系统设备的硬件电路设计,样板制作,调试,及软件系统测试等工作。
2、相关设计资料的制作,生产线技术问题跟进。
3、客户技术问题跟进。
离职原因:
教育背景
毕业院校:湖南工业职业技术学院
最高学历:大专获得学位:毕业日期:XX-06
专 业 :电子信息工程专
起始年月终止年月学校(机构)所学专业获得证书证书编号
XX-09XX-06湖南工业职业技术学院电子信息工程大专毕业证-
语言能力
外语:英语 良好粤语水平:一般
其它外语能力:
国语水平:良好
工作能力及其他专长
熟悉电子产品的开发流程,工作原理,构造等知识,以及电子产品的调试,测试等。在之前的工作中,我学会了很多,学会了怎么与人相处,与人沟通交流,增强了工作责任感。有实际动手能力和团体协作精神,能迅速的适应工作环境,并融入其中,展现更好的一面。
详细个人自传
工作责任心强,做事认真有团队合作意识,实践能力强。我相信,只要有信心,有好学的心态,坚持不懈,就能成功! 路漫漫其修远兮,吾将上下而求索!
linux运维工程师简历模板三
个人信息
性别: 男
出生日期: 1991-1
工作年份: 2010
政治面貌: 人民群众
婚姻状况: 未婚
户籍: 张店
现所在地: 张店
目前状态: 待业
联系方式
工作能力
1、熟练安装、调试中高级网络设备(如:[cisco/H3C]交换机、路由器等)组建企业网络。
2、掌握局域网和广域网的各种协议及其配置,例如VLAN、OSPF等,
3、熟练掌握在Windows和Linux/BSD(熟练使用三种以上Linux发行版)两大 *** 作平台下的各种应用服务的安装维护。例如:Web(LAMP/LNMP)、FTP、MySQL Repliction、SVN、CDN等 熟悉ManTis、BugZilla、BugFree等源码系统管理和维护。
4、熟练进行各种网络相关文档的书写,例如:项目实施报告、项目分析报告。
5、有两年服务器维护经验,Windows/Linux/BSD系统加固与安全防护。
6、有两年脚本安全经验,精通WEB攻击/防御技术(不参与违法业务,仅用于保障职责范围内网站的安全),熟悉渗透测试流程。
7、有驾照,可以开车。
8、平易近人,善于学习并接受最新的技术。
求职意向
职位名称 职位分类 期望工作地点 期望工作性质 期望月薪
网络与信息安全工程师 计算机软、硬件/互联网/IT 张店 全职,兼职 2000元至3000元
系统工程师 计算机软、硬件/互联网/IT 张店 全职,兼职 2000元至3000元
最高教育背景
时间: 2008-8至2011-1 学校:西北工业大学网络教育学院
专业: 计算机科学与技术 学历:大专
外语语种: 英语 读写能力: 良好 听说能力: 良好
第二外语语种: 读写能力: 听说能力:
计算机水平: 优秀
工作经历
2010-9-2011-1 企业名称: 深圳市生活信息技术有限公司 职位: 运维工程师
工作描述: 负责公司服务器运维工作,网站&服务器安全。
项目经验
2008-10-2009-2
项目名称: 搭建高可用性的Web服务器 是否属于IT项目: 是
项目中职责: 网站安全架构审核,网站架设。CDN部署。
项目描述: 服务器均是Linux,使用Nginx+PHP+MySQL的架构
CDN &MySQL数据库服务器硬盘用SSD
专业技能
专业技能 技能描述 使用时间 掌握程度
计算机/IT Linux 32个月 优秀
计算机/IT 网络安全管理与维护 24个月 优秀
团队管理经验
公司名称: 山东信息安全小组
业绩描述: 团队创始人之一,目前是团队核心成员之一。
大致目录构建如下:├── uc-config.in : 用来生成配置环境信息的可执行程序
├── uc.pc.in : 用来生成配置环境信息的文件
├── uc.spec.in : 用来产生spec文件
├── autogen.sh : build工具
├── conf : 配置文件目录
├── config.h.in : 一些编译过程中的配置信息
├── configure : 配置工具
├── configure.ac : 形成build以及配置工具的文件
├── data : 数据目录
├── doc : 文档
├── Doxyfile.in : 生成Doxyfile的文件,主要用于doxygen的配置文件
├── include : 外部的头文件,工程内的文件不要放入
├── lib : 外部的库文件,工程内的库不要放入
├── m4 : m4文件
├── scripts : 常使用的一些script,用于运转系统
├── src : 源代码目录
│ ├── xxxMain.cpp : 用于产生xxx的gnome版本的源文件,含有main入口
│ ├── xxx.h : 用于外部开发的xxx接口
│ ├── xxxMain.cpp:用于产生xxx的kde版本,含有kde的main入口
│ ├── common : 普通的头文件
│ │ ├── xxxdef.h : xxx的一般定义
│ │ ├── xxxrst.h : xxx的返回值类型定义
│ │ ├── xxxtypes.h : xxx的类型定义
│ │ ├── common.h : 共用头文件,含有xxxdef.h、xxxrst.h和xxxtypes.h等头文件
│ ├── network : 网络通讯库
│ ├── ui : ui界面库
│ │ ├── gnome : gnome界面库,主要是gtk2的一些界面接口
│ │ ├── kde : kde界面库,主要是qt的一些界面接口
│ └── util : 常用的一些共用库
├── test : 单元测试
│ ├── dotest.cpp : 主要测试入口
│ ├── network
│ ├── template.cpp : 样例模板 cpp 文件
│ ├── template.h : 样例模板 头文件
│ ├── ui
│ │ ├── gnome
│ │ └── kde
│ └── util
└── tools : 常使用的一些工具,用于维护系统
如何编写configure.ac
configure.ac是产生configure以及automake重要文件,一般可以使用autoscan生成,这里就不太详细描述,网上可以google到很多资料。
一般开发人员只需要使用autogen.sh,这个脚本会完成所有的automake以及autoconf的 *** 作,虽然其中m4文件定义的宏非常重要,但是不需要开发人员完全读懂,这里也不是关注的重点,等一步步的完全熟悉了,再过来了解也不迟。
这里项目中默认已经生成好了configure.ac。
如何编译Makefile.am
开发人员重点关注的是Makefile.am,Makefile.am完全和Makefile的语法一样,不过你可以写少量的信息就足够了。
如何编译源文件
这里所指的源文件一般指c/c++源文件,对于java的源文件,我们将ant放入Makefile.am,道理一样。编译源文件一般有两种方式,库文件和可执行文件,而库文件也有两种方式,静态库文件和动态库文件,一般静态库用:
lib_LIBRARIES = libcpthread.a
这种方式表示生成一个静态库,对应的源文件如何写呢?
libcpthread_a_SOURCES = thread.cpp thread.h
当然对于一般头文件可以忽略不写,不过建议写上,因为每个开发者都不是很规范,头文件不仅仅只有申明,有的头文件还会有实现。如果有多个cpp文件生成一个库文件,则全部添加;如果有多个.a文件需要生成,只需要用空格隔开.a文件,相应的源文件对应到.a文件即可,如下所示:
lib_LIBRARIES = libcpthread1.a libcpthread2.a libcpthread2.a
那么动态库该如何写呢?有人肯定会提到
lib_LIBRARIES = libcpthread.so
libcpthread_so_SOURCES = thread.cpp thread.h
不过可惜是错误的,这里顺便提到一个libtool,主要用来生成静态库和动态库的一个工具,不过在autogen.sh工具里面已经包含。正确写法如下:
lib_LTLIBRARIES = libcpthread.la
libcpthread_la_SOURCES = thread.cpp thread.h
有人看到这觉得很奇怪,为什么要生成.la这个文件呢?.la文件内容如下:
# libcpthread.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.5.6 (1.1220.2.95 2004/04/11 05:50:42)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='libcpthread-1.0.0.so.1'
# Names of this library.
library_names='libcpthread-1.0.0.so.1.0.0 libcpthread-1.0.0.so.1 libcpthread.so'
# The name of the static archive.
old_library='libcpthread.a'
# Libraries that this one depends upon.
dependency_libs=' -ldl /usr/lib64/libconfig++.la /usr/lib64/libconfig.la /usr/lib64/libchardet.la /usr/local/lib64/libalog.la -lz /usr/local/lib64/libanet.la -lpthread -lalog'
# Version information for libcpthread.
current=1
age=0
revision=0
# Is this an already installed library?
installed=no
# Should we warn about portability when linking against -modules?
shouldnotlink=no
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/usr/lib'
看到了吧?里面指定了关于静态库和动态库的依赖等一系列的信息,具体还可以参考项目框架设计模式中库公约的部分。
静态文件和动态文件都会在当前目录的.libs下,当然开发者也不需要关注库文件本身,了解在这个路径下即可。
可执行文件如何编译呢?
bin_PROGRAMS = threadpool
threadpool_SOURCES = threadpoolMain.cpp
此处的bin_PROGRAMS会将程序安装到${prefix}路径下,如果不想安装,可以采用:
noinst_PROGRAMS = testthreadpool
threadpool_SOURCES = threadpoolMain.cpp
同理,如果有多个cpp文件生成一个库文件,则全部添加;如果有多个.la文件或者可执行文件需要生成,只需要用空格隔开.a文件,相应的源文件对应到.a文件即可,如下所示:
lib_LTLIBRARIES = libcpthread1.la libcpthread2.la libcpthread2.la
noinst_PROGRAMS = testthreadpool1 testthreadpool2 testthreadpool3
如果库文件或者二进制文件有头文件的申明依赖或追加一些编译选项,则可以使用CFLAGS或CPPFLAGS,如下所示:
threadpool_CPPFLAGS = -I$(top_srcdir)/include/example.h
如果是java源文件,只需要遵循普通makefile写法即可,如:
all: threadpool.jar
.PHONY: threadpool.jar clean
threadpool.jar:
@ant jar
clean:
ant clean
当然,ant需要配置好build.xml哟!
如何连接库
连接库的的时候,同样也会有区分,工程外部的连接需使用LDFLAGS,如下所示:
libcpthread_la_LDFLAGS = -pthread
如果是内部库,我们就直接使用.la文件,这样在选择静态连接或者动态连接的时候,就给开发者很大的空间。值得注意的是,库文件和二进制的内部库连接宏并不相同,表现如下:
libcpthread_la_LIBADD = $(top_srcdir)/src/util/libutil.la
threadpool_LDADD = libcpthread.la
现在编译和连接是否都了解了呢?
非编译的一些开发
当创建一个脚本或配置文件的时候:
make dist
则形成一个.gz的压缩包,但刚才创建的脚本或配置文件并没有加入,于是:
EXTRA_DIST = conf/config.cfg
script/example.sh
即可将脚本或配置文件放入到压缩包中;
若在多层目录上的时候,还可以使用宏SUBDIRS指定内部编译的顺序(包括当前目录),比如:
SUBDIRS = util /
thread /
. /
log
/
common
在编译系统make的时候,会严格按照顺序进行。
提供外部开发
如果工程完成了,别人想使用上面的库文件进行二次开发,该如何做呢?
libcpthreadincludedir = $(includedir)/@PACKAGE_NAME@/util/thread
libcpthreadinclude_HEADERS = thread.h
这样在编译系统make install的时候,会将头文件安装到上面指定的目录下,别人依照上面的build系统继续下面的build了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)