坑开的有点多了
吐槽
又过了很长时间没写博客了
这次真不是因为懒
各种忙
然后还不小心开了几个大坑
近期做过的事:
先是帮go-zh翻译了一个package(只有几行的翻译量,结果还各种不准确,几乎都是minux纠正过来的)
一旦下载超大文件就会直接挂掉,是因为线程分配的问题(直接平均分配给每个线程,所以缓冲区会爆掉),但是也懒得改了。要是有人发现了,发个issue可能会给我点动力
然后又为了给coding.net的PaaS弄个Dart的Buildpack
用着电信的渣出口从google code拖了1.7G的源码,编译了最新的Dart SDK
又因为各种原因以及buildpack原作者的脚本有些许问题,弄了2天才下载好了完整的源码
简直生不如死
关键是,最后部署的时候,才想起来dart的包管理网站 被!墙!了!
于是所有的package都要预先下载好再改包管理路径然后全部提交到git
又涉及到了协议什么的一大堆东西,果断还是弃坑不维护了
在用go写一些小程序的时候需要用到图形界面。而go的ui库我基本都用遍了
缺点大致如下(部分问题可能有解决方法,如果知道还请留言告诉我哈):
- 绘制界面时太啰嗦(go-qt5啦什么的,要一个一个创建控件,再一个一个弄框框套进去)
- 不够灵活(ui在绘制表格的时候是用反射获取的struct里变量的命名来做标题的,中文直接跪)
- 还是不够灵活(go-qml的依赖对我来说太复杂,又懒得弄安装包)
- 自定义控件麻烦(qml的话要么放在路径下,要么扔到默认文件夹里,关键是每个控件都要一个文件)
于是!
就开始写一个用node-webkit做框架的ui库了
用html+js做控件,然后可以自定义css,前后端通信用websocket
依赖只有一个nwjs,基本什么平台都可以用
然后支持很方便的自定义控件(只要实现一个方法即可,会自动用反射来调用),以及写一个自定义控件的教程(计划中)
来一段例子:
var w *Window
w = &Window{
Title: "window",
Width: 800,
Height: 600,
Controls: []interface{}{
&Button{
ID: "btn0",
Text: "button",
OnClick: func() {
println(GetConByID("btn0").(*Button).Text)
},
},
&Button{
ID: "btn1",
Text: "button",
},
},
}
w.Show()
当然这个库还只是写了个框架(就是说上面说的大部分功能都还没实现(别激动别激动))
控件什么的也只写了一个按钮和一个自定义窗口边框来做演示
上张图(实际运行截图):
然后就在这货刚写完框架之后
我又开了个坑(因为Stepladder在长链接下会有几率始终占满一个CPU线程的使用率(具体触发原因不明),然后因为是tcp所以延迟什么的还比较大)
于是准备重写个基于udp的
在github上翻了一遍发现这货https://github.com/skywind3000/kcp
以浪费10%流量为代价换取更低的延迟?
貌似不错
还有人弄了个go版本的https://github.com/vzex/dog-tunnel
就是里面的ikcp,貌似是直接用的c2go转换的,所以编码风格还是有点奇怪
c版本的源码协议是GPL,但是这个是转换的所以貌似可以不用?
总之拖了一份到本地,然后修改了一下编码风格
这货就诞生了https://github.com/go-ukcp/ukcp(里面的ikcp文件夹)
只是把编码风格转换了一下,然后ukcp本来是想封装一下的
但是因为发送端的判断什么的(还要传给kcp所以识别很麻烦),就又弃坑了……
(不过里面的ikcp还是可以单独拿出来用用的)
当然还不能放弃,开始自己封装一个udphttps://github.com/iovxw/rudp
然后嘛……现在为止还没写完
就这么多了,坑还是慢慢填吧