golang 类型转换的陷阱

今天在调试索引色图片的时候,使用golang碰到一个很奇怪的事情, 代码如下:


var pal_data []byte //调色板数据
var img_data []byte //图像数据
new_img := image.NewRGBA(image.Rect(0, 0, Width, Height))
for x:=0; x < len(img_data); x++ {
  v := img_data&#91;x&#93;
  if(v == 106) {
    vv:=106
    fmt.Println("V1=",v,",C={",pal_data&#91;vv*3+2&#93;,",",pal_data&#91;vv*3+1&#93;, ",",pal_data&#91;vv*3&#93;, "}")
    fmt.Println("V2=",v,",C={",pal_data&#91;v*3+2&#93;,",",pal_data&#91;v*3+1&#93;, ",",pal_data&#91;v*3&#93;, "}")
  }
}

&#91;/sourcecode&#93;

<p> 我特别提取了一个索引值106,结果发现打印出来的颜色值是不同的,使用vv这个指定变量的值是正确的, 另外一个却是错误的。 </p>

<p> 我一开始以为是优化的问题,然后取消了所有优化,发现结果还是不同的。 </p>

<p> 程序没有任何警告之类的,除了结果是错误的,其他的都正常。 </p>

<p> 直到我修改成下面的样子: </p>



v := img_data[x]*3
if(v == 106*3) 

在其他语言中,最多会有个警告,在golang中,直接报错了:

constant 318 overflows byte

…. 使用golang 的语法糖果然是需要代价的,当v:=img_data[x]的时候,v的类型是byte,标示范围为 0-255,然后v*3还是个byte,计算结果标示的范围还是0-255,并不会自动转换为容量更大的short或者int, 所以计算到最后还是个byte, 远远没办法访问所有的调色板数据了。

所以将v:=img_data[x]修改喂v:=int(img_data[x])就没问题了

类型很重要,当使用简单写法的时候尤其需要注意。

独白

我曾经以为,自己是花朵,很久之后才明白,原来只是泥泞中的杂草。

越过长城,通向世界,曾经的愿望多么美好,现实不断的敲打着道德的底线。

曾经以为生活在花园中,现实却让我发现原来在荒漠中,每个人都像荒漠中的种子,在等待上帝不经意间洒下的眼泪,为了生存,互相倾轧, 只为在那眼泪中,或者生根发芽传播种子,或者宣告自己的死亡。

曾经认为知识改变命运,最终只不过发现,知识只是给种子带上了小小的降落伞。在荒漠中,一阵风飘来,我便迎风飘扬,风停后,我只能 随遇而安,或者涅槃,或者死亡。最终,不过一颗种子,于荒漠,或许还不如一颗沙子。

不要把自己看的那么重要,不要把别人想的那么高尚,不要轻视种子的力量,不要忽略绿洲的希望。

如果原谅意味着遗忘,如果谅解意味着死亡,我愿意带着仇恨永生,绝不愿意带着遗憾苟活,那些发生的事情,那些恶毒的人们,我一个也 不会原谅,一个也不会遗忘

而我已经忘却了太多,是我太过善良,亦或这世界给我的打击太多?

我差点忘记github的密码

这段时间在研究godot的android侧的源代码的时候,发现GDScript调用java代码各种不方便。

  1. 通过android/modules的方式,传递和返回的参数只能是基本类型
  2. 通过JavaClassWrapper的方式,查找类这一步就返回有问题了

研究了几天,修改android部分的源代码,解决了上述的问题。实现GDScript基本调用任意Java类和函数, 无论是通过android/modules还是JavaClassWrapper的方式,或者混合调用。结果在登陆github的 时候,多试了几次密码,github不让我重试了。

明天再试试,等可以了试试pull request, 这玩意在github上我还没有用过。

2049

今天看到了一个教育界人士关于2049中国教育的展望,准确而言,我不知道为啥选择2049, 不应该是2048么,或者是说教育100年吧。

如果那个时候,回顾100年前的教育,估计很多人都会发现,那个时代之前的文化人,有自己的见解,有自己的主张,有自己的立场,有特有的执着。

我不知道2049年会怎样,即使不至于尘归尘,土归土,也大约有半截身子在里面了。至于那个时候能否退休,也是未知的事情。但我知道,那个时候, 教育孩子们的,大都或许刚刚出生,或许还未出生。至于现在这批,估计都和我一样了。

知识是需要一代一代传承的,知识同时也是一代一代反驳批判的。上一代的教育,会在下一代身上留下深深的印记。我只希望,那些奴役,那些糟粕, 那些趋炎附势,那些自私利己,可以慢慢的抹去。

有趣的是,我通过观察我自家的小孩,发现几十年前,所谓的知识分子的傲骨,已经变成了软骨,原本应该从社会交往所学的常识,也渐渐的被社会,被学校, 扭曲的不像样子,而大家的小孩却都差不多。当这样的下一代,长大再去教育别人会是什么样的后果,我无从猜测,那个时候,也轮不到我的话语权了。 但却绝不是所谓的中国的标准将是世界的标准,对不起,我还真看不上教育界的中国标准。

希望现在的孩子,未来的孩子,慢慢的明白,为什么要学习,为了什么目的去学习,为此要付出什么样的代价。

PS: 昨天看了一段话,题主问的大致意思是自己从事的行业在国外会有什么样的待遇,有人回答自己在国内三甲医院就职,如果病人不先缴押金则不治疗, 在国外基本上是要坐牢的节奏。上医学院,从医,好像要宣读那个誓言,也要遵守,从另外一个方面理解,从医,首要的条件是高尚的道德,并且要 有捍卫这一道德的坚持。所幸,当初自己没有去学医,我对自己太没信心了,也就不去祸害社会了,即使现在,我也没有信心。

我无法呼吸

最近,由于美国警察的一些作为,一名美国黑人不幸过世。这是很令人悲伤的事情。连我著名发言人都 在一个叫twitter的网站上用英文发言:“I can’t breath”。于是,国内的各种媒体,打鸡血式的 各种爆料,各种批判职责,煽风点火,惟恐美国不乱,惟恐无法证明我国特色的社会主义的优越性。

这完全忽视了我国城管等政府体系的所作所为啊,诚然,爆出来的都总是临时工,所以,我们的政府体系 就永远正确的。这些年,由于非法强拆,收缴摆摊等等,引起的各种不满,各种矛盾,远远不止一个“我无法呼吸”, 而在这种时候,政府体系顾及脸面不说也罢,连这些活跃的媒体却都突然闭上了眼睛,捂起了耳朵,封起了 嘴巴,全都销声匿迹了。

前几天,李克强总理说,我国有6亿人收入每月1000元左右,如果不是从总理口里说出来,估计会被谣言 或者寻衅被抓起来吧。另外一个话题是突然允许摆摊了,去年年底的时候,我路过水果店,城管或者有关 人士,还在要求把稍微露出去一部分的箱子,或者临时放在门口的空箱子,要求整理,要求收回。现在 突然允许摆摊了。这世界实在太魔幻了。来上海这么多年,我一直不太习惯的是,上海晚上10点多大致相当于 空城了,回忆当初上高中时,在我那小城市,夜幕降临下来,才正是很多好玩,好吃的降临的幸福时刻, 一直持续到第二天的天亮。既然都光鲜亮丽了这么多年了,突然来个倒车,真的不适应。

而媒体也纷纷跟进,于是,有人摆摊一天能卖5万多,天,一年1500多万,完全可以新三板上市了。估计 前者夸张太厉害,于是,后来的采访就是每天1000多,但想想别人是下班后的,一个月大约就3万了, 要搁我这,我还上班干嘛,摆一天摊,一个月怎么也得9万了,一年百万收入,距离那个人均几百万的资产 触手可得了。

上面有些丧气了,我承认,有些人摆摊是会挣很多钱,但要认为人人摆摊都可以挣钱,这就是笑话了。 和任何事情一样,绝大部分的人都是赔钱的。但如果允许的话,工厂里生产的很多过剩的东西,会被 摆摊者拿去卖,至于卖不卖的掉,这就没人管了,反正对于生产体系而言,这部分已经卖出去,GDP 也已经加进去了,关键是库存没了。然后摆摊者挣不挣钱估计也是政府不关心的,总之,每个月的摊位 费是免不了的,可能不像店铺那么多,但也可以是按平米折合的,关键是,如果摆摊者倒闭赔钱,这个 费用都是要交的,如果摆摊者退出了,还可以让新的进来,马路也可以挣钱的。另外,还可能有各种 税,各种费,还可以再收一道(摆摊者对于进货渠道而言,就是消费者,各种税,费已经包含在商品价格 中了)。总之,对于政府而言,这是一个稳赚不赔的生意了。

想想那些之前被城管压迫的无法呼吸的卑微的生存者吧,想想那些为捍卫你们可以呼吸而付出身体的 打手们啊,你们对他们欠缺一个合理性的解释。之前因为面子,便是非法的,如今为了生存,便是 合法的,那么,那些之前非法的,是否会有补偿?