duangsuse::Echo
#bin 然后为了证明我不比 drakeet 差,只是缺少拿来实践的时间, 我分析一下这篇文章《5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码》,然后就睡觉。 当然,至于 Android 那一套,比如异步、Timer、MessageDriven、Android XML、Android Widgets、Resources、Android Gradle Build 集成、库打包、封装、Android Layouts、Views、Paint、Android Layout Animat…
啊今天早上想了一会,发现我还是错了,首先我要改一下输出二进制位的,虽然我知道真的是输出弄反了...(昨天就知道,因为我完全有能力在脑中把循环过程和位移动『可视化』要不然我也没法编程了)
我准备用 Haskell 定义一下
fromBaseN(16)(0xFF)
= digit('F') * 16^0 + digit('F') * 16^1
= 15*16 +15
= 255
第一种方法是取余判定,一次输出两位的数字(本位的,进位的,判断是否还要再进位,然后剩下的 (* base) 递归)
第二种方法比较慢,就是判定是否大于等于 base(可以进位),算出本位的(如果可以进位,本位自然是 0xF),然后减法递归
简而言之,就是(为了方便暂时只支持 16 进制)
如果不用进位,则输出当前位然后加一个
toHex(1024)
= 16 * 64
= (16^2) * 64
= 16*16 * 64
= (需要进位 64 = 16*4) 0x400
我都懒得实现了...
最后就是十六进制转换速算的问题,drakeet 教了大家 10->16 和快速 16->2, 2->16 什么的,当然其实原因就是『16 进制是 2 进制的简单形式』了(我从某本书看的,本频道之前也说过)
大概就是 2^4 = 16... 但是 log2(10) 不是整数不能直接对应,如果这么换算了可以节省手算时间了,至于电子机器怎么算和笔算无关
==
做完了我会开始写(GeekSpec 暂时放一下,我想写点代码)DJson (支持各种流哦,JSE 封装的,包括 Http 的)和 NaiveCat,当然我还是想先写个 Binary Stream Editor 的,,, 支持 byteorder 就可以了,因为 BinaryStreamIO 的状态的确有点多...
大概我会尝试把假期拖到明天中午,这样我就有一天半的时间(足足比别人多放一天半!别人周日早就去上学了,我可以拖到周一中午)
... 计划一直来都是『入不敷出』一样... 宿命吧,啥时候大学(迫真,专科,但是我不虚,因为我可以自学 self-teaching) #China #School #life 🤔🏫
// for atoi啊真垃圾居然改了我半天,虽然开始第一个程序也可以接受... 简单的位运算而已,还没用 lowbit 呢,我开始怀疑人生了
#include <stdlib.h>
// for std io
// 就不用 C++ iostream 了
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
/*inline*/ bool get_i32_bitflag(int32_t x, int8_t bitoffset) {
const int32_t bitselector = 0x01000000; // little endian
return x << bitoffset & bitselector;
}
void print_bits(int32_t x, int8_t count) {
for (int i = 0; i < count; i++) {
if (i %4 ==0 && i !=0) printf(" ");
if (get_i32_bitflag(x, i)) printf("1");
else printf("0");
}
printf("\n");
}
int main(int argc, const char *argv[]) {
if (argc < 2) return -1;
int32_t n = (int32_t) atoi(argv[1]);
print_bits(n, 32);
return 0;
}
我准备用 Haskell 定义一下
fromBaseN, toBaseN 两个函数,使用两种方法fromBaseN 没啥好说的,就是一位一位加而已fromBaseN(16)(0xFF)
= digit('F') * 16^0 + digit('F') * 16^1
= 15*16 +15
= 255
toBaseN 有两种方法,我彻底想通了怎么递归第一种方法是取余判定,一次输出两位的数字(本位的,进位的,判断是否还要再进位,然后剩下的 (* base) 递归)
第二种方法比较慢,就是判定是否大于等于 base(可以进位),算出本位的(如果可以进位,本位自然是 0xF),然后减法递归
简而言之,就是(为了方便暂时只支持 16 进制)
toBaseN' n x d
| x >= (n^d) = "F" : toBaseN' n (x - n^d) (succ d) — carry
| digitChar(x) : "h"
: []
如果要进位,则输出一个当前的最高位(F)然后递归下去如果不用进位,则输出当前位然后加一个
"h"
当然还有一种方法,就是 drakeet 这篇文章教的,就是先算不能进位的余数,然后再去算进多少位,然后再去算进多少位... 好吧,这是笔算法toHex(1024)
= 16 * 64
= (16^2) * 64
= 16*16 * 64
= (需要进位 64 = 16*4) 0x400
我都懒得实现了...
最后就是十六进制转换速算的问题,drakeet 教了大家 10->16 和快速 16->2, 2->16 什么的,当然其实原因就是『16 进制是 2 进制的简单形式』了(我从某本书看的,本频道之前也说过)
大概就是 2^4 = 16... 但是 log2(10) 不是整数不能直接对应,如果这么换算了可以节省手算时间了,至于电子机器怎么算和笔算无关
==
做完了我会开始写(GeekSpec 暂时放一下,我想写点代码)DJson (支持各种流哦,JSE 封装的,包括 Http 的)和 NaiveCat,当然我还是想先写个 Binary Stream Editor 的,,, 支持 byteorder 就可以了,因为 BinaryStreamIO 的状态的确有点多...
大概我会尝试把假期拖到明天中午,这样我就有一天半的时间(足足比别人多放一天半!别人周日早就去上学了,我可以拖到周一中午)
... 计划一直来都是『入不敷出』一样... 宿命吧,啥时候大学(迫真,专科,但是我不虚,因为我可以自学 self-teaching) #China #School #life 🤔🏫
duangsuse::Echo
#bin 然后为了证明我不比 drakeet 差,只是缺少拿来实践的时间, 我分析一下这篇文章《5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码》,然后就睡觉。 当然,至于 Android 那一套,比如异步、Timer、MessageDriven、Android XML、Android Widgets、Resources、Android Gradle Build 集成、库打包、封装、Android Layouts、Views、Paint、Android Layout Animat…
duangsuse::Echo
#bin 然后为了证明我不比 drakeet 差,只是缺少拿来实践的时间, 我分析一下这篇文章《5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码》,然后就睡觉。 当然,至于 Android 那一套,比如异步、Timer、MessageDriven、Android XML、Android Widgets、Resources、Android Gradle Build 集成、库打包、封装、Android Layouts、Views、Paint、Android Layout Animat…
其中有一部分弄错了,我还以为 base16 只能表示 base2,base2 不能表示 base16,所以 16 -> 2 不能快速笔算,其实不是这样的(当然是可以这么算的,因为 16 = 4 * 2 * 2 呢,要不然不该是等号)
0x133
= toBinary(0x1) * 0b1000_0000
+ toBinary(0x3) * 0b1000
+ toBinary(0x3) * 0b1
= 0b0001_0000_0000
| 0b0000_0011_0000
| 0b0000_0000_0001
= 0b0001_0011_0001
如果还有错误的,请赐教 #fix 🐱
0x133
= toBinary(0x1) * 0b1000_0000
+ toBinary(0x3) * 0b1000
+ toBinary(0x3) * 0b1
= 0b0001_0000_0000
| 0b0000_0011_0000
| 0b0000_0000_0001
= 0b0001_0011_0001
如果还有错误的,请赐教 #fix 🐱
duangsuse::Echo
#bin 然后为了证明我不比 drakeet 差,只是缺少拿来实践的时间, 我分析一下这篇文章《5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码》,然后就睡觉。 当然,至于 Android 那一套,比如异步、Timer、MessageDriven、Android XML、Android Widgets、Resources、Android Gradle Build 集成、库打包、封装、Android Layouts、Views、Paint、Android Layout Animat…
最后一句(我懒得再看 drakeet 的博客和文章什么的了,怕又引起撕逼,虽然我对技术还是很客气的... 而且现在我不虚,除了要和我谈 Monad 和范畴论图论线性代数什么的):
我才知道 drakeet 使用的排序算法是从大学的时候改的... 而且他还学过 Objc 和 iOS 开发...
https://blog.csdn.net/drakeet/article/details/12948029 👈 here, 《还是用csdn吧》
那么我这周最后谈一下这个博文最后提的问题,太久流于一个话题对我来说也不好。
我发现,其实酷安开发者们大学生也不少。by_syk 应该也是大学生吧
作者:drakeet
我们用伪代码描述一下,反正我们不再乎是 Objc、Swift 还是 C++ 是吧?因为交换排序本来就应该是任何正常编程语言都能写的,Haskell 靠
那么不对在哪里?假设我们有一个列表
那么这个算法(我写的,不是原算法...)其实就是简单交换排序... 是没问题的(迫真,其实有问题... 比如
那么问题来了,到底为啥一半有序一半无序?因为我开始看错了...
count = 4
i = 0
j = 1 — j 不可能 greaterThan count,因为所有 i 循环中的 j (aka. succ i) 在 range bound
swap([4,3,2,1], 0, 1)
i = 1
j = 2
swap([3,4,2,1], 1, 2)
i = 3
j = 4
swap([3,2,4,1], 3, 4)
(endfor)
然后你们看到了,后来 drakeet 也在 LayoutFormatter 里觉悟了原来交换步长只有 1 啊!逆序对只是个 pair,更大的逆序是无法靠交换相邻项消除的,所以用了一个
我才知道 drakeet 使用的排序算法是从大学的时候改的... 而且他还学过 Objc 和 iOS 开发...
https://blog.csdn.net/drakeet/article/details/12948029 👈 here, 《还是用csdn吧》
那么我这周最后谈一下这个博文最后提的问题,太久流于一个话题对我来说也不好。
我发现,其实酷安开发者们大学生也不少。by_syk 应该也是大学生吧
NSNumber *temp = [[NSNumber alloc] init];---------------------
//「从小到大」排序
for (NSInteger i = 0; i < aHundredArray.count - 1; i++) {
for (NSInteger j = i+1; j > aHundredArray.count; j++) {
if (aHundredArray[j] < aHundredArray[j-1]) {
temp = aHundredArray[j-1];
aHundredArray[j-1] = aHundredArray[j];
aHundredArray[j] = temp;
}
}
}
作者:drakeet
我们用伪代码描述一下,反正我们不再乎是 Objc、Swift 还是 C++ 是吧?因为交换排序本来就应该是任何正常编程语言都能写的,Haskell 靠
forM_, (!!) 都能写(或许吧)var ary[n]怎么样,好看吧?这是个『不能使用』的交换排序算法,交换比较谓词函数为
predicate x y = not $ x `lessThan` y
for i in ary.indicesWithoutLast |>
local suc_i = i +1 — next item index
if (ary[i] `predicate` ary[suc_i]) swap(ary, i, suc_i)
(not · lessThan),换句话说,我们认为列表应该是 [a(<b), b (<c), c] 才对,否则就交换索引致使它成那样。那么不对在哪里?假设我们有一个列表
[1, 3, 4] 排序结果显然是正确的,因为它不需要消除任何逆序对[4, 1, 3] 在 i = 0 的时候,我们消除了一个逆序对 [4, 1] 成 [1, 4],然后 i = 1 结束循环时 [4, 3] 也被消除,得到有序列表那么这个算法(我写的,不是原算法...)其实就是简单交换排序... 是没问题的(迫真,其实有问题... 比如
[4, 1, 3, 2] 就不能排序,因为它不足以把 2 交换到顶部,至于数据模式,就是 [d, a, b, c], a > b, a > c, d > a, 算法输出只能是 [a, b, c, d]... 好吧我输了,我这么抽象的时候找不出不能排序的... 但我觉得不对,肯定有无法交换到『前面』的模式的)那么问题来了,到底为啥一半有序一半无序?因为我开始看错了...
for (NSInteger i = 0; i < aHundredArray.count - 1; i++)什么魔性循环... 比如对于输入 [4, 3, 2, 1], for
for (NSInteger j = i+1; j > aHundredArray.count; j++)
count = 4
i = 0
j = 1 — j 不可能 greaterThan count,因为所有 i 循环中的 j (aka. succ i) 在 range bound
(0:(count-1)-1+1) 内,(count - 1) 不可能 greaterThan count,j++ 为死代码, 第二个循环不存在,, 看来我上面的是对的swap([4,3,2,1], 0, 1)
i = 1
j = 2
swap([3,4,2,1], 1, 2)
i = 3
j = 4
swap([3,2,4,1], 3, 4)
(endfor)
result = [3, 2, 1, 4]这就是所谓的『排了一半』,我们注意到 3 和 2 是逆序的,因为我们在交换 &2 和 &1 的时候没有考虑到前面有个 3 打破了期望的偏序关系(只知 3 > 2 不知 3 > 1,何况知道手也短无事可做)。
然后你们看到了,后来 drakeet 也在 LayoutFormatter 里觉悟了原来交换步长只有 1 啊!逆序对只是个 pair,更大的逆序是无法靠交换相邻项消除的,所以用了一个
for (i = 0; i < j - 1; i++), 完美duangsuse::Echo via @vote
🎉 那么看完了以上两条消息,不会觉得我智商不如 drakeet 了吧?
anonymous poll
🐱 – 4
👍👍👍👍👍👍👍 100%
👥 4 people voted so far.
anonymous poll
🐱 – 4
👍👍👍👍👍👍👍 100%
👥 4 people voted so far.
LetITFly News
https://t.me/drakeets/1605 我认为 Drakeet 的频道没增长多少粉丝的原因有一条是:国内来 Telegram 的 Android 开发者(相对于爱好者(用户)而言)还是太少了。 虽然频道主不喜欢基于微信的公众号/小程序等平台,但频道主能理解并尊重 Drakeet 将后续的技术文章放到知识星球的决定。 经过和 Drakeet 短暂私聊,我了解到: Drakeet 是喜欢 Telegram 这款软件的,他也会继续上 Telegram 接受纯纯写作的反馈等。 频道主在此建议在…
drakeet 真的是喜欢 Telegram, 我注意到他之前(大学那段时间)的博客有一篇是安利别人 Telegram 的和夸 Telegram 的
至于放文章到微信(其实不是,后来我注意到是一个支持知识付费和互动的知识社群, 半独立平台)... 大可不喷,因为现在的确有不少国内『开发』圈里的人用微信,可惜的就是得用手机号才能看
至于放文章到微信(其实不是,后来我注意到是一个支持知识付费和互动的知识社群, 半独立平台)... 大可不喷,因为现在的确有不少国内『开发』圈里的人用微信,可惜的就是得用手机号才能看
ju.outofmemory.cn
安利和细数 telegram 的优点 - 为程序员服务
好用, 快, 开源, 安全. 有着很规整甚至可以说精致的 Material Design (Android 版). 作为一个 IM, 该有的功能样样都有,
但却让人感觉轻量流畅. 支持滑动返回 . 支持 Android 5.0 以上的
但却让人感觉轻量流畅. 支持滑动返回 . 支持 Android 5.0 以上的
槽,WebAudio API MediaWrap 播放都有问题,XYVODPlayer 用的 WebAudio 当然也有问题... 看来 Fx 得更新了?
duangsuse::Echo
哦,没问题的是 video API... 🙈
duangsuse 知道的还是太少了啊(说起来这种 streaming player cache 不知道怎么写呢?而且集群计算和网络流就不会
https://www.mdui.org/docs/collapse #gui 一些 animation,比如说 ripple, duangsuse 也没有实现过...
如果动画过程中 touch release, 就立刻展开么... 要不然曲线就会越来越慢?会不会要记录按下的时间,因为按的时长越短涟漪展开速度越快?
如果动画过程中 touch release, 就立刻展开么... 要不然曲线就会越来越慢?会不会要记录按下的时间,因为按的时长越短涟漪展开速度越快?
This media is not supported in your browser
VIEW IN TELEGRAM
#GeekApk 最后我吐槽一下,然后去写 DJson 吧(浪费了太多时间,DJson 还要写一 TextInputStream 代理呢... 虽然不需要 parser combinator
欸话说刚才看的时候又见到了汉语机器学习 + 歌声合成的实例... 即使在 B 站...
这年头啥都逃不过浮点计算... 😕
NVIDA 的高性能计算库 OpenSeq2Seq: toolkit for distributed and mixed precision training of sequence-to-sequence models
可以用于语音识别和合成、自然语言建模处理等流行操作...
这年头不想当码农难啊,要不然就得学习『使用』一些自己看不懂的东西,做『用户』... 😐
—
> 我主要想看看谁会继续领导
> 否则就是瞎写嘛
< 没有生产力,活不下去,哪里有闲心政治,就像一群没有自理能力的人无法组成社会一样
—
这是前几个星期我在凉了的 GeekApk user 讨论组看到的一小段消息
🤔 duangsuse 想关于这些『创业』系信息技术『从业者』发表一些自己的看法。
🗒 此广播不应在任何程度、任何侧面上被理解为对『创业』的不敬、对群不对人,请勿对号入座。
——
GeekApk 嘛... 一些人可能以为是我自己开始想搞出这个坑来叫一群仇酷安(当然,也可以说,是“恨铁不成钢”,可惜我们并不拥有酷安,呵呵)的人一起填或者要组队破坏酷服务的(GeekApk 组曾经是有一次被拿来组织了一次 DoS,目标是酷安的静态页面,并且导致了主要酷服务(这里分为 coolapk.com, dl.coolapk.com, api.coolapk.com, 主服务是说 coolapk.com 主站)宕机半小时,当然,也有可能是酷安本身土豆服务器过于辣鸡导致的,我不是此活动的策划者,甚至不是 GeekApk 的『管理者』,也不能算是『创建者』,对酷安的『失去初心』亦无仇视心态)
其实真的不是,我开始比较 naive(正如当初我以为,why Rust? It's fast!),就是想自己弄一个,本来的『项目』是 Dropage,虽然只有一个『蓝皮书』(现在可以说是『烂』了,呵呵)
后来呢,就不得不提到 @iVanilla (现在 Deleted 了... 或许是主动删号的吧,或许... 😶) 弄出了 GeekApk 项目(我自己不想咸得没事去组织一群人弄这种事情,虽然他说是自己早有想法,但是我在某小群里提到自己的打算后再找我私聊讨论并且建立 GeekApk 的,虽然我开始天真无邪 Too young too simple, 但是也不至于捅出这个篓子,因为我打算自己弄,弄完了... 呃... 我觉得照那个样子啥都弄不完),不得不承认他是很好的进行了一些『商业』上的帮助,并且讨论了一些『商业』上的东西... 可惜后来 GeekApk 是这样,那么我这条广播,是想告诉你们为啥它『咕咕』了,为啥会是这样而不是我们都认为的皆大欢喜 good ending — 大家齐心协力弄出了类似酷安的东西,然后欢天喜地地入驻进去,开始的人全成了 GeekApk 里最 dalao 的权限,然后本来『屈居』在酷安的人也都过来了,本来只知酷安的人后来也注册了 GeekApk 帐号,GeekApk 一周年,大家都高喊 GeekApk 万岁万岁万万岁... 还要成立什么米国美国公司,拉赞助... 😶
嗯,drakeet 曾经直白地批判过 GeekApk,除了他无视本组都是一群运维菜鸡而且我仍在学习之外(恕我直言,而且也未必有人维护着多大的集群,体验过什么分布式架构和高性能计算技术)『空壳』我还是很认同的,当然不要以为我也顺带着『仇视』他,我对技术比对人更感兴趣,看问题一向对事不对人。
https://github.com/GeekApk 到现在真正的错误,上面『幼稚和空壳』已经能很好地概括出来了
有些人说 GeekApk 错在用爱发电,在我看来真正致命的却是另一个缺口:用爱发电,其实也未必不可,在自己的业余时间(可能足够长)里做想做的事情,在自己的经济能力范围内要求必要的服务,本来就是人生的一大乐事,可是那个 GeekApk 却是要你用不断咕咕叫🐦的空头支票去给『酷安变质』的信仰充值,这就不行了。
信仰自然还是要有的,可是有一天没有依附的希望终将消散,光靠信仰光环,画饼充饥,能扛过一天,扛得过一年么?
所谓的项目,没有拥有基本技术能力的参与者,没有能做实事的人,就好比一台没有电源的机器,连动力都没有,你说它该怎么工作?靠推吗?你说没有人有能力写代码的『网络技术公司』靠什么去做项目、做产品、做平台、占领『市场』?靠『xxxx 天内出 OO』的承诺吗?
崇才科技。大家都认为是吹的,可是,没有那些抄来、改来的『产品』,想来媒体要炒作,光靠某泽的学历怎么这么高,故事怎么这么大佬,也无物可炒啊?00 后开公司,前浪死在沙滩上啊,哇好厉害,可是有啥东西做出来呢?
没有?那有啥好说的?
可是他们这群脚本小子,『自己动手』(“丰衣足食”)『做』出来了『崇才』课表、『崇才』萌狼输入法,加上『无薪资』『QQ 群』等『企业』 flag,就像是真正的 SOHO(Small Office Home Office) 公司了,何况还有名分的,不是么?
而 GeekApk 还要降一档次,因为名分上的东西都没有,我们也没人『自己动手』去把酷安复制一下(这种程度能力的人都没有,好吧,的确有一个高性能计算的大佬被我『赶跑』了... 其实那时候 GeekApk 连个设计本本都没有,不像 R 还有个第一版明确定义),没有一个拿来骗人的『酷极安』『产品』,也没一个 50w 资本的注册公司和大手子转发评论,最后当然是烟消云散啥都没留下。(呵呵
GeekApk 需要的是什么?是白皮书、贷款、基金、股票、融资、股票期权、资金链、生态圈?是项目?是员工、运维、CTO、CIO、CEO、COO?是 “用 Trello”、“用 Rails”、“用 Laravel”、”用 Go“、“用 Vue”、“用 OO”?是 “不能『抄』酷安”“即使身死绝不自我审查”?它们都出现过,都消失了,说到底,『产品』的核心还是靠着软件工程实战的程序逻辑,其他的,『一步到位』、测试、文档、打包、可读性、可扩展性、可维护性、健壮性,编程技巧,都是次要,『库』的核心还是抽象、架构和算法,『应用程序』的核心还是业务逻辑,产品的核心还是你要提供的东西本身,其他的,在没有一个存在的展开基础的时候,都是一纸空谈。
著名计算机科学家沃思(NiklausWirth)提出一个公式:
是灵魂啊!你到底想干什么?你知道吗?
在你还没学会走好路之前,不要被眼前斑驳陆离的世界迷惑,拒绝政治、拒绝形式主义,就是给自己一个更广阔的天空。
— duangsuse, Sun Apr 21, 2019
欸话说刚才看的时候又见到了汉语机器学习 + 歌声合成的实例... 即使在 B 站...
这年头啥都逃不过浮点计算... 😕
NVIDA 的高性能计算库 OpenSeq2Seq: toolkit for distributed and mixed precision training of sequence-to-sequence models
可以用于语音识别和合成、自然语言建模处理等流行操作...
这年头不想当码农难啊,要不然就得学习『使用』一些自己看不懂的东西,做『用户』... 😐
—
> 我主要想看看谁会继续领导
> 否则就是瞎写嘛
< 没有生产力,活不下去,哪里有闲心政治,就像一群没有自理能力的人无法组成社会一样
—
这是前几个星期我在凉了的 GeekApk user 讨论组看到的一小段消息
🤔 duangsuse 想关于这些『创业』系信息技术『从业者』发表一些自己的看法。
🗒 此广播不应在任何程度、任何侧面上被理解为对『创业』的不敬、对群不对人,请勿对号入座。
——
GeekApk 嘛... 一些人可能以为是我自己开始想搞出这个坑来叫一群仇酷安(当然,也可以说,是“恨铁不成钢”,可惜我们并不拥有酷安,呵呵)的人一起填或者要组队破坏酷服务的(GeekApk 组曾经是有一次被拿来组织了一次 DoS,目标是酷安的静态页面,并且导致了主要酷服务(这里分为 coolapk.com, dl.coolapk.com, api.coolapk.com, 主服务是说 coolapk.com 主站)宕机半小时,当然,也有可能是酷安本身土豆服务器过于辣鸡导致的,我不是此活动的策划者,甚至不是 GeekApk 的『管理者』,也不能算是『创建者』,对酷安的『失去初心』亦无仇视心态)
其实真的不是,我开始比较 naive(正如当初我以为,why Rust? It's fast!),就是想自己弄一个,本来的『项目』是 Dropage,虽然只有一个『蓝皮书』(现在可以说是『烂』了,呵呵)
后来呢,就不得不提到 @iVanilla (现在 Deleted 了... 或许是主动删号的吧,或许... 😶) 弄出了 GeekApk 项目(我自己不想咸得没事去组织一群人弄这种事情,虽然他说是自己早有想法,但是我在某小群里提到自己的打算后再找我私聊讨论并且建立 GeekApk 的,虽然我开始天真无邪 Too young too simple, 但是也不至于捅出这个篓子,因为我打算自己弄,弄完了... 呃... 我觉得照那个样子啥都弄不完),不得不承认他是很好的进行了一些『商业』上的帮助,并且讨论了一些『商业』上的东西... 可惜后来 GeekApk 是这样,那么我这条广播,是想告诉你们为啥它『咕咕』了,为啥会是这样而不是我们都认为的皆大欢喜 good ending — 大家齐心协力弄出了类似酷安的东西,然后欢天喜地地入驻进去,开始的人全成了 GeekApk 里最 dalao 的权限,然后本来『屈居』在酷安的人也都过来了,本来只知酷安的人后来也注册了 GeekApk 帐号,GeekApk 一周年,大家都高喊 GeekApk 万岁万岁万万岁... 还要成立什么米国美国公司,拉赞助... 😶
嗯,drakeet 曾经直白地批判过 GeekApk,除了他无视本组都是一群运维菜鸡而且我仍在学习之外(恕我直言,而且也未必有人维护着多大的集群,体验过什么分布式架构和高性能计算技术)『空壳』我还是很认同的,当然不要以为我也顺带着『仇视』他,我对技术比对人更感兴趣,看问题一向对事不对人。
https://github.com/GeekApk 到现在真正的错误,上面『幼稚和空壳』已经能很好地概括出来了
有些人说 GeekApk 错在用爱发电,在我看来真正致命的却是另一个缺口:用爱发电,其实也未必不可,在自己的业余时间(可能足够长)里做想做的事情,在自己的经济能力范围内要求必要的服务,本来就是人生的一大乐事,可是那个 GeekApk 却是要你用不断咕咕叫🐦的空头支票去给『酷安变质』的信仰充值,这就不行了。
信仰自然还是要有的,可是有一天没有依附的希望终将消散,光靠信仰光环,画饼充饥,能扛过一天,扛得过一年么?
所谓的项目,没有拥有基本技术能力的参与者,没有能做实事的人,就好比一台没有电源的机器,连动力都没有,你说它该怎么工作?靠推吗?你说没有人有能力写代码的『网络技术公司』靠什么去做项目、做产品、做平台、占领『市场』?靠『xxxx 天内出 OO』的承诺吗?
崇才科技。大家都认为是吹的,可是,没有那些抄来、改来的『产品』,想来媒体要炒作,光靠某泽的学历怎么这么高,故事怎么这么大佬,也无物可炒啊?00 后开公司,前浪死在沙滩上啊,哇好厉害,可是有啥东西做出来呢?
没有?那有啥好说的?
可是他们这群脚本小子,『自己动手』(“丰衣足食”)『做』出来了『崇才』课表、『崇才』萌狼输入法,加上『无薪资』『QQ 群』等『企业』 flag,就像是真正的 SOHO(Small Office Home Office) 公司了,何况还有名分的,不是么?
而 GeekApk 还要降一档次,因为名分上的东西都没有,我们也没人『自己动手』去把酷安复制一下(这种程度能力的人都没有,好吧,的确有一个高性能计算的大佬被我『赶跑』了... 其实那时候 GeekApk 连个设计本本都没有,不像 R 还有个第一版明确定义),没有一个拿来骗人的『酷极安』『产品』,也没一个 50w 资本的注册公司和大手子转发评论,最后当然是烟消云散啥都没留下。(呵呵
GeekApk 需要的是什么?是白皮书、贷款、基金、股票、融资、股票期权、资金链、生态圈?是项目?是员工、运维、CTO、CIO、CEO、COO?是 “用 Trello”、“用 Rails”、“用 Laravel”、”用 Go“、“用 Vue”、“用 OO”?是 “不能『抄』酷安”“即使身死绝不自我审查”?它们都出现过,都消失了,说到底,『产品』的核心还是靠着软件工程实战的程序逻辑,其他的,『一步到位』、测试、文档、打包、可读性、可扩展性、可维护性、健壮性,编程技巧,都是次要,『库』的核心还是抽象、架构和算法,『应用程序』的核心还是业务逻辑,产品的核心还是你要提供的东西本身,其他的,在没有一个存在的展开基础的时候,都是一纸空谈。
著名计算机科学家沃思(NiklausWirth)提出一个公式:
算法 + 数据结构 = 程序其中算法是程序的灵魂。
是灵魂啊!你到底想干什么?你知道吗?
在你还没学会走好路之前,不要被眼前斑驳陆离的世界迷惑,拒绝政治、拒绝形式主义,就是给自己一个更广阔的天空。
— duangsuse, Sun Apr 21, 2019
Bilibili
最可爱的AI小美女【微软小冰】单曲《我是小冰》_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
猜 谜时 间:18岁 少女, 处 女座,喜 欢唱歌, 喜欢 写诗,还 喜欢跟你 们聊 天, 天~~问题来 了,今天 发 行单 曲的这位菇凉 是 Sei?
Forwarded from 羽毛的小白板
今天看见了这个 bot 比较有意思,我们使用 PDL 来伪设计一下这个机器人
使用消息驱动编程,这是一个简单的 Telegram 平台 bot,不使用 inline bot(eg. 按钮菜单、@bot 选项) 功能。
我们的抽象:
用户使用 /sucide 命令,或者会加上 bot 的用户名,就要将他封禁一段时间。
并且假设『消息位置』肯定是一个 group
然后有
然后我们可以取笑封禁用户
使用消息驱动编程,这是一个简单的 Telegram 平台 bot,不使用 inline bot(eg. 按钮菜单、@bot 选项) 功能。
我们的抽象:
onHandleCommand(Command, MessageContext)
用户使用 /sucide 命令,或者会加上 bot 的用户名,就要将他封禁一段时间。
observe onHandleCommand(cmd, context)然后有 procedure:
case cmd
"sucide" ->
res = sucideUser(context.group, context.sender)
res.map_err { |e| reply(context, e) }
tease(context, res.ok!())
otherwise -> reply(context, "Unexpected command " ++ cmd)
fn randomTimeRange()来拿到一个随机时间,并且我们假设 Telegram 暴露了一个『block 用户 for 一个时间段』的接口
return Random.nextInt($_("minTime"), $_("maxTime")))
并且假设『消息位置』肯定是一个 group
然后有
sucideUser(user)
fn sucideUser(group, user)这时候我们不管别的,假设有这么一层可以抽象出来(而且的确可以,Telegram 总不可能只告诉 bot 自己被发了哪个命令不告诉是谁在哪里发的)。
unless group.group? return Err("Not a group")
results Telegram.block(group, user, PERM_DENY_SEND, randomTimeRange())
然后我们可以取笑封禁用户
fn tease(ctx, millisec)
reply(ctx, "你被封禁了 " ++ Time.pretty(millisec) ++ ",完美!")🤪
Forwarded from Deleted Account
Congratulations! You are blocked for
85 seconds (random value, min: 30s, max: 5 minutes). Enjoy your offline time!