书法字典:https://www.shufadict.com

[置顶] 用DirectX实现魔方(一)

摘要: 关于魔方魔方英文名字叫做Rubik's Cube,是由匈牙利建筑学教授和雕塑家Ernő Rubik于1974年发明,最初叫做Magic Cube(这大概也是中文名字的来历吧),1980年Ideal Toys公司开始销售此玩具,并将名字改为Rubik's Cube。魔方在80年代最为风靡,至今未衰。截至2009年1月,魔方在全世界已经售出了3亿五千多万个。最常见的魔方是三阶魔方,由27个小方块构成,共三层,每层9个小方块。我的Demo实现的就是三阶魔方。其他的魔方种类有二阶,四阶及更高阶,也有钻石魔方,五边形魔方,三角魔方等。三阶魔方所有可能的排列数是43252003274489 阅读全文

posted @ 2013-06-28 09:18 翰墨小生 阅读(9968) 评论(38) 推荐(7) 编辑

2020年8月12日

Axios 禁用缓存

摘要: Disable cache for Axios1. set headers.Cache-Control = 'no cache' // not work for 0.19.x or later?2. set timestamp in url parameter for each request(ne 阅读全文

posted @ 2020-08-12 17:06 翰墨小生 阅读(3621) 评论(0) 推荐(0) 编辑

2020年8月8日

javascript定义函数后立即执行(IIFE)

摘要: Talk is cheap, show me the code. // Immediately Invoked Function Expression - IIFE // 定义后立即执行的JavaScript函数。 // 基本语法,将函数定义在()内部,最后附加()执行函数。 // 一个小技巧,先写 阅读全文

posted @ 2020-08-08 19:31 翰墨小生 阅读(791) 评论(0) 推荐(0) 编辑

2020年7月9日

html file input onchage没有调用(两次选择同一个文件)

摘要: 在html中,如果input的类型是file,且第二次选择的文件与第一次相同,那么onchange事件不会调用。 如果想调用,需要将event.target.value设置为null,如下: 原生写法: <input id="file" onchange="file_changed(this)" o 阅读全文

posted @ 2020-07-09 14:42 翰墨小生 阅读(857) 评论(0) 推荐(0) 编辑

阿里云javascript分片上传失败的解决办法

摘要: 前端项目:React + Antd mobile + 阿里云OSS Node.js SDK实现文件上传。 在电脑上运行良好,放到手机上大文件就上传失败。 打开Chrome,地址栏输入`chrome://inspect/#devices`祭出Chrome调试神器 发现如下错误: 于是顺藤摸瓜来到htt 阅读全文

posted @ 2020-07-09 08:34 翰墨小生 阅读(961) 评论(0) 推荐(0) 编辑

2020年7月7日

react项目添加typescript类型定义文件 .d.ts

摘要: 最近用react + antd mobile + typescript开发项目,其中使用了rc-form这个包,可惜没有typescript版本,导致找不到类型定义。 一起来重温一下这个经典的错误。 D:/Code/test/src/pages/me/register/RegisterTest.ts 阅读全文

posted @ 2020-07-07 08:50 翰墨小生 阅读(8380) 评论(0) 推荐(1) 编辑

2020年7月5日

h5 移动端适配方案

摘要: h5 移动端适配方案 设定viewport 打开public\index.html,在html\head结点下加入<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum- 阅读全文

posted @ 2020-07-05 08:42 翰墨小生 阅读(3430) 评论(0) 推荐(0) 编辑

2020年7月1日

Ant Design Mobile 覆盖默认的样式。

