涵曦的博客 分享编程的点滴
记录解决scp服务器配置不能使用的问题
Posted by 涵曦 at 2014-12-04 with tags sftp, scp, linux
-
ssh [email protected] 可以进入服务器
-
scp [email protected]:~/t.lua t.lua 失败,无错误提示,无百分比输出。
-
查看/var/log/secure 无明显错误
-
scp [email protected]:~/t.lua t.lua 正常
-
查看/etc/ssh/sshd_config 没异常配置,开始怀疑是sftp的问题
-
执行 sftp [email protected]。出现下面错误
sftp Received message too long 458961715
搜到这个方案
http://prystash.blogspot.com/2009/12/sftp-message-received-message-too-long.html
和这个方案
http://www.linuxquestions.org/questions/slackware-14/sftp-received-message-too-long-887856/
文中提到~/.bashrc的问题。于是查看自己的配置看看。里面有一条命令:
sh /home/develop/2.log
注释该命令。一切正常。
2.log 文件是用来登录时输出欢迎文字的。随后把该命令移到/etc/profile后一切正常。
记录解决sshd服务配置不能使用公钥登录的问题
Posted by 涵曦 at 2014-12-03 with tags sshd, ssh, linux
- 服务查看log
tail -1f /var/log/secure
因为搜索了好多sshd的配置都是一样的,不能解决问题,就想到了查看log显示更确切的报错什么的。
- 客户端执行命令
time scp -v t.lua [email protected]:/home/hlm-devel/t.lua
这句话是搜着搜着找到的。来自这里:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3744661 可以总结出,一般命令都有debug模式,以后出现问题就直接去查找命令的debug参数就是了。
- 查看服务器输出的log
Dec 3 09:49:19 localhost sshd[15272]: Authentication refused: bad ownership or modes for directory /home/hlm-devel
Dec 3 09:49:19 localhost sshd[15272]: Authentication refused: bad ownership or modes for directory /home/hlm-devel
输出了sshd的日志,根据log提示认证拒绝,权限问题,然后就搜 bad ownership or modes for directory 然后就找到了这个 http://blog.itpub.net/137293/viewspace-896312/
到此就解决了ssh公钥登录问题。
Markdown编辑器推荐之Mado
Posted by 涵曦 at 2014-09-21 with tags makdown, 编辑器
Markdown编辑器推荐之Mado
细数我用过的markdown编辑器
- Made
- StackEdit
- Cmd Markdown
- Mou
- haroopad
- ghost
还有一些忘记了名字的,一直在寻找合适的自己的Markdown编辑器。
首先,我需要的Markdown编辑器需要下面的功能:
- 离线编辑
- 轻量级
- 跨平台:linux,mac osx,windows
- 代码高亮
上面我用过的效果最好的是Cmd Markdown,功能丰富,支持好多扩展功能,界面美观,但是不支持离线编辑。
Mou界面也挺好看的,但是只支持mac平台。
haroopad挺不错的,三个平台都齐全,界面也好看,支持代码高亮,缺点是重量级,运行在node-webkit上的,没有其他缺点,而且开源,可是代码在linux和mac上都没运行成功,用了一段时间。
ghost博客自带的那个编辑器试过一次,有一个对于在线编辑器都应该有的功能,就是输入![xxoo]()
后,预览区会转换为一个可点击的空图片区域,然后可以点击上传图片了,上传完毕自动替换编辑区的图片地址。
昨晚在chrome商店找了些markdown编辑器,每个都试了下,找到了Mado这个应用,而且开源,代码量少。最喜欢这种轻量级的。但是代码不支持高亮,只支持最基础的markdown和GFM。看代码那么简洁,估计自己修改不难。
再说说我上星期自己弄的一个简单的markdown编辑器,感觉做的很垃圾,不适合实际应用,只是个玩具,在公司搭建了个http服务,用于在线编辑共享文档。
接下来打算汉化Mado。这么好的编辑器得和更多国人共享啊。
[原创]py+js实现markdown编辑器
Posted by 涵曦 at 2014-09-14 with tags python, js, markdown, 编辑器
借用现成工具
Markdown 是由 John Gruber 和 Aaron Swartz 共同创建的一种轻量级标记语言
showdown.js 是一个 javascript 写的 markdown 渲染库
codemirror 是一款“Online Source Editor”,基于Javascript,短小精悍,实时在线代码高亮显示,他不是某个富文本编辑器的附属产品,他是许多大名鼎鼎的在线代码编辑器的基础库。
python接收上传文件 解析http POST form
python 所做的事情
-
httpd服务器,主要是用于接收ajax请求,做相应的处理,特别是上传图片
-
tohtml.py 批量将md文件转成html,采用Markdown.pl
js 所做的事情
-
md编辑区使用codemirror
-
ajax请求
-
md实时预览使用showdown.js
-
图片上传插件
源码
使用lua表设计简单RPC协议
Posted by 涵曦 at 2014-08-06 with tags lua, c
协议设计
-
协议类型:schema
-
支持类型:int, string, array
-
采用lua table定义协议
p = { name = "hanxi", tel = 1383838, addresslist = { address = "gz", addtype = "work", }, }
p 是定义一个协议格式,其中,addresslist是array类型,定义的内容表示array的元素的格式。协议的实际内容格式如下:
p = { name = "hanxi", tel = 1383838, addresslist = { { address = "gz", addtype = "work", }, { address = "jj", addtype = "home", }, }
协议打包
-
只打包value,key不打包
-
协议模板做预处理,把key排序,添加字段_keysort.
p = { _keysort = {"addresslist","name","tel"}, name = "hanxi", tel = 1383838, addresslist = { _keysort = {"addtype","address"}, address = "gz", addtype = "work", }, }
协议解包
-
根据协议模板,解析协议
-
遍历顺序按照_keysort
实现
在c中提供接口:
luaL_Reg l[] ={ { "packinit", lpackinit }, { "write", lwrite }, { "getpack", lgetpack }, { "unpackinit", lunpackinit }, { "read", lread }, { NULL, NULL }, };
packinit, write, getpack三个函数用于打包协议
unpackinit, read 两个函数用于解包协议
-
打包int时分64位,32位,16位,8位。第一个字节存储int位数和正负数标志
-
打包sting时,先存储字符串长度,按int的方式打包,然后打包string
[原创]使用cocos2d-x v3.1开发小游戏(基本框架)
Posted by 涵曦 at 2014-07-15 with tags cocos2d-x, lua, c++
小游戏的组成
-
欢迎界面
在游戏资源未全部加载完之前就需要载入,避免进入游戏会有一段黑屏时间。
可以用来展示游戏名称或者开发者logo。
-
开始菜单界面
一般用于显示游戏名称和关卡选择(或者称游戏难度选择)。
可以外加一些设置性功能,如声音开关,帮助入口等等。
如果游戏设置内容较多可以把设置作为一个单独界面,在开始菜单上提供入口即可。
有的小游戏是以弹窗方式的菜单
-
主游戏界面
游戏的中心部分,比如2048游戏的格子滑动界面,扫雷游戏的扫雷界面,贪吃蛇游戏的蛇移动的界面,等等。
小游戏拥有这一个界面也能算一个小游戏,但是没有其他界面会使游戏缺少更多选择。
游戏的主要逻辑都是在完成这个界面。
-
游戏结束界面
游戏结束一般都会有个分数,用于展示本次游戏得分和历史最高得分对比。
在这个界面上可以添加再玩一次的按钮,让玩家重新玩一次。
大多数小游戏都是以弹窗的方式展示游戏结果。
-
排行榜界面 (可选)
游戏中有分数这个概念就会有排名。
可以是单机的排行榜,也可以是联机的排行榜(需要服务器保存数据)。
排行榜可以促进玩家拿到更高的分数(也是有缺点的,看到其他玩家玩的分数太高了而放弃了)。
cocos2d-x v3.1 lua 框架的使用
-
lua代码结构
src ├── conf.lua # 配置文件,一些不变的配置保存在这里 ├── GameOverScene.lua # 游戏结束的界面 ├── GameScene.lua # 游戏主逻辑界面 ├── HelloScene.lua # 欢迎界面,在这里做资源更新检测 ├── main.lua # 游戏lua脚本的入口 ├── MainMenuScene.lua # 游戏主菜单界面 ├── RankScene.lua # 排行榜界面 └── util.lua # 通用功能函数实现
每个XXOOScene.lua 文件的样子如下:
local XXOOScene = {} XXOOScene.newScene = function () local scene = cc.Scene:create() -- do other XXOO things return scene end return XXOOScene
关于Scene界面跳转,在util中封装一个通用函数用于界面跳转。
function util.toScene(scene) -- 增加一个统一的界面跳转动画 scene = cc.TransitionSlideInR:create(0.5, scene) if cc.Director:getInstance():getRunningScene() then cc.Director:getInstance():replaceScene(scene) else cc.Director:getInstance():runWithScene(scene) end end
main.lua用户进入HelloScene界面
HelloScene = require("src/HelloScene") local function main() cc.FileUtils:getInstance():addSearchResolutionsOrder("src") cc.FileUtils:getInstance():addSearchResolutionsOrder("res") HelloScene.newScene() end local status, msg = xpcall(main, __G__TRACKBACK__) if not status then error(msg) end
-
游戏启动logo的Scene特殊处理
因为加载lua资源需要时间,待所有资源都加载完再创建游戏启动界面会出现启动的时候黑屏。我在1G的安卓机上测试需要5秒才能进入到lua创建的Scene。
解决方案:在 C++ 中创建启动画面,HelloScene.lua中不做创建Scene的操作,直接getRunningScene。
AppDelegate::applicationDidFinishLaunching () { // ... other xxoo things auto scene = Scene::create(); auto s = Director::getInstance()->getWinSize(); auto layer = LayerColor::create(Color4B(255, 255, 255, 255), s.width, s.height); auto logo = Sprite::create("res/logo.png"); layer->addChild(logo); logo->setPosition(Vec2(s.width*0.5,s.height*0.7)); scene->addChild(layer,0); director->runWithScene(scene); // 特殊处理,延迟加载lua(创建好logoScene再加载) auto action = CallFunc::create(startLua); layer->runAction(action); return true; }
-
cocos2d-x v3.1 引擎的精简
起因: 引擎编译完之后发现lib文件相比2.x版本的大了不少。由于是做小游戏,一般都会有用不到的引擎部分,比我我就没用到ui编辑器,所以就想办法不编译ui编辑器部分。
步骤:
- 找到mk文件: $ find . -name “Android.mk”
- 修改mk文件,把与ui编辑器相关的语句注释掉。
- 编译,在编译错误提示中找出还有什么需要注释的代码。我遇到的问题主要是CCB那些。需要在lua_cocos2dx_extension_manual.cpp中把CCB的代码注释。
- CCLuaStack.cpp中也需要注释几个注册函数。
我还精简了物理引擎,刚开始是用到了的,但后面看小游戏用不上就把它也干掉了(大概省下1M)。
-
cocos/scripting/lua-bindings/auto/ 下的文件生成
看README后执行生成命令,遇到了一些问题:
问题1:官方只提供ubuntu 64位的libclang.so文件,在32位机子上跑会报下面这个错误
- LibclangError: libclang.so: wrong ELF class: ELFCLASS64. To provide a path to libclang use Config.set_library_path() or Config.set_library_file().
- 解决方法:在llvm官网下载4.3版本的llvm和clang。编译生成libclang.so.3.4。拷贝到bindings-generator/libclang/下覆盖libclang.so文件。怎么编译的那个博客现在找不到了,步骤大概是:
- clang-3.4.src.tar.gz 和 llvm-3.4.src.tar.gz 。解压,然后把clang目录拷贝到llvm-3.4/tools/下。编译,在llvm-3.4同一个目录下建一个build文件夹,进入到build,执行cmake ../llvm-3.4/CMakeLists.txt
文字描述可能不清晰,目录结构如下:
. -> build | ->llvm-3.4 -> tools -> clang -> CMakeLists.txt |-> CMakeLists.txt
问题2: 找不到头文件,报错出现unkown type name ,原因是官方配置的android_headers路径和我电脑上的不一样,主要是gcc的版本,我的是4.8的,官方配置是4.7。如下:
- details = “unknown type name ‘__locale_t’”
- 解决方法:修改cocos2dx.ini中的android_headers 的值把/cxx-stl/gnu-libstdc++/4.7/ 改成/cxx-stl/gnu-libstdc++/4.8/ 。有两个地方要修改。这个问题要看自己的安卓ndk的配置情况,也许你的还是4.6呢,自己可以去ndk对应的路径下找找看自己的ndk版本。
全民顶爆菊花
应用宝:http://android.myapp.com/myapp/detail.htm?apkName=com.hanxi.runtodie