- 博客(49)
- 资源 (5)
- 收藏
- 关注
原创 Epoch Based Reclamation 的个人理解
目录缘起什么是Epoch Based Reclamation为什么要Epoch Based ReclamationEpoch Based Reclamation的原理概述来个小例子后记缘起最近在看大佬视频,在用rust实现一个concurrenthashmap的时候,用到了crossbeam中epoch,顿时一阵懵逼,囊碟括咧(这啥玩意啊)?于是便开始启动搜索引擎大发,再整合诸多信息后,有了此偏小记。什么是Epoch Based Reclamation大概意思上来说,这是无锁编程模式下的一种内存管理
2021-12-08 13:20:06 1382
原创 大坑后记: sql事务关于select for update那点事
1.场景描述这是开发中的一个项目,有以下场景:对于一条消息M,有若干个接收者(r1, r2, ...)。接收者收到消息后,发送确认消息。服务器从消息M的接收者zho
2021-06-03 11:08:34 1347
原创 android webrtc 音频播放设备切换相关 初步小结
做android webrtc相关应用时,涉及到音频播放设备的切换,经过资料搜索和自己尝试后,初步小结一下,内容有待进一步验证,至少目前效果已达到。1.音频播放设备主要有以下四大类型: 扬声器,听筒,耳机,蓝牙耳机。效果设计为,通话中,当用户打开了扬声器,则直接走扬声器播放。当用户关闭了扬声器,则从听筒,耳机,蓝牙耳机中选择其一播放。其中,蓝牙耳机具有最高优先级,即当蓝牙耳机连接时,音频从蓝牙耳机中播放2.不考虑蓝牙耳机的简单情形首先,获取audioManager(kotlin代码,下同).
2021-04-15 10:17:29 2046
原创 NettyChannelBuilder 自签名证书 overrideAuthority 的使用记录
背景在之前的文章中,配置了golang服务端,python客户端的自签名grpc加密通道。在同样配置安卓客户端的情况下,却碰到了问题.NettyChannelBuilder.forAddress("192.168.50.153", 56651) .sslContext(GrpcSslContexts.forClient().trustManager(crt).build()).build()会报如下异常:javax.net.ssl.SSLHandshakeExcep
2021-01-18 13:34:03 1518
原创 用rust手撸一棵磁盘存储B+树
作为一个多年的老码农,学习新语言那可以说是跟喝水一样简单。什么go,swift,js,dart,都是直接上手撸码,顶多三天就算是七七八八门清了。直到。。。我遇到了rust。学rust快有2个月了,但感觉现在连入门都算不上,更没有信心将他用于实际项目。为了更好的学习rust,从0开始手撸了一个b树:https://github.com/lucyTheSlayer/btree.git实现了插入与查询。未来计划加入删除、缓存等。通过手撸b树,对rust语言的掌握和理解可以算是提升了一点点.
2020-10-29 16:12:13 2836 1
原创 vue2.0 代码中调用filter
如定义有以下filter:Vue.filter('formatPercentage', (v, outputZero) => { if (v === undefined || v === null) { return '' } if (v === 0 && !outputZero) { return '' } return `${(v * 100).toFixed(2)}%`})如果想在js代码中调用,可使用如下方法:let f =
2020-08-28 10:47:17 437
原创 pyqt5 异步请求返回后,ui组件已销毁导致crash的简单解决方法
pyqt5 异步请求返回后,ui组件已销毁导致crash的简单解决方法场景解决思路场景在客户端编写时,涉及到从服务器获取数据, 在主线程同步请求会卡死界面,所以一般都会采用异步的方式,通过背景线程去请求数据,然后通知主线程处理。这种方式有个问题是,很容易导致程序crash。譬如打开一个对话框,开启线程获取数据,由于网络延迟,等到数据返回,回调主线程渲染ui时候,该对话框已经被用户销毁,那这时候,就会抛出:RuntimeError: wrapped C/C++ object of type XXX ha
2020-08-20 10:23:53 944
转载 vue 跳转至相同路由时,强制刷新页面
速记备查https://www.zhihu.com/question/49863095/answer/580363087
2020-07-24 14:39:21 4243
原创 pyinstaller 打包报错 FileNotFoundError 系统找不到指定的文件 api-ms-win-core-handle-l1-1-0.dll
pyinstaller作为一个python打包利器,虽然很方便,但坑实在是多。这不,好久没打过包了,今天一打包,又来了新错:Traceback (most recent call last): File "C:\Program Files\Python36\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "C:\Program Files\Python36\lib\runpy.py",...
2020-06-02 16:19:29 4964 2
原创 pyqt股票行情软件性能优化 差点又让python背了锅
因为对c++一直处于差不多能看的懂代码,但写的话一头包,所以毅然采用pyqt编写一个股票行情软件。部分窗体截取如下:等大体上快完工了,跑着跑着突然发现,界面卡顿的一笔。一看cpu,飚到了十几。瞅瞅人家的行情软件,那cpu使用都是稳定的在2以下。行情一频繁就尿裤,难道是py太拉胯了?于是立马使用cProfile:python -m cProfile -s cumulative main.py1.一号锅:拉胯的setStyleSheet首先发现setStyleSheet这个.
2020-05-25 12:28:41 2178
原创 p2p的基石: 快乐udp打洞试验
因疫情在家办公,远程操作公司电脑。突然想起来试一试很久以前一直想做的试验: udp打洞。毕竟男人鳝变,最爱钻洞。试验步骤记录如下:注:家里的电脑记为PC_A,公司电脑记为PC_B1.利用stun服务,检测两边电脑的NAT类型,并得到两边的内网,外网地址。这里使用https://github.com/ccding/go-stun这个库。由于go-stun并没有在控制台输出本机udp的...
2020-03-12 15:26:28 728
原创 python 中四舍五入的巨坑
先来个灵魂三问:print(round(0.5))print(round(1.5))print(round(2.5))一般人肯定以为输出1, 2, 3了,实际跑出来,却是0, 2, 2有些同学马上说,可以利用格式化字符串呀:print("%.0f" % 0.5)print("%.0f" % 1.5)print("%.0f" % 2.5)然并卵,仍然是0, 2, 2...
2019-11-05 10:10:35 420
原创 grpc 加密传输 golang服务端 python客户端 最简单方法
场景:golang作为服务端,python作为客户端,grpc的加密传输试了网上很多的方法,有带ca的有不带的,天花乱坠头都晕了。最烦躁的是网上服务器和客户端都是同一语言的,试了下都不怎么灵光。纠结了不少时间后,终于试出一套最简单的能调通的方案。本方案不使用ca,因此不够高大上,但对于一般应用的安全需求应该是没问题了。第一步:生成证书在安装了openssl的linux系统上,...
2019-10-23 14:52:49 1078
原创 js 从json字符串反序列化对象,如何恢复其对象方法的小技巧
应用场景中,有将前端的一些数据保存到后台,在下一次使用的时候取出恢复的操作。对象的字段在这个过程中,是不会产生问题的,但是通过json序列化/反序列化后,对象的方法却不能恢复。解决这问题最原始的方法,就是重新new个对象,然后把字段依次赋值,但这种耗时耗力无法自适应变更的方法未免也太low了点。思来想去,记起了很久前看到的关于prototype的文章,便思考了如何能通过prototype完...
2019-07-25 09:31:48 1263
转载 Android sqlite: Cursor Window is full
https://stackoverflow.com/questions/35766836/cursorwindow-window-is-full
2019-06-26 09:47:42 1070
原创 pyinstaller 打包出现第三方库FileNotFoundError的一般解决方法
在用pyinstaller打包(-F 选项),如果用到的第三方库含有data文件,而pyinstaller又没有自带该第三方库文件的hook的时候,执行打包后的exe一般会报以下错误FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\1\\_ME...
2019-06-18 16:35:23 13427 20
原创 vs2017 代码标红波浪线但编译通过 解决办法
在c++代码引用其他类的时候,发现被标下划红色波浪线了,但是编译生成完全没问题。所以肯定是vs脑残了。网上搜了下,https://weblog.west-wind.com/posts/2018/Aug/07/Fixing-Visual-Studio-Intellisense-Errors在此找到了靠谱的解决方案(可能需梯子才能访问)简述下步骤:1.关闭vs2.找到项目根目录...
2019-03-20 11:23:25 9302 4
原创 websocket中,使用protobuf的要点总结
作为一个有逼格的实时动态网站,websocket是必不可少的;对于数据量不大的场景,使用json传递数据便绰绰有余了。然后当你想偷懒,直接这么写的时候,老板就会来敲打你的狗头:“现在数据量变多了,网站怎么不动了啊?”于是,必须使用protobuf了。protobuf的简介就不多说了,百度都有。先是本篇中用到的proto定义,具体意义便不用细究了,只是举个例子而已。syntax =...
2019-02-27 16:52:53 11831
原创 golang sql事务rollback写法的思考
与springmvc什么都封装好了不一样,使用go开发的时候很多轮子都得自己造,但也正因为此,go的开发更为自由灵活。go比较著名的orm库是gorm,在写带有事务的方法,而碰巧业务逻辑又比较复杂的情况下,一旦出现了error,则事务必须回滚,这样的话,代码中将会有很多的tx.Rollback()这样的臃肿代码。解决方法之一是使用goto,但是golang中的goto要求变量必须声明在开头...
2019-01-29 18:48:47 4579
原创 大端序 小端序 之简单记忆法
如我们有值 i = 0x12345678,若字节流为(地址从左往右从低到高):0x78 0x56 0x34 0x12 则为小端序若字节流为:0x12 0x34 0x56 0x78 则为大端序 那么,记忆方法就很简单了,如果顺着读等于真实值的就是大端序;如果不是就是小端序。 另外,一般计算机内存存储数据采用小端序,所以用ollydbg查看数据比较别扭;而根据网上高人评...
2018-11-13 22:24:43 448
原创 KMP算法学习的一点个人理解
PS:KMP算法的背景相关请自行百度,本篇编程语言使用python,个人学习用,理解上可能存在谬误。算法实现出自本人自以为理解的KMP而码成,不保证正确性以及性能最优。假设有两个字符串s, r,求r在s中出现的位置,效率最高的算法似乎就是KMP了。1.生成next数组算法的第一步是生成r的next数组,next[i],其中0<=i<len(r),的值即为子串r[:i+1]的...
2018-11-09 10:34:11 363
原创 量化 ZIG函数的python实现
来自某百科的定义,ZIG(K,N) 函数当数值K的变化量超过N%时折线转向。本文只考虑收盘价(close)的5%转向。先上图,直观感受下ZIG线(白线)所以给定日线收盘价序列,要求出其ZIG线;大体思路如下:(x = 0.05即5%转向)若是上涨趋势: 扫描点的值若大于现在候选节点的值,则把候选点置为扫描点; 扫描点的值若小于现在候选节点的值*(1-...
2018-11-02 11:15:33 7150 2
原创 pycoin学习笔记(6) 对交易签名的源码简析(PayToAddressScript)
(个人学习用,可能理解上存在谬误)上篇中,签名的步骤如下,solver = build_hash160_lookup([exponent])signed_new_tx = unsigned_new_tx.sign(solver)对于pycoin是如何完成交易签名的,很有必要从其源码中进行研究 def sign(self, hash160_lookup, hash_type=None, **...
2018-07-15 22:05:51 634
原创 pycoin学习笔记(5) 本地对交易签名(p2pkh)
注:本篇所有实验均在比特币测试网络(testnet)下进行这次实验对交易进行本地签名,即不利用第三方钱包的签名功能。本次的场景是,将mh4xx1pgjqLmjVUJxfdj3qV8BJaYARLdh9上的0.2btc转到2N113Ujyc6Pj7kvnZMyZNpAtAfj9EzoHStQ上去。开始撸码:from pycoin.ecdsa import generator_secp256k1, p...
2018-07-13 15:55:36 1558
原创 pyinstaller打包报错: RecursionError: maximum recursion depth exceeded
今天给以前写的python脚本用pyinstaller打包的时候,居然报错了:... File "d:\programdata\anaconda3\lib\ast.py", line 253, in visit return visitor(node) File "d:\programdata\anaconda3\lib\ast.py", line 261, in gener...
2018-07-13 14:53:41 19369 16
原创 pycoin学习笔记(4) 生成交易,使用jsonrpc签名并广播
注:本篇所有实验均在比特币测试网络(testnet)下进行前置步骤:1)下载比特币钱包客户端: bitcoin core. 选择testnet并开启jsonrpc的相关功能。2)去网上乞讨一些比特币这是我乞讨得到的1.03个比特币该交易的hex表示为:0200000001ae2e375fe76f30e3451e2f5fd7441c66ce884a189886abe1e6eccbeff6b6cda8...
2018-07-12 16:15:49 1684
原创 pycoin学习记录(3) hd钱包 bip32
from pycoin.ecdsa import public_pair_for_secret_exponent, generator_secp256k1from pycoin.encoding import wif_to_secret_exponent, public_pair_to_bitcoin_addressfrom pycoin.key.BIP32Node import BIP32N...
2018-07-10 15:32:48 1227
原创 pycoin学习记录(2) 生成 bitcoin address
from pycoin import encodingfrom pycoin.ecdsa import public_pair_for_secret_exponent, generator_secp256k1from pycoin.serialize import h2bis_compressed = Falsesecret_exponent = 0x3aba4162c7251c891...
2018-07-09 15:27:36 1368
原创 pycoin学习记录(1) ecdsa
from pycoin.ecdsa import public_pair_for_secret_exponent, generator_secp256k1, sign, verifysecret_exponent = 0x12345678public_point = public_pair_for_secret_exponent(generator_secp256k1, secret_exp...
2018-07-09 14:02:14 908
原创 overflow:hidden 的妙用
示例如下:<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>hello</title> <style> .container{ background: red; /*overflow: h
2018-05-31 10:48:22 631
原创 @ConditionalOnClass的使用探索 新日暮里格斗大会
Spring的新引入的注解 @ConditionalOnClass是Springboot实现自动配置的重要支撑之一。其用途是判断当前classpath下是否存在指定类,若是则将当前的配置装载入spring容器。举例来说,如果在maven中引入了velocity,那么视图就使用velocity,若引入的是freemarker,则使用freemarker.但是眼见为虚,手敲为实,所以自己决定来验证下其...
2018-05-24 11:18:42 39839 24
原创 生产环境 ios推送证书更换
苹果的推送证书的有效期是一年,过期了就没法推送了,那问题就严重了。整体步骤很简单:1)先去apple developer上,对相应的appid重新生成生产环境的推送证书2)下载到mac后,导入钥匙串中,然后导出为p12,期间自己设个密码3)到第三方推送官网上(本人采用的个推),将p12证书更换一下即可整个过程,app无需重新打包,上线(当然想想苹果也不可能这么搞),经生产环境验证推送一切正常(不正...
2018-05-23 09:46:07 3105
原创 编译原理练手之撸个Json Parser(二) 实体类映射
上一篇中,实现了json字符串的解析;但是一个json库真正cool的地方是跟实体bean的转换,于是今天便来撸下。这次其实跟编译方面没有任何关系,主要是java反射的运用。之前反射用的也少,正好一边百度一边练练。基本功能码完后的感受就是,看似简单的一个实体映射,其实要考虑的细节非常之多,因此也只能实现个大概,离真正能在生产环境使用还差的远。以下是一个测试beanpackage com.ff.fu...
2018-05-22 15:06:45 544
原创 编译原理练手之撸个Json Parser
https://github.com/lucyTheSlayer/FFJson手撸个python目标还是太遥远,先从简单的json解析器开始。捣鼓了半天,似乎是ok了,现总结一下。1.Lexer 分词器分词器的目标是将输入的String token化,定义了以下Token种类public enum FFToken { Comma,Colon,LBracket,RBracket,LBrace...
2018-05-21 21:16:37 781
原创 自制简易编程语言 个人笔记(2)
https://github.com/lucyTheSlayer/orange网上把tiny machine的源码下载下来,省的自己敲了,赶紧试了下自己生成的字节码,不出所料一大堆bug。经过debug,总算是能跑个像样的程序了。立马敲一个,就从最简单的计算阶乘开始:#welcom to orange#this program computes n! for the input n#plz e...
2018-05-17 19:22:52 1093
原创 自制简易编程语言 个人笔记(1)
(写博客是提醒自己挖了坑一定要填)github地址https://github.com/lucyTheSlayer/orange趁着空闲时间,准备学习自己搞一套编程语言出来,就命名为Orange。Orange的最终目标是python的简化版,具有oop的支持(希望能坚持到这步)于是翻出好几年前的老书《编译原理及实践》,照着书后源码就是一顿敲。书中的TINY语言格式是在是太丑了,所以必须对其源码进行...
2018-05-17 14:18:30 9075 2
原创 闲的蛋疼:用算法解移动一根火柴问题(二)
本文仅个人娱乐所用。趁着空闲,把昨天的程序完善了下,做成了一个控制台小游戏。不得不说,我的智商被爆了。import randomclass ActionType: Dec = 0 #将火柴移出 Inc = 1 #将火柴移入 SelfTrans = 2class PositionType: Default = 0 FrontEmpty = 1cl...
2018-04-24 09:49:19 988 1
原创 闲的蛋疼:用算法解移动一根火柴问题
最近一直看到诸如的问题,闲的无聊,便写了段代码来自动解答这类问题。初步只能支持标准的数字变化,即9可以变成3,5,6等,但是不能变成13因为一根火柴棍形成不了1(1需要两根火柴棍).另外数字间不能插入符号,例如132不能变成13-2,因为没有空间可以插入。允许更为灵活的变换需要更多的代码,在此不过多深入思考了思路如下:1)首先求出每个字符“0~9 - +”增加一根火柴,减少一根火柴,自身移动一根火...
2018-04-23 15:13:44 4177
原创 swift 4.0 字符串动画
为了让app看上去酷一点,动画是必要的。花了一整天时间做了下字符串动画,特将成果贴在此处。主要参考了ZZStringAnimation,主要思想便是把uilabel中的字符串,以单字为单位拆分为一个个小的uilabel;那么接下来操纵这些小的uilabel就可以形成很酷炫的动画效果了。github地址:https://github.com/lucyTheSlayer/FFAnimation...
2018-04-16 15:40:29 588
原创 swift4.0 创建随机字符串
修改自https://www.jianshu.com/p/1ec6ba8a0da3extension String{ static let random_str_characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" static func randomStr(len : Int) ...
2018-04-11 09:50:23 2547
信息检索导论
2011-12-14
从计算机到人脑:计算神经科学基础
2011-10-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人