摘要: 直接在css中这样写是不行的,完全没有效果。 .am-list-item.am-input-item { height: 36px; min-height: 30px; } 要像下面这样,加上global才有效果。 :global { .am-list-body { background-color 阅读全文

posted @ 2020-07-01 21:29 翰墨小生 阅读(1894) 评论(0) 推荐(0) 编辑

gyp verb check python checking for Python executable "python2" in the PATH - noda-sass安装的艰难之路。

摘要: 第一次安装出现如下错误: gyp verb check python checking for Python executable "python2" in the PATH gyp verb `which` failed Error: not found: python2 gyp verb `wh 阅读全文

posted @ 2020-07-01 21:12 翰墨小生 阅读(13761) 评论(1) 推荐(0) 编辑

2020年6月21日

Error: Activity class MainActivity does not exist.

摘要: 这是一个熟悉而又陌生的错误,当年做的第一个React-Native项目就有这个错误,一直没有解决,今天又出现了,原因是我改了项目文件夹的名称,用Android Studio重新打开之后,就又出现了这个错误。 解决办法也很简单,直接删除.idea文件夹,用Android Studio重新打开项目再次编 阅读全文

posted @ 2020-06-21 11:32 翰墨小生 阅读(1934) 评论(0) 推荐(0) 编辑

2020年6月6日

React优化

摘要: 背景 React开发的项目首页加载慢是常见问题,网上有很多优化手段,但是具体情况还要具体分析,最近用React撸了一个网站,周末无事,正好优化一下。 优化目标:https://www.shufadict.com - 书法字典。 分析 先看优化前的效果,可以看到主要是js下载太耗时。两个js加起来要3 阅读全文

posted @ 2020-06-06 12:09 翰墨小生 阅读(702) 评论(0) 推荐(0) 编辑

2018年3月18日

Android 隐藏系统状态栏

摘要: 通常的做法是这样的: 此方法大多数情况都能奏效,但是遇到Drawerlayout就歇菜了。目前还没有找到解决办法。 阅读全文

posted @ 2018-03-18 20:43 翰墨小生 阅读(4180) 评论(1) 推荐(1) 编辑

2017年8月21日

IOS应用内购(一)内购的种类

摘要: Glossary IAP - In App Purchase, 应用内购。 内购种类 consumable - 可消费的,比如游戏中的金币,金币可以购买游戏道具或者装备,这个金币是可以消费的,用完之后可以再购买。 non-consumable - 不可消费的,一次购买,永久生效,比如去广告,解锁游戏 阅读全文

posted @ 2017-08-21 21:35 翰墨小生 阅读(1399) 评论(0) 推荐(1) 编辑

2016年10月6日

Android获取View对应的Bitmap

摘要: 我的应用里面有一个需求,将一个画面分享出去,这个画面底层是一个View,所以首先要把这个View转换成Bitmap,然后在分享这个bitmap即可。话不多说,直接上代码。 有个地方需要注意一下:就是//Draw background的代码不能省略,否则生成的图片背景就是黑色的了。 == == 阅读全文

posted @ 2016-10-06 14:00 翰墨小生 阅读(8982) 评论(0) 推荐(0) 编辑

2016年9月10日

Android按需添加Google Play服务

摘要: 以前无论使用何种Google Play服务,都是直接在gradle文件中引用一个库。 这直接导致放法数超过了65535,后来发现从6.5版本以后是可以按需引用的,如下: 第一个是广告库,第二个是使用Google账号登陆用的授权库,第三个是Google Cloud相关库。这样应用程序会瘦身很多。 各种 阅读全文

posted @ 2016-09-10 12:50 翰墨小生 阅读(15208) 评论(0) 推荐(1) 编辑

2016年8月28日

Android自定义View的构造函数

摘要: 自定义View是Android中一个常见的需求,每个自定义的View都需要实现三个基本的构造函数,而这三个构造函数又有两种常见的写法。 第一种 每个构造函数分别调用基类的构造函数,再调用一个公共的初始化方法做额外初始化。 第二种 级联式调用,每一个构造函数调用比它多一个参数的构造函数,最后一个构造函 阅读全文

posted @ 2016-08-28 12:51 翰墨小生 阅读(5495) 评论(0) 推荐(0) 编辑

2016年1月22日

两个Fragment之间如何传递数据

摘要: FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来。有什么办法? Fragment之间不能直接通信,必须通过Activity来完成,具体步骤。 1. 在FragmentA中定义通信接口,通过该接口向Activity发送数据 阅读全文

posted @ 2016-01-22 16:01 翰墨小生 阅读(13002) 评论(0) 推荐(0) 编辑

2016年1月21日

SmartImageView

摘要: ==public class SmartImageView extends ImageView { public SmartImageView(Context context) { super(context); } public SmartImageView(... 阅读全文

posted @ 2016-01-21 22:30 翰墨小生 阅读(943) 评论(0) 推荐(0) 编辑

2016年1月18日

onSingleTapUp()和onSingleTapConfirmed()的区别

摘要: onSingleTapUp() - 在按下并抬起时发生,只要符合这个条件就触发该函数,没有任何附加条件。onSingleTapConfirmed() 同上者,但有附加条件,就是Android会确保单击之后短时间内没有再次单击,才会触发该函数。举个列子,如果监听双击事件:onSingleTapUp()... 阅读全文

posted @ 2016-01-18 20:20 翰墨小生 阅读(9998) 评论(0) 推荐(0) 编辑

2016年1月12日

Android Fragment add/replace以及backstack

摘要: 无论Fragment以何种方式加入,都不会影响backstack,backstack由addToBackStack函数决定,只有调用了这个函数,才会将Fragment加入返回栈。这个说法其实不太准确,返回栈记录的是Fragment切换的过程,所以加入返回栈的是Transaction,而不是Fragm... 阅读全文

posted @ 2016-01-12 10:48 翰墨小生 阅读(3512) 评论(0) 推荐(0) 编辑

2015年12月21日

InputStream与InputStreamReader的区别

摘要: InputStream是字节流,多用于读取二进制数据InputStreamReader是字符流,多用于读取文本文件。有不同的编码方式,如utf8等。可以在构造的时候指定编码方式。例如,两者都有一个无参read函数,前者读取一个字节并转换为int(0-255),后者读取一个字符并转换为int(最高两位... 阅读全文

posted @ 2015-12-21 11:02 翰墨小生 阅读(3793) 评论(0) 推荐(0) 编辑

2015年11月8日

Android手动签名

摘要: 在生成release build时可实现自动签名,所谓手动签名,就是在命令行下完成签名,落实到Android Studio里面,就是在terminal里面做。下面是三个命令,第一个签名,第二个验证,第三个对齐压缩。第三个命令可能会找不到zipalign这个命令,那么可以切换到zipalign所在的目... 阅读全文

posted @ 2015-11-08 16:49 翰墨小生 阅读(2727) 评论(0) 推荐(0) 编辑

2015年10月30日

使用后台服务数据更新UI

摘要: https://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/ 阅读全文

posted @ 2015-10-30 10:16 翰墨小生 阅读(550) 评论(0) 推荐(0) 编辑

2015年10月29日

Perl重命名当前目录下的文件

摘要: 下载的zip包解压后,中文都变成了乱码,就写了个脚本重命名文件。use strict;use warnings;use Cwd;sub main { my $dir = getcwd(); opendir my $DH, $dir or die "Can not open ... 阅读全文

posted @ 2015-10-29 10:18 翰墨小生 阅读(2037) 评论(0) 推荐(0) 编辑

2015年8月29日

PS 多次剪裁同一图片

摘要: 一个图品里面有两个小图,要分别抠出来。我以前的做法是,先扣一个,重新打开文件,再扣另外一个。今天发现一个简单的办法,不用重新打开文件。就是在扣完第一个的时候,打开历史记录面板,双击打开动作,就可以查看原始图片,再扣另外一个就行了。如果动作面板没有打开,可以在菜单栏中选择窗口-历史记录来开启。== 阅读全文

posted @ 2015-08-29 17:00 翰墨小生 阅读(1727) 评论(0) 推荐(0) 编辑

2015年8月23日

Win + D 和 Win + M的区别

摘要: 在Windows系统上,Win + D是显示桌面,Win + M是最小化所有窗口,咋一看,这两个快捷键貌似没有区别,但是在某些方面还是有细微的区别。 威力 从威力上来说,Win + D更牛逼,因为显示桌面意味着所有窗口都得消失,但是Win + M则不一定,比如,对于不支持最小化的窗口,Win + M 阅读全文

posted @ 2015-08-23 09:56 翰墨小生 阅读(27303) 评论(0) 推荐(5) 编辑

2015年8月10日

使用ViwePager显示图片时如何防止内存泄露。

摘要: 内存泄露的检测。1. 在Android Studio中运行你的应用,然后切换到输出窗口的Android tab。2. 尽情的玩耍你的应用,最好各个功能都用到,如果是Viewpager,则多滑动一些页面,观察内存的增长情况。如果是下面这样大致平稳的曲线,就没有内存泄露。如果是下面这样,阶梯状的曲线,基... 阅读全文

posted @ 2015-08-10 14:27 翰墨小生 阅读(1550) 评论(0) 推荐(0) 编辑

2015年8月8日

onCreateView中加载大位图

摘要: 我的一个Fragment中,加载了一个1024*1024的图片,非常卡。解决办法1. 将图片改为512*5122. 异步加载。final SmartImageView mizige = (SmartImageView)view.findViewById(R.id.mizige); //... 阅读全文

posted @ 2015-08-08 08:57 翰墨小生 阅读(808) 评论(0) 推荐(0) 编辑

2015年8月5日

在XML drawable中引用自定义颜色

摘要: ==先看一下一个xml drawable文件,这是一个button的样式。可以看到这里好几处用到了颜色,但是都是直接指定颜色值,如果我想引用一个外部颜色,比如定义在values/refs里面的。那该怎么办呢?先在values/refs.xml文件里面定义颜色,如下: #FFFFFF #0... 阅读全文

posted @ 2015-08-05 15:38 翰墨小生 阅读(9519) 评论(0) 推荐(0) 编辑

2015年7月27日

android:onClick vs setOnClickListener

摘要: 为Android Widgets添加点击事件处理函数又两种方法,一个是在Xml文件中添加onClick属性,然后在代码中添加对应的函数。另一个是直接在代码中添加setOnClickListener函数。两者什么区别呢?以Button控件为例讲解一下。方法一在Xml中添加onClick属性 在代... 阅读全文

posted @ 2015-07-27 14:34 翰墨小生 阅读(1305) 评论(0) 推荐(0) 编辑

2014年11月23日

【IOS】Target membership

摘要: Target membership是指XCode中,一个文件属于哪一个工程,在XCode左侧的工程面板中选中一个文件,在XCode右侧的属性面板中会显示其Target Membership,如下图。当前的文件AppDelegate.m属于书谱这个Target。Target Membership的一些... 阅读全文

posted @ 2014-11-23 20:26 翰墨小生 阅读(15502) 评论(0) 推荐(2) 编辑

获取IOS应用的子目录

摘要: 在开发IOS应用时,我们经常需要将素材分类,并放入相应地子目录中。在开发代码时,需要访问这些素材时,就需要获取对应的子目录路径。那么如何获取呢?获取应用路径首先,要找到应用所在的路径。NSString *bundlePath = [[NSBundle mainBundle] bundlePath];... 阅读全文

posted @ 2014-11-23 17:55 翰墨小生 阅读(4624) 评论(1) 推荐(0) 编辑

2014年6月28日

Direct2D教程(外篇)环境配置

摘要: 2014年世界杯首场淘汰赛马上开始了,闲着没事,整理以前的博客草稿打发时间,意外的发现这篇文章,本来是打算加入到Direct2D那个系列的,不知道为什么把它给遗漏了。环境配置,对于熟手来说,不是什么重要的东西,但是对于新手却很重要,尤其是没有接触过Direct2D的朋友们,整理一下发了出来,没有放博... 阅读全文

posted @ 2014-06-28 23:53 翰墨小生 阅读(12059) 评论(2) 推荐(5) 编辑

2014年6月10日

链表逆序(递归法)

摘要: 来自SO,貌似没啥实际应用,但是思路不错,留存。#include #include using namespace std;struct node{ int data; node* next; node(int d, node* p):data(d), next(p){}};voi... 阅读全文

posted @ 2014-06-10 16:23 翰墨小生 阅读(3034) 评论(0) 推荐(0) 编辑

2014年5月31日

GLFW初体验

摘要: GLFW - 很遗憾,没有找到FW的确切含义,Wiki上没有,GLFW主页也没有。猜测F表示for,W表示WindowGLFW是干啥用的?一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很... 阅读全文

posted @ 2014-05-31 08:42 翰墨小生 阅读(54380) 评论(17) 推荐(5) 编辑

2013年9月16日

用DirectX实现魔方(三)视角变换及缩放(附源码)

摘要: 在本系列第一篇介绍过鼠标按键的功能,如下。左键拖拽 - 旋转魔方右键拖拽 - 变换视角滚轮 - 缩放魔方今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现Model-View-Camera的重要技术,这里的旋转基于Quaternion(四元数)来实现,当然也可以通过欧拉角来实现,但是欧拉角的旋转不够平滑。先看一下Model-View-Camera的效果,如下,这个gif效果图是用LICEcap录制的,帧率有些慢,略有卡顿现象,大家可以下载文末的可执行文件查看更加平滑的效果。右键拖拽 - 变换视角由上面的动画可以看到,通过用户按下并拖拽鼠标右键即可以旋转视角( 阅读全文

posted @ 2013-09-16 09:50 翰墨小生 阅读(10644) 评论(17) 推荐(8) 编辑

2013年7月10日

用DirectX实现魔方(二)

摘要: 这篇说一下如何构造魔方,主要包括魔方几何体的构造及纹理贴图。以下论述皆以三阶魔方为例,三阶魔方共有3 x 3 x 3 = 27个小立方体。构造魔方在第一篇里面说过,最初模型用的是微软的.x文件格式,由于魔方要实现按层旋转,所以不能将整个模型做成一个.x文件,只能分成若干个小立方体,每个立方体对应一个.x文件。这导致在发布程序的时候也要发布这些模型文件,而且.x文件已经逐渐为微软遗弃,所以就干脆不用了,自己画吧。魔方由27个小立方体构成,所以只要绘制一个小立方体,并复制27分,再将这个27个小立方体按一定顺序堆叠在一起,最后贴上纹理,就可以构成一个完整的魔方了。一个小立方体包含六个面,由于每个面 阅读全文

posted @ 2013-07-10 09:22 翰墨小生 阅读(7429) 评论(26) 推荐(14) 编辑

2013年4月15日

Direct2D教程(十二)图层

摘要: 什么是Layers?Layer,中文译成图层,在Direct2D中可以用来完成一些特殊效果,使用Layer的时候,先将Layer Push到render target,然后进行绘制,此时是直接绘制在Layer上的,绘制完毕后,将Layer Pop出来,刚刚绘制在Layer上的内容就会组合到render target上。在Direct2D中,Layer使用接口ID2D1Layer来表示。和画刷一样,Layer由render target创建,属于设备相关的资源,Layer可以用于任何render target上,只要二者在相同的资源作用域内,在同一时间内,Layer只能用于一个render ta 阅读全文

posted @ 2013-04-15 09:40 翰墨小生 阅读(10142) 评论(41) 推荐(3) 编辑

2013年4月9日

Vim案例两则

摘要: 在博问中看见两个比较典型的Vim处理文本的案例,总结一下,希望对大家有所帮助。如果大家有好的方法,欢迎讨论。尤其是第二个案例,如果能够一个命令处理更好。案例一这是在博问中看到的一个问题,原始文本如下。要求处理成下面的样子,也就是把逗号从行尾移动到下一行第一个单词前面。我的第一想法是先将2-6行的逗号删除,然后在3-7行加上逗号即可。删除2-6行的逗号:%s/,// 解释一下:: 冒号在Vim里面是命令引导符,想要输入命令必须先输入冒号。% 表示匹配所有行s/old/new/ 表示用new来替换old。s表示substitude(替换)。在s/,//中,old是逗号,new是空(注意后面两个斜线 阅读全文

posted @ 2013-04-09 09:41 翰墨小生 阅读(2630) 评论(5) 推荐(2) 编辑

2013年3月26日

Direct2D教程(十一)几何变换

摘要: 什么是几何变换(Transform)在图形学中,主要有三种几何变换,分别是平移(Translate),旋转(Rotation)和缩放(Scaling)。在D2D中,这三种变换都有实现,而且还有一种不太常见的变换,倾斜(Skewing)。 Transform是指将一个点从一个坐标系映射到另一个坐标系,或者将一个点从同一个坐标系的一个位置映射到另外一个位置。在实际应用中,通常是将几何图形从一个位置变换到另外一个位置,而图形是由多个顶点组成的,只要将图形中的所有顶点都变换一下,那么整个图形就完成了变换,所以变换的本质是对顶点的变换。在D2D中,用如下三维矩阵M来表示这种变换。矩阵M的默认值是单位.. 阅读全文

posted @ 2013-03-26 09:09 翰墨小生 阅读(13123) 评论(9) 推荐(7) 编辑

导航

书法字典:https://www.shufadict.com