<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Thunder的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chengshaolei2012</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chengshaolei2012]]></copyright><item><title><![CDATA[使用pygame实现音乐播放器（四）]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114263581</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114263581</guid><author>chengshaolei2012</author><pubDate>Mon, 01 Mar 2021 16:01:11 +0800</pubDate><description><![CDATA[接下来，我们要实现播放进度。
]]></description><category></category></item><item><title><![CDATA[使用pygame实现音乐播放器（三）]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114241244</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114241244</guid><author>chengshaolei2012</author><pubDate>Mon, 01 Mar 2021 10:05:27 +0800</pubDate><description><![CDATA[接上一篇，现在我们播放器只有停止功能，没有播放功能，只能循环播放，下面我们实现一个停止/播放功能。


			
		首先准备播放和停止按钮：


			
		按钮的位置修改：STOPBUTTONPOS = pygame.Rect(203,290,73,68)

由于这两个按钮的位置相同，当点击播放的时候显示停止按钮，点击停止的时候显示播放，这就有必要设置一个全局变量区分一下状态：IS_PLAY = True

然后在主函数里加载按钮图片


start = pygame.image.load("images]]></description><category></category></item><item><title><![CDATA[使用pygame实现音乐播放器（二）]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114146310</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114146310</guid><author>chengshaolei2012</author><pubDate>Fri, 26 Feb 2021 19:16:17 +0800</pubDate><description><![CDATA[前一篇文章中我们已经实现了图片显示和音乐的播放，接下来实现按钮点击。点击按钮需要通过事件处理实现。

pygame是基于事件驱动的，也就是说如果没有任何事件，游戏会停下等待用户操作（事件），所以游戏里首先要有一个事件循环，不停检测用户的事件，否则程序会直接结束。在pygame中，用户按键、鼠标操作、窗口变化等都会产生事件，这些事件按照发生的先后顺序入队，我们可以在事件循环中，从事件队列中取出事件进行处理。




	事件获取

	我们可以使用以下方法从事件队列中获取事件，下面这些方法都返回事件对象。

	方]]></description><category></category></item><item><title><![CDATA[使用pygame实现音乐播放器（一）]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114144064</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/114144064</guid><author>chengshaolei2012</author><pubDate>Fri, 26 Feb 2021 18:26:39 +0800</pubDate><description><![CDATA[本教程通过pygame实现一个简单的音乐播放器，涉及pygame中图片显示、画图、事件处理、音乐播放、进度条实现、定时器]]></description><category></category></item><item><title><![CDATA[django分页实现]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/113900841</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/113900841</guid><author>chengshaolei2012</author><pubDate>Tue, 23 Feb 2021 22:24:20 +0800</pubDate><description><![CDATA[Django分页

Django提供了一个类Paginator用于分页，但Paginator并不具体管理具体的页的处理，而是使用Page对象管理具体页面。下面我们以一个具体的例子来说明一下分页的实现

文章模型：


class Articles(models.Model):
    tid = models.AutoField(primary_key=True)
    cid = models.ForeignKey('Category', models.DO_NOTHING, db_column='ci]]></description><category></category></item><item><title><![CDATA[1 爬虫基本概念]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/113897398</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/113897398</guid><author>chengshaolei2012</author><pubDate>Sat, 20 Feb 2021 22:05:51 +0800</pubDate><description><![CDATA[目录

一、什么是网络爬虫？

1、数据采集

2、调研

3、刷流量和秒杀

二、爬虫分类

1.通用网络爬虫

2.聚焦爬虫

3.增量式爬虫

三、如何编写爬虫

1.获取页面代码

2.解析页面提取想要的信息

3.存储（持久化，mysql、mongodb）/ 压缩 / 签名

4.数据清洗，归一化 ---&gt; 数据分析 ---&gt; 生成统计图表/报表

四、爬虫必备技能

1、python基础语法

2、如何抓取页面

3、解析内容

4、采集动态html

5、scrapy

6、分布式]]></description><category></category></item><item><title><![CDATA[lnmp忘记mysql密码怎么办？]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/73251534</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/73251534</guid><author>chengshaolei2012</author><pubDate>Wed, 14 Jun 2017 19:45:59 +0800</pubDate><description><![CDATA[有的时候装好lnmp后，会忘记mysql密码，这时候就要通过修改mysql的配置文件，来跨过数据库的密码验证来实现mysql密码的重置，具体步骤如下：

1、先确认lnmp的工作状态：      
如果lnmp正在running，则先将其关闭              
# /root/lnmp status 
# /root/lnmp stop
2、进入mysql配置文件：      ]]></description><category></category></item><item><title><![CDATA[php7新特性]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/73159228</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/73159228</guid><author>chengshaolei2012</author><pubDate>Tue, 13 Jun 2017 07:55:17 +0800</pubDate><description><![CDATA[1. ?? 运算符（NULL
合并运算符） 把这个放在第一个说是因为我觉得它很有用。用法： $a = $_GET['a'] ?? 1;它相当于： <?PHP $a = isset($_GET['a']) ? $_GET['a'] : 1;
我们知道三元运算符是可以这样用的： $a ?: 1但是这是建立在 $a
已经定义了的前提上。
1. ?? 运算符（NULL
合并运算符）
把这个放在]]></description><category></category></item><item><title><![CDATA[WAMP启动报错MSVCR100.dll丢失]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72895913</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72895913</guid><author>chengshaolei2012</author><pubDate>Wed, 07 Jun 2017 08:05:36 +0800</pubDate><description><![CDATA[最近电脑因为系统损坏无法启动，不得已重装系统，也让PHP程序员雷雪松下决心坚决的抛弃XP系统。这样一来跟上时代的步伐，二来也为Win7的市场占有率和消灭IE7以下浏览器做点贡献。，作为一个PHP程序员，装完系统的第一件事就是安装PHP的环境了，下面PHP程序员雷雪松就详细的和大家分享下如何解决WAMP启动报错”无法启动此程序，因为计算机中丢失
 MSVCR110.dll。尝试重新安装该程序以解决]]></description><category></category></item><item><title><![CDATA[PHP常用函数]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72895889</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72895889</guid><author>chengshaolei2012</author><pubDate>Wed, 07 Jun 2017 07:45:24 +0800</pubDate><description><![CDATA[（一）字符串函数
1.str_word_count：统计单词个数

2.count_chars：得到字符串里面字符的有关情况

3.str_len:得到字符串长度，就是有多少个字符

4.substr_count：统计有多少个字符串，比如统计is，this is PHP里面就会出现2个 is

5.strpos：定义字符串出现的首次位置（大小写不敏感   IS=is）

6.]]></description><category></category></item><item><title><![CDATA[php进阶之数据库设计/ 选择合适的表引擎]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72848085</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72848085</guid><author>chengshaolei2012</author><pubDate>Fri, 02 Jun 2017 21:46:30 +0800</pubDate><description><![CDATA[什么是表引擎
我们看到的表结构，它的本质是数据在硬盘中的存储。根据不同的特性，数据的存储方式不同。比如：对于每一条数据，在硬盘中它是怎么存储的，怎么压缩的，怎么建立索引和优化的，它的读取和写入是怎么实现的。这些完整的一条路径，我们称之为表引擎。
选择的依据
选择的依据，是我们的需求，我们的需求很大程度上决定我们的选择。有的时候，我们的习惯决策着这个过程。这里，我们关注一下方面：
并发性，同]]></description><category></category></item><item><title><![CDATA[学习PHP注意事项]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72848063</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72848063</guid><author>chengshaolei2012</author><pubDate>Fri, 02 Jun 2017 21:43:34 +0800</pubDate><description><![CDATA[1 多阅读手册和源代码

没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西，特别是很多有关于字符串和数组的函数。就在这些函数里面包括许多有用的功能，如果你仔细阅读手册，你会经常发现在以往的项目开发过程中，很多时候你在“重复发明轮子”，而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。另外，现在有很多使用PHP开发的开源程序。为什么不去学习和借鉴呢？下载一]]></description><category></category></item><item><title><![CDATA[rel、href、src、url的区别]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72847770</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72847770</guid><author>chengshaolei2012</author><pubDate>Fri, 02 Jun 2017 21:03:21 +0800</pubDate><description><![CDATA[我们在日常教学中经常会提到rel、href、src、url这几个单词。学生在刚接触的时候会经常搞不清楚该使用哪个。那么这四个单词到底是什么意思呢？我们先来了解一下这几个单词是怎么定义的吧。

1.url
百度百科上是这样解释的：
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示，是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL，它包含的信息指出文件]]></description><category></category></item><item><title><![CDATA[解析提高PHP执行效率的50个技巧]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72847718</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72847718</guid><author>chengshaolei2012</author><pubDate>Fri, 02 Jun 2017 20:55:47 +0800</pubDate><description><![CDATA[解析提高PHP执行效率的50个技巧 

1、用单引号代替双引号来包含字符串，这样做会更快一些。因为会在双引号包围的字符串中搜寻变量， 单引号则不会，注意：只有echo能这么做，它是一种可以把多个字符串当作参数的”函数”(译注：PHP手册中说echo是语言结构，不是真正的函数，故 把函数加上了双引号)。

2、如果能将类的方法定义成static，就尽量定义成static，它的速度会提升将近4]]></description><category></category></item><item><title><![CDATA[Thinkphp5使用阿里大于短信验证]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72836095</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72836095</guid><author>chengshaolei2012</author><pubDate>Thu, 01 Jun 2017 22:50:54 +0800</pubDate><description><![CDATA[现在各种平台登录验证很多时候会使用短信验证，快捷安全，有很多平台提供短信验证服务，相比较而言阿里大于价格比较便宜，快捷，所以在在千锋日常的php教学中多以此为例来说明短信验证的使用。下面我们在tp5中说明如何使用阿里大于进行短信验证。
一、首先到阿里大于平台上注册，创建应用
阿里大于地址为：https://www.alidayu.com/，点击免费入住，然后注册，注册完毕后，进入管理中心。如下]]></description><category></category></item><item><title><![CDATA[适配器模式]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676843</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676843</guid><author>chengshaolei2012</author><pubDate>Wed, 24 May 2017 15:32:12 +0800</pubDate><description><![CDATA[适配器模式，即根据客户端需要，将某个类的接口转换成特定样式的接口，以解决类之间的兼容问题。

如果我们的代码依赖一些外部的API，或者依赖一些可能会经常更改的类，那么应该考虑用适配器模式。

下面我们以集成支付宝支付功能为例。

1 问题

假设支付宝支付类的功能如下：
/**
 * 支付宝支付类
 */
class Alipay
{
    public function se]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676636</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676636</guid><author>chengshaolei2012</author><pubDate>Wed, 24 May 2017 15:14:21 +0800</pubDate><description><![CDATA[单例模式，正如其名，允许我们创建一个而且只能创建一个对象的类。

这在整个系统的协同工作中非常有用，特别明确了只需一个类对象的时候。

那么，为什么要实现这么奇怪的类，只实例化一次？

在很多场景下会用到，如：配置类、Session类、Database类、Cache类、File类等等。

这些只需要实例化一次，就可以在应用全局中使用。

本文我们以数据库类为例。

1 问题]]></description><category></category></item><item><title><![CDATA[简单工厂模式（三）]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676344</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676344</guid><author>chengshaolei2012</author><pubDate>Wed, 24 May 2017 14:50:41 +0800</pubDate><description><![CDATA[工厂模式，就是负责生成其他对象的类或方法。

1 类实现

比如，我们有一些类，它们都继承自交通工具类：
interface Vehicle
{
    public function drive();
}

class Car implements Vehicle
{
    public function drive()
    {
        echo '汽车靠四个轮子滚动行走]]></description><category></category></item><item><title><![CDATA[设计原则(二)]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676294</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72676294</guid><author>chengshaolei2012</author><pubDate>Wed, 24 May 2017 14:46:38 +0800</pubDate><description><![CDATA[设计模式有六大原则，这些原则是经过代码大神们不断总结的规律，目的是提高代码的复用性，降低耦合。

1 开闭原则

1988年，勃兰特·梅耶（Bertrand Meyer）在他的著作《面向对象软件构造（Object Oriented Software Construction）》中提出了开闭原则（Open Close Principle），它的原文是这样：“Software entities]]></description><category></category></item><item><title><![CDATA[UML类图详解]]></title><link>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72675203</link><guid>https://blog.youkuaiyun.com/chengshaolei2012/article/details/72675203</guid><author>chengshaolei2012</author><pubDate>Wed, 24 May 2017 12:22:09 +0800</pubDate><description><![CDATA[UML类图是一种结构图，用于描述一个系统的静态结构。类图以反映类结构和类之间关系为目的，用以描述软件系统的结构，是一种静态建模方法。类图中的类，与面向对象语言中的类的概念是对应的。

1 类结构

在类的UML图中，使用长方形描述一个类的主要构成，长方形垂直地分为三层，以此放置类的名称、属性和方法。



其中，

一般类的类名用正常字体粗体表示，如上图；抽象类名用斜体字粗体，]]></description><category></category></item></channel></rss>