Laravel框架初识:扩展Auth功能

Laravel框架初识:扩展Auth功能
最近在尝试使用Laravel框架进行一些实际开发,框架本身提供了很多常用的Web应用的机制和库,虽然很好用,但是却不能包容我预期的设计,比如Auth模块,该模块提供了两种很基本的验证驱动,一个是Database,使用QueryBuilder来与数据库进行交互,另一个是Eloquent ORM,是采用其内置的ORM库来进行数据库交互(感觉类似于.Net中的EF),但是不论采取哪种驱动,都存在同样的局限性: 必须采用内置的Hash方案对入库的密码进行保护 这一局限使得原本系统设计中的MD5 + Salt方案受到了阻挠,尽管实现会稍显麻烦,但我仍然认为这种方案更适合于我的项目,因此我参考了Laravel文档中扩展章节所述的Auth模块扩展以及网上查阅的一些资料,来对原框架进行修改,使其能够支持有我自己定义的验证驱动。 首先介绍我所考虑使用的MD5 + Salt方案的具体设计: 数据库中不应该存储密码明码应该是一个基本安全常识,通常的方案是采用MD5算法对密码进行Hash,再存入数据库,从而避免数据库泄

五子棋游戏[4] – 人机博弈 – α-β剪枝及改进与总结

五子棋游戏[4] – 人机博弈 – α-β剪枝及改进与总结
继续填坑。按照计划,剪枝和改进总结本应该分为两次写,但是经过整理,发现剪枝部分的内容并不丰富,而改进与总结其实和剪枝一样,都是为了更快的搜索到一个比较优秀的解,故此我就在这一篇文章中全部写完。 在上一次的文章中我写了博弈类算法中最为重要的工具 – 博弈树的构造方式,并且描述了对其搜索的算法。另一方面也写了博弈算法的核心 – 状态评价的一种方案。经过上一次文章的描述,你应该已经可以写出一个可以和你进行玩耍的AI了,但是你会发现,和这个AI下棋,每一步都会很慢很慢,这种情况就是在提醒我们就需要考虑到搜索的效率了。 上一篇文章的博弈树搜索算法可以用这样一句话来评价:简单粗暴。没错,短短几行代码就完成了整个博弈的智能,但是对于搜索而言,简单粗暴并不意味着非常有效。我们可以来分析一下: 假设棋盘上的正中心已经下有一个棋子,那么棋盘上还有224个可以放置的点位,那么博弈树搜索的第一层就需要扩展224个状态节点; 接下来,每个状态节点都剩余223个可放置棋子的位置,所以需要继续扩展223个状态节点,所以第二层会存

五子棋游戏[3] – 人机博弈 – 博弈树

五子棋游戏[3] – 人机博弈 – 博弈树
距离上次写这个系列已经过去很久了,非常抱歉,现在呢我重新拾笔来填我自己挖下的这个坑。 在上一次的文章中,我们已经制作了整个游戏的最核心的框架,也就是说我们得到一个可以进行游戏的交互界面并且对游戏规则进行掌控的一个游戏类,在此前的文章中,我尽可能的让大家回避我所写的代码,因为这样会限制大家对整个游戏架构的思考,毕竟构建一个游戏的方式是多种多样的,我所想的方法并不一定是最好的,所以我希望大家自己去构建游戏的核心部分,我的文章仅作为一些提示。不过从这一篇文章开始,情况将有所转变,在完成的游戏核心部分之后,我希望让大家了解到的是,让游戏获得智能本身是一件又简单但又不简单的事情。 简单,是因为我们其实只是需要一个算法,能够替代两个玩家中的其中之一,这个算法的框架显而易见: 算法的输入数据就是当前棋局,算法通过分析棋局来计算并得出一个最佳的行棋位置。算法的需求是明朗简单的,但是难点就在于如何实现这个算法。 好在,有无数的人身先士卒,已经研究出了一类算法来应对这种博弈类问题,而且这种方法易于理解和实现...

PHP的include的有趣用法

PHP的include的有趣用法
在最近做的项目之中,用到了php的include方法来使得庞大的类的成员函数的内容独立出来,我们都知道include方法是将外部的一个文件引用进来,但是include有一些特殊的地方就是,它并不像C语言的宏那样是在程序运行前将需要的文件替换进来的,所以这样会导致一些问题,请看下面的代码: [crayon-5a0f12de3c6a6699996129/] 请注意这个类中的三个方法,Test1用作对照。 在inc.php中的代码是这样的: [crayon-5a0f12de3c6b7945381268/] 那么猜测一下Test2的运行结果会是怎样的?很显然,这样做是不正确的,在include后引用文件的代码会作为单独的一个代码区运行(但是很显然,这部分代码区会和引用处的代码区共享内存),但是在include语句中的return语句并不会被认为是外部函数的return,这使得include可以像无参数的一样使用,我们加入Test3: [crayon-5a0f12de3c6ba301271748/] 然

五子棋游戏[2] – 双人对战

