- 博客(37)
- 收藏
- 关注
原创 在游戏中看状态机与状态模式
状态机与状态模式状态机最早接触状态机这个词来自编译原理的学习,在词法分析中,通过有限状态机来进行单词识别。状态机在里面被定义为一个数学模型,一个五元组。 截图来自维基百科对于Android开发者,可能最为熟知的就是MediaPlayer的状态机图了状态机一般有四个要素现态:状态机当前所处的状态条件:触发动作或者状态迁移的条件(在按键系统中,就是指按键的值)动作:条件满足后执行的动作(也就是响应各个任务,在代码中往往一个动作对应一个方法)次态:动作完成后要迁移的下个状态上图中蓝色圆圈
2021-07-27 09:47:13 351
原创 Kotlin写一个解释器(3)---解释执行
前言之前通过Kotlin写一个解释器(1)—词法分析,Kotlin写一个解释器(2)—语法分析,我们得到了一个抽象语法树,通过遍历抽象语法树,我们就可以得到相应的计算结果。计算通过后续遍历,我们可以得到相应的计算结果。class Interpreter(private val parser: Parser) { fun interpret():Int { val ast = parser.parse() return visit(ast) }
2021-06-07 19:43:08 254 3
原创 无用系列——3D球体文字云
起因前些日子在网上看到了一个h5的比较炫的3D球体文字效果,感觉挺有意思,就准备在Android侧进行一下复现,废话少说,先看一下效果(gif看上去有些卡,实际不会)卡核心原理文字坐标首先要做的就是为每个文字确定一个坐标,Android采用的是左手坐标系,而且我们的效果又是一个球体,所以我采用了球面坐标系计算每个文字的坐标。y = radius * cos(Math.toRadians(this.upDegree))z = -radius * sin(Math.toRadians(this.u
2021-05-16 17:29:46 453
原创 Kotlin写一个解释器(2)---语法分析
语法之前的文章中我们写了一个简单的词法分析器,具体见文章(Kotlin写一个解释器(1)—词法分析),有了词,那么如何将这些词组合成正确的句子呢?这里就是语法分析要做的了,首先说什么是语法,简单来说语法就是用词构成句子的规则。比如说汉语中我们常见的句子构造一般由主语+谓语+宾语构成,比如小明玩游戏,其中小明按照词类来看属于名词,这里作为主语,玩按照词类来看是动词,属于谓语,游戏按词类来看是名词,属于宾语。语法分析的目的就是根据之前词法分析获得的词法单元的序列判断是否符合相应的语法要求。上下文无关语法.
2021-04-30 08:54:57 293
原创 Kotlin写一个解释器(1)---词法分析
为什么学最近对编译器很感兴趣,为什么要学习编译原理,于我而言是因为最近需要写一个DSL,需要一个解释器,而对于大部分程序员来说,学习编译器可能有一下三个方面:(1)学习编译器设计,可以帮助更好的理解程序以及计算机是怎么运行的,同时编写编译器或者解释器需要大量的计算机技巧,对技术 也是一个提升。(2)面试需要,所谓“工作拧螺丝,面试造火箭”。学习编译器设计有助于加强计算机基础能力,提高编码素养,更好的应对面试,毕竟你不知道你的面试官是不是对这个也感兴趣。(3)工作需要,有的时候你可能需要创造一.
2021-04-20 10:58:37 283 5
原创 老砒霜和小创创---小朋友,你这样就别怪叔叔坏心眼了
事情创创是我儿子的小名,快两岁了,周末带他去了一个小花园玩,那里有个类似小隧道的玩具,小朋友可以从那里的一头钻进去,再从另一头钻出来,创创也想玩,但是有个四五岁大的小男孩堵在那个小隧道里,他可能把自己当山大王了,只要看到别的小朋友要钻,他就跑到隧道的另一头进去,堵在那里不然过,别的小朋友走了他也走。创创两次走到那里要钻,他都堵在里面,我跟创创说,让小哥哥先过去,他也不动。终于,在第三次我儿子想过的时候,他又来了,我可以看出创创很想过,但是那个小男孩堵在里面,他有点害怕,于是我说:“来,儿子,爸爸带你钻过.
2021-03-31 17:36:06 127
原创 老砒霜买房记---程序员被北京大爷按在地上摩擦
背景年前盘了盘手里的钱,感觉差不多了,觉得是时候买房了,毕竟租房还是每个月的房租不如拿来还房贷。然后就在年后连续看了两周的房。在我这次购房经历中,最有意思的是两个北京大爷,真是实实在在的把我按在地上摩擦。大爷A:老子有人,听老子的大爷A是个北京人,住在通州,家里有四套房子,三套房子在自己的名下,一套在自己儿子名下,我当时看中的就是他儿子名下的这套房子,这套房子是个二居室,楼层装修都挺不错,还是婚房,就是采光差一些,当时看房子的时候大爷的儿子接待的我们,跟他儿子交流的时候就感觉怎么这个老哥反应总是慢半
2021-03-08 22:29:10 204 1
原创 老砒霜写插件(1)----Gradle插件基础以及一个简单的打印插件
Gradle干嘛的Gradle是一款自动化开源构建工具,目前android开发者好像没有谁离开它(当然,有那种大神自己通过命令行编译的,不在范围内)。什么是构建工具,对于android开发者简单来说就是将你的代码和资源等等构建出相应的apk或者aar。下面这张图是android的打包流程图可以发现是身份复杂的,包括java代码的编译,dex文件的生成,apk签名等等一系列工具过程,如果每一个节点都由开发者自己去做,那无疑对生产效率是大打折扣,而gradle通过自身提供的api可以让这一系列流程结合起来
2021-02-26 17:49:02 305
原创 阿呆的“发财日记”
发财vs财富自由阿呆躺在床上,最近他的脑子里经常会出现两个字—发财,当然,现在人已经用财富自由来代替发财这两个字了,发财显得比较低俗,财富自由显得比较高雅,这不禁给人一种孔乙己的感觉。阿呆是一个土逼的小程序员,喜欢技术,水平也算是不好不坏,要说挣得吧也不算少,但是离财富自由那还是差着十万八千里了,本来他的内心还是比较安定的,之前思考的还是如何更好的构建自己的知识体系,把技能弄实,但是短短一个月发生的一系列事情让他对“发财”这件事又有了新的想法,自古都是从来方寸地,易起是非心。啥?慢手真的上市了?
2021-02-18 23:38:36 277 4
原创 搞基础系列-Linux系统-shell脚本的编写
前言作为一个Android开发者,可能大部分时间都放在了上层的代码编写和学习上,对于一些基础的东西像操作系统、网络、数据结构与算法还有设计模式可能了解不多,搞基础系列准备以个人的经验为出发,整理一些个人认为比较重要的,对工作有帮助的一些基础知识点,虽不能面面俱到,但力求包含重点常见知识,这不仅是一个分享,也是个人学习的记录和总结。Linux学习路线(这个路线图只是从自己的经验和实际出发得出...
2020-03-29 16:18:26 119
原创 搞基础系列-Linux系统-文件权限与目录配置
前言作为一个Android开发者,可能大部分时间都放在了上层的代码编写和学习上,对于一些基础的东西像操作系统、网络、数据结构与算法还有设计模式可能了解不多,搞基础系列准备以个人的经验为出发,整理一些个人认为比较重要的,对工作有帮助的一些基础知识点,虽不能面面俱到,但力求包含重点常见知识,这不仅是一个分享,也是个人学习的记录和总结。Linux学习路线(这个路线图只是从自己的经验和实际出发得出...
2020-03-23 21:37:21 198
原创 android LiveData源码分析--源码阅读100天(2)
0.介绍LiveData,同属于JetPack构建集合,根据文档描述LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如Activity,Fragment或Service。此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。优势(以下摘自google文档,google翻...
2018-11-21 21:27:08 140
原创 android Lifecycle源码分析--源码阅读100天(1)
1.使用Lifecycle框架用来感知组件执行操作以响应另一个组件(例如Activity和Fragment)的生命周期状态的更改。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。举个例子:如果你需要在Activity或者Fragment的声明周期里做一些处理:override fun onCreate(savedInstanceState: Bundle?) { ...
2018-11-20 21:16:01 165
原创 Android Studio在集成了ShardSDK的项目中进行代码混淆
1、这里使用默认的混淆规则,所以只要将app里的build.gradle中的minifyEnabled的值设为true即可,这个参数就是允许代码混淆。 2、要保证ShardSDK module里的类不被 混淆,所以要在app下的proguard-rules.pro里添加两行代码 (1)-keep class cn.sharesdk.**{*;} 这段代码就是保证在cn.shardsdk包名下的
2015-07-31 08:18:48 457
原创 Surface、SurfaceView和SurfaceHolder的理解
Surface、SurfaceView和SurfaceHolder的理解
2015-03-21 11:35:45 451
原创 BaseAdapter中的ConverView的作用和ListView的优化
BaseAdapter中的ConverView的作用和ListView的优化
2015-03-21 11:26:12 588
原创 一周工作问题总结
一周工作问题总结 (1) SimpleAdapter 不支持非drawable资源的图片,也就是说图片要放在drawable文件里 (2)浏览器无法使用,提示代理服务器连接失败或无法连接到代理服务器的解决方法: 首先在浏览器中打开Internet选项,然后选择连接选项卡,点击局域网设置,在局域网设置的代理服务器下面有一项为LAN使用代理服务器,如果它选中了,就取消选中。重
2015-03-21 10:44:30 339
原创 svn的import,add
只有带.svn的工程才能使用add,服务器上的路径和本地是对应的,不能修改;import导入的文件不需要带svn信息而且要选择服务器的路径。
2015-03-21 09:49:42 1116
原创 Android Fragment使用中遇到的几点问题
Android Fragment使用中遇到的几点问题 首先要讲一下LayoutInflater对象的inflate方法,在这个方法中有三个参数(int resource,ViewGroup root,boolean attachToRoot),resource为要实例化的布局文件,root为该布局文件的
2015-03-14 20:08:24 449
原创 关于PopuWindow不能显示的问题
关于PopuWwindow不能显示的问题 调用PopuWindow时,已经实例化了PopuWindow并且调用了PopuWindow的setContentView方法,但是就是不能显示出这个PopuWindow,原因就在于你没有设置PopuWindow的高和宽,调用PopuWindow的setHeight和setWidth方法来设置PopuWindow的高和宽,例如pw.set
2015-03-14 19:50:18 808
原创 Java环境变量的作用和设置
Java环境变量的作用和设置 Java的环境变量设置有三个JAVA_HOME,PATH和CLASSPATH,JAVA_HOME即为jdk的安装路径,PATH使得系统可以在任何路径下识别java命令,CLASSPATH为Java加载类路径,只有类在CLASSPATH中,java命令才能识别它。PATH设置:%JAVA_HOME%\bin;%JAVA_H
2015-03-14 19:14:42 287
原创 用gradle编译module中的libs里的包
在moudle的buiild.gradle文件中输入dependencies{compile fileTree(include:'*.jar', dir:'libs')}这样在libs里导入
2015-03-14 12:53:00 696
原创 Android Studio 1.0 导入第三方类库的方法
1.import module要导入的类库2.右击要添加类库的module,选择Open Module Settings,添加类库3.参照自己module的build.gradle文件修改类库的build.gradle文件android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultCon
2014-12-18 12:49:23 301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人