【转】TortoiseGit 2.4.0.2引入了一个新的BUG,导致无法提交,提示“fatal: protocol error: bad line length character: Welc”

今天(2017.02.27TortoiseGit 2.4.0发布了一个Hotfix来修正几个BUG,网站上的具体的版本信息如下:

2017-02-25 | Released TortoiseGit Hotfix 2.4.0.2 (fixes issue #2909 (Commit dialog unclosable) and issue #2911 (Add returns “invalid path”) and contains PuTTY 0.68)

但是这次的修复引入了更大的BUG,导致无法提交代码,不管是拉取还是提交代码,都会提示”fatal: protocol error: bad line length character: Welc“,如下图:

修复这个问题最简单的方法就是还原到TortoiseGit 2.4.0版本。

这个BUG是由TortoiseGitPlink.exe里面的代码改动引起的,只要还原这个文件到0.67版本(来自TortoiseGit 2.4.0),也可以解决这个问题。

目前已经提交了BUG给开发人员了。对于的BUG链接地址如下:
TortoiseGit 2.4.0.2 bug ( TortoiseGit 2.4.0 works but TortoiseGit 2.4.0.2 can not pull and push) “fatal: protocol error: bad line length character: Welc”

希望能尽快修复这个问题吧!

到目前为止(2017.05.09)这个问题依旧没有修复的可能,因此建议大家可以改用一下SourceTree-2.0.20.1,可以点击这里下载目前最新的版本。


PS:可以直接点击这里下载0.67版本的plink.exe。

PPS:SourceTree高版本也有这个问题,解决方案是一样的。(最终笔者还是换成了OpenSSH。)

【转】Git LFS的使用

转载自:Git LFS的使用


还没使用git之前,二进制文件和源代码分成两块,分别存放到不同的svn仓库上(防止二进制文件中有病毒感染服务器,所以做了这种隔离)。
现在公司已经切换到git上进行版本管理了,那么就可以使用git lfs来管理这些二进制文件,这样就可以让源码和二进制文件和谐共存于一处,从而不像以前那样,需要分别做两次更新。

Git LFS的简单理解

LFS其实是git的一个扩展,并没有改变git的工作方式,有点像耍了个小花招,把指定需要lfs管理的文件替换成了一个指针文件交给git进行版本管理;
在pull/push等这些操作中,lfs又通过lfs服务器把这些文件的真身给下载或上传回来;
通过这样的手段,使得本地仓库的体积大大减小,而不会出现随着这些文件的版本增多而体积剧烈膨胀的情况;
个人觉得这种把存储负担转移给了服务器的做法,是不是有违git去中心化的理念,毕竟lfs这样做其实算是强依赖于这个lfs服务器了,本地仓库并不是一个完整的仓库 继续阅读【转】Git LFS的使用

Java 和 Kotlin

Ivony:

1.几乎所有的程序设计语言都是和库绑定的。

2.一个优秀的程序设计语言不在于他有多少语法元素和特性,而在于这个语言的语法元素是否符合直觉。更进一步的就是是否符合你的直觉。符合直觉,或者说你的直觉和语言设计者的口味一致的语言,不单用起来爽,学起来也快。

圆胖肿:

1.Java在一大堆通用编程语言中,特性最少,关键字最少,符号最少,也就是说,Java是学习门槛和难度最低的通用编程语言。

Akiyama Mio:

1.Kotlin并没有不火,但也没有大火,一直都是不温不火的状态,我个人的判断是将来可能还会继续不温不火,或者是慢牛状态。

2.Kotlin会大火吗? 如果没有Flutter的话,我认为会,现在有了Flutter,可以跨Android和iOS平台,还可以编译web和桌面版二进制,多平台GUI通吃且体验一致,对于开发者来说简直没有理由不使用Flutter啊,所以个人认为Flutter会逐渐挤压和蚕食一部分原生Android开发的市场份额。

Zhao Jun:

不可否认Kotlin在安卓开发领域做得不错,但是Kotlin相对Java在后端开发领域优势不大。

1.Kotlin的空安全语法跟现有Java库之间的互动不是很平滑,问号、双惊叹号出现频率比较高。

2.Kotlin不需要处理checked exception,会导致很多潜在问题不能在编译期被发现和处理,直接进入产品环境。

3.类里面不能定义static field比如log对象,想要的话得弄companion object有点多此一举。

4.开发环境的各种小问题,如idea经常卡住特别是Java跟Kotlin混合使用的情况。影响团队生产效率。对于有洁癖的程序员来说,一个项目混合使用两种后端语言一言难尽。


参考链接:

Kotlin语言现在怎么不火了? – Ivony的回答 – 知乎

Kotlin语言现在怎么不火了? – 圆胖肿的回答 – 知乎

Kotlin语言现在怎么不火了? – Akiyama Mio的回答 – 知乎

Kotlin语言现在怎么不火了? – Zhao Jun的回答 – 知乎

Android模拟器实现串口通信调试

Android模拟器实现串口通信调试

Android模拟器挂载虚拟串口进行通信之踩坑记

使用AndroidStudio自带模拟器挂载串口不能接收超过8字节的数据


注:使用AndroidStudio自带的模拟器,发送8字节以内的数据是ok的,一旦超过8字节模拟器就会挂掉,后来使用了Genymotion模拟器,这个问题就没有了。

【转】modbus协议中的线圈、寄存器等的解释

转载自:modbus协议中的线圈、寄存器等的解释


公司业务需要,用到modbus协议,本质上很简单,只是第一次接触,被这些词语搞得云里雾里的。这里整理一下,方便以后查询:

0x01: 读线圈寄存器

0x02: 读离散输入寄存器

0x03: 读保持寄存器

0x04: 读输入寄存器

0x05: 写单个线圈寄存器

0x06: 写单个保持寄存器

0x0f: 写多个线圈寄存器

0x10: 写多个保持寄存器

如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。

线圈寄存器:实际上就可以类比为开关量(继电器状态),每一个bit对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f

离散输入寄存器:如果线圈寄存器理解了这个自然也明白了。离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02

保持寄存器:这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。一般对应参数设置,比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写,所以功能码有对应的三个:0x03 0x06 0x10

输入寄存器:这个和保持寄存器类似,但是也是只支持读而不能写,一般是读取各种实时数据。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值。对应的功能码也就一个 0x04

Cocos Creator Shader Effect

Cocos Creator Shader Effect 系列 – 0 – 前言

Cocos Creator Shader Effect 系列 – 1 – 材质,Effect,Inspector,纹理之间的关系

Cocos Creator Shader Effect 系列 – 2 – Effect 文件解读

Cocos Creator Shader Effect 系列 – 3 – Effect 文件调试

Cocos Creator Shader Effect 系列 – 4 – 老照片特效

Cocos Creator Shader Effect 系列 – 5 – 马赛克/像素化特效

Cocos Creator Shader Effect 系列 – 6 – 内发光特效

Cocos Creator Shader Effect 系列 – 7 – 点光/扫光特效

Cocos Creator Shader Effect 系列 – 8 – 高斯模糊