五子棋游戏[2] – 双人对战
书接上回。时间间隔稍微有点远,但是我还是希望能够继续完结这一系列的文章。上一回我们已经建立了一个很标准的游戏框架,基于这个游戏框架我们只需稍加理解便可以完成这个五子棋软件的双人对战功能。 为什么要先讲解双人对战功能呢?因为其实AI vs. MAN的功能其实是MAN vs. MAN的一个子集,双人对战所完成的内容是包括游戏规则、游戏操作、胜负判定的一系列纯粹的游戏内容的实现,而加入AI只不过是将对战双方的其中一方的行棋改为了计算机自动计算。 在上一篇文章中我给出了一个类图,现在我再次给出。 其中Game类是我们这次的核心任务,因为整个游戏将如何进行基本上是由Game类来完成的,于是我们首先需要分析整个游戏的流程,由于我们要将分析的结果转换为程序逻辑,所以这个分析是必须逐步求精的,那么请跟着我一步一步的来把游戏的流程梳理清楚: 这是一个很标准的博弈类游戏的游戏流程,通常人们第一想到的就是这样的,但是这样的流程如果直接挪用到我们的游戏设计中就显得有些冗余了,现在回到我们之前的类图,之前我并没有解释

五子棋游戏[1] – 简介与设计

五子棋游戏[1] – 简介与设计
出于学校AI课程的设置,有一项可选的大作业是五子棋游戏,由于我比较倾向于实用主义,觉得做出来的东西可以玩才是王道,所以便选择了五子棋。由于之前的数据结构课程设计已经有了C#的使用基础再加之一个学期软件工程课程的锻炼,于是乎这次的设计我就想以非常标准化的方法来实现。 我这次并不会给出完整的游戏源代码,但整个游戏的结构我一定会力求完整的展现给大家,这样做也是希望大家能留有足够的思考空间,根据我自己的经验,看了别人的代码之后再自己写,多半也是循着那套思路在走,这样不利于学习。 五子棋大家都很熟悉,老少皆宜,规则相对比较简单,上手容易,但是要想成为高手,也是要下很大一番努力的。大家所熟悉的五子棋规则中主要分为“有禁手”,和“无禁手”两种,考虑到课程作业的简单性原则,以及其使用者(我?)五子棋水平有限,故在判断输赢方面,以“无禁手”的规则为标准。 五子棋的棋盘是一个15 * 15的方格棋盘,如下图所示: 由黑方执棋者先行,黑白两方交替放子,先使五个棋子连珠成线者获得当盘的胜利。 从这里我们就已经...

C# 在PictureBox 中绘图防止闪烁的办法

C# 在PictureBox 中绘图防止闪烁的办法
很久没发技术文章了啊……被人说装文艺了啊……我在乱说些啥吗………… 最近学校开了数据结构的课设设计,说是允许使用C++,Java和C#来进行开发。Java上上个学期学的,说实话,感觉真的不是很爽……或许是我电脑的缘故,也或许是心理作用,我总觉的NetBeans一开就卡得不行!无论怎样都得不到在VS中开发和调试的那种爽快感,于是一度打算投奔C++的阵营,还为此买了Qt的书来学习,不过由于一直以来被诸多事情所扰(懒?),Qt的学习就停留在了……编译完毕。好吧,我输了……C#,就决定是你了! 那么进入正题吧。 在课程设计的过程中,我需要在窗体上进行图片的绘制,但是在实际的测试中发现了问题,那就是重绘的时候会发生闪烁,这个问题其实在大一的C语言课设的时候就出现过了,在程序绘制动画的高频率刷新的时候,也会产生闪烁,而那时候的解决办法,是对动画进行双缓冲(Double Buffering)处理。 在被双缓冲这个名词吓到之前,我们先来探讨下为什么重绘的时候会发生闪烁: 说道动画的原理大家都懂,就是利用了人眼的视

Visual Studio 2012 试用

Visual Studio 2012 试用
Visual Studio 2012的MSDN版已经放出了,根据网友的反应和评价,基本上都说2012要比2010高效许多。于是乎尝鲜下载安装了之 下面是安装时的界面,采用了Modern UI设计,实话说这个UI并没有以前所感觉的那么丑,反而给人很舒服和谐的感觉,当然喽,萝卜青菜各有所爱啦。 安装结束。 启动的时候会要求设定默认配置,这个配置界面和以往的版本相差不多 欢迎界面。这次的VS是有两个主题风格的,一个浅色,一个深色,也都是Modern UI的风格,看来Windows 8已经把影响贯穿到了微软的整个产品线,同时根据官方介绍,VS2012对Windows 8的软件开发提供了良好的支持。 代码界面。在深色主题下,这个界面的确让人感觉很舒服,没有刺眼的感觉,以前要靠自己配置主题色彩(或者下载……)才能有这样的界面,感觉很舒服。 没有深度的体验,随着马上开始的课程设计,这个工具的使用频率将大大增加,若有什么新亮点,到时候再与大家分享啦~...