设计模式学习笔记--设计模式的类型和六大原则
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
1.在hexo source文件夹创建一个CNAME文件,文件内容为完整的自定义域名,比如本站www.mulianju.com
2.执行hexo clean清除已经生成的public文件夹内容
3.执行hexo g重新生成
4.执行hexo d发布网站到github
Github服务器会设置mulianju.com为你的主域名,然后将www.mulianju.com和mulianju.github.com重定向到mulianju.com。
登录你的域名管理界面,创建一条CNAME记录,指向github pages项目原有地址
顺带提一下favicon吧,刚好操作差不多。
favicon就是打开我们网站的时候,浏览器标签左侧的那个小图标。这个图标通过在网站根目录放一个favicon.ico的图标文件就可以实现。
放到我们的hexo里,就是把这个图标文件放到source文件夹然后重复上面提到的清除到发布的操作就可以了~
favicon的制作工具可以自行百度,尺寸一般是16x16。
先放源码:
1 | .content { |
另外有两点需要注意:
阅读原文:css毛玻璃效果.
今天一个朋友在群里发了这样一个题目,说是小学二年级的数学题
文字版:
孙悟空要在花果山的小猴子们中选出“猴子将军”,于是他让2018只小猴围城一圈,从某一只小猴开始,顺时针依次报数,从1报到80,再从1报到10,一直循环下去直到每只小猴都报过11次数为止,所有报过7,也报过17的小猴会被选为“猴子将军”,那么这2018只小猴里有_____只“猴子将军”。
看到题目的时候真的很难相信这是小学二年级的题,反正现在我也没想出解法来
用程序傻逼数吧:
1 |
|
canvas元素是众多广泛使用的网络2D图像渲染标准之一。它被广泛用于游戏及复杂的图像可视化中。然而,随着网站和应用将canvas画布推至极限,性能开始成为问题。此文目标是给使用canvas画布元素的优化带来建议,去保证你的网站或者应用表现卓越。
下面是一些改善性能的建议
如果你发现你的在每一帧里有好多复杂的画图运算,请考虑创建一个离屏canvas,将图像在这个画布上画一次(或者每当图像改变的时候画一次),然后在每帧上画出视线以外的这个画布。
1 | myEntity.offscreenCanvas = document.createElement("canvas"); |
当你画一个没有整数坐标点的对象时会发生子像素渲染。
1 | ctx.drawImage(myImage, 0.3, 0.5); |
浏览器为了达到抗锯齿的效果会做额外的运算。为了避免这种情况,请保证在你调用drawImage()函数时,用Math.floor()函数对所有的坐标点取整。
在离屏canvas中缓存图片的不同尺寸,而不要用drawImage()去缩放它们。
你可能会发现,你有些元素不断地改变或者移动,而其它的元素,例如外观,永远不变。这种情况的一种优化是去用多个画布元素去创建不同层次。
例如,你可以在最顶层创建一个外观层,而且仅仅在用户输入的时候被画出。你可以创建一个游戏层,在上面会有不断更新的元素和一个背景层,给那些较少更新的元素。
1 | <div id="stage"> |
如果像大多数游戏那样,你有一张静态的背景图,用一个静态的
CSS transforms 特性由于调用GPU,因此更快捷。最好的情况是,不要将小画布放大,而是去将大画布缩小。例如Firefox系统,目标分辨率480 x 320 px。
1 | var scaleX = canvas.width / window.innerWidth; |
如果你的游戏使用画布而且不需要透明,请在画布上设置moz-opaque属性。这能够用于内部渲染优化。
1 | <canvas id="mycanvas" moz-opaque></canvas> |
文章转载自:
https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas
1 | rules: { |
1 | "off"或者0 //关闭规则关闭 |
1 | "no-alert": 0,//禁止使用alert confirm prompt |
在webpack的使用中,问题真是接连不断、应接不暇、接二连三、一错再错。。。
在此之前完全没有系统的学习(虽然觉得系统学过也结果差不多),都是用到哪查到哪,一步一个坑的这么来搞,这不,前两天才刚填过一个,这就又出一个。。。
某个页面开发过程中,webpack-dev-server版本(测试环境)下,测试已经完全ok,完美的项目结束了,结果一上线出现了问题–js报错:
1 | SyntaxError: Cannot declare a let variable twice :'e'. |
此问题只会出现在ios 10中
反复切换测试和线上环境代码,分析半天源码,确实找不出什么问题,完全摸不着头脑
google一下,还真发现了有同样问题的文章:
文里提到ios 10下的Safari有两个bug,其中一个问题跟我遇到的特别特别像,至少报错一样,而且对此问题的描述是:”其实我们都没有错,我们也没写错,uglify也没搞错,错的是Safari本身。“
这就恶心了。
对于此问题的解决方案:
1 | new UglifyJsPlugin({ |
照着此方法修改了配置文件,重新打包了一下,本以为会解决的问题,却完全没变化。。。
好吧,继续找
回到源码,一个模块一个模块的删掉,反复重新打包(这种调试还真是痛苦)
折腾了好久好久,终于定位到引起问题的模块,是一个swiper的应用,连同swiper一块删掉之后,页面就正常了。
于是,想到,是不是swiper版本有什么问题呢,尝试着换了一个版本,还真的可以了。。。
之前出现问题的版本是npm包托管的最新版swiper,最终改成引入本地lib的4.0.5版。
问题解决,完美上线~
最后,至于为什么webpack-dev-server承载的代码没出现问题,这个还不清楚,后期再慢慢研究吧
本文永久链接: https://www.mulianju.com/cannot-declare-a-let-variable-twice-e/
这个问题其实是个比较难遇到的问题,主要是因为我们特殊的的环境背景:我们的前端静态资源服务器的默认文件编码为GBK,我们的页面和开发环境下默认编码是utf-8,这就导致了,我们开发好的前端资源打包到服务器的时候,文件编码会自动转为GBK,因此,文件内的中文都会变成乱码。
在之前的webpack环境中,我有配置过uglifyjs进行自动转换unicode的操作,配置如下
1 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') |
配置中,uglifyjs是作为webpack的一个plugins来使用的。
这样配置,在之前的bebal以及es3环境下均没有什么问题,但近几天我在webpack中集成ts编译环境的时候,这么写却完全没有作用,为了解决这个问题,真真的查了很多很多资料啊(话说这部分的文档还真是粗糙,查资料都完全没有头绪)。
不过还好,最终还是有解决方案的:我仔仔细细的看了几遍uglifyjs官方文档,发现官方推荐的写法是这样的:
1 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') |
把环境中uglifyjs的使用方式修改之后,build一下,完美生效啦~
2018-08-27 15:39:38补充:
此问题是因为webpack版本升级成4.x.x造成的问题,怪自己疏漏寡闻吧。
最后感叹一下,前端发展的实在是太快了,我们这些老程序员写着写着代码,最后都快变新人了,很是杯具。。。
webpack这一整套的生态,真的内容太多了,前路漫漫,信心难立呀~~~
最近开始做webpack集成ts编译环境的工作,遇到很多问题,这里记录一下吧
今天的问题是在使用Object.assign的时候,编辑器报错了,提示Property ‘assign’ does not exist on type ‘ObjectConstructor’。
查了好久的资料找到几种解决方法:
还没搞清楚原理,暂时先这么叫吧
——- 2018-08-22 14:10:35 补充:此写法再ts里称为断言,请参考TypeScript 基础类型
1 | (<any>Object).assign({}, {}) |
1 | { |
1 | return {this.success, ...success.json() || {}}; |
如果使用的是非npm或webpack环境,那直接粘贴以下代码到你的代码里就好了
1 | if (typeof Object.assign != 'function') { |
本文永久链接: https://www.mulianju.com/property-assign-does-not-exist-on-type-objectconstructor/
首先确认服务器处于安全的状态,也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对 外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。
在[mysqld]的段中加上一句:skip-grant-tables
例如:
1 | [mysqld] |
保存并且退出vi。
1 | $ service mysqld restart |
1 | $ mysql |
1 | $ vim /etc/my.cnf |
将刚才在[mysqld]的段中加上的skip-grant-tables删除
保存并且退出vim
1 | $ service mysqld restart |
转自:https://www.cnblogs.com/sbaicl/articles/3132010.html
本文永久链接: https://www.mulianju.com/MySQL-for-Linux-ERROR-1045/