0

[转载] MySQL Change a User Password

转自:https://www.cyberciti.biz/faq/mysql-change-user-password/

How to change user password on mysql

Mysql change user password using the following method:

  1. Open the bash shell and connect to the server as root user
  2. mysql -u root -h localhost -p
  3. Run command:
  4. ALTER USER ‘userName’@’localhost’ IDENTIFIED BY ‘New-Password-Here’;

Please note that use mysql.exe on MS-Windows host as follows (first change directory where mysql.exe is located [example: “C:\Program Files\mysql\mysql-5.0.77-win32\bin”]. Let us see examples and syntax in details.

mysql sql command to change a user password

Login as root from the shell:
$ mysql -u root -p
Switch to mysql database (type command at mysql> prompt, do not include string “mysql>”):
mysql> use mysql;
The syntax is as follows for mysql database server version 5.7.5 or older: read more

0

TICTOC: Header Only C++ Timer

感觉最近的更新频率略高啊~哈哈~

这次的带来的是一个十分简单便利的C++计时库。

项目地址:https://github.com/miaoerduo/tictoc 欢迎Start和提MR

项目中有详细的说明和Demo,可以很直观的体验到这个库的易用性。

先看一下效果,如果我们正确使用的话,大致会出现类似下面的信息:

可以显示,我们的每个区域的代码(包括行号)的消耗时间。精确到微秒。

起因是这样的,之前有很长时间的工作内容是优化一些特定的函数,保证新旧的SDK的速度的对齐。然后C++虽然有一些工具可以分析运行状态,但通常还是简单的打印时间来的方便 /* Print大法好 */ 。之后,和工程的小伙伴一起Debug的时候,就发现他写了一个头文件,然后用绝对路径的方式去include,而头文件里面就是各种常用的小工具,而最常用到的就是时间的打印。 read more

0

vim配置

下面是我的VIM的主要配置。应该就是网上找到的一个,加了点功能。权当在这里备份一下了。

将下面的内容写入自己的~/.vimrc文件即可。

针对自动跳转到上次关闭位置的这个功能,我在Ubuntu 14这个系统上失败了一次。是由于viminfo文件的权限不对。使用ls -l ~/.viminfo。如果发现其创建用户不是当前用户的话,那么可以将其删除。下次打开vim的时候会自动新建。这样就搞定了!

另外,附上Ubuntu下,VIM 8升级的命令:

0

本站的WordPress插件一览

其实Jetpack这个插件里面已经提供了大量的工具。如果安装了这个插件,那么下面的很多插件都是可以不用安装的。不过在国内使用Jetpack这个插件有点麻烦。我这里就一直没有用,等换了国外的服务器之后,之前的博客的很多内容都得重新编辑,太麻烦了,所以干脆不用了。

1. Akismet Anti-Spam

网址:https://wordpress.org/plugins/akismet/

由千百万人使用,Akismet可能是保护您的站点免受垃圾评论的世界上最好的方式。 您的站点已完全配置并受到不断的保护。

这个插件可以很好的过滤掉垃圾的评论。

2. Captcha

网址:https://wordpress.org/plugins/captcha/

This plugin allows you to implement super security captcha form into web forms.

顾名思义,这个插件可以为用户登录,访客评论添加验证码的服务。用上验证码插件之后,基本上就没有什么垃圾评论了。最重要的是,这个验证码插件很有逼格!

3. WP Super Cache

网址:https://wordpress.org/plugins/wp-super-cache/

WordPress的快速缓存插件。

这个插件支持缓存我们网站上的很多资源,这样可以避免每次PHP都重新生成,所以能加速网站的响应。同时它支持CDN服务,比较麻烦的是它不支持直接把静态资源上传到CDN服务器,因此得我们自己上传。

这里,我写了一个小工具,可以使用FTP,同步本地的静态资源到远程服务器。项目地址:https://github.com/miaoerduo/FTPSync

注意,不要把php等文件上传了,这样会泄露你的密码。

4. UpdraftPlus WordPress Backup Plugin

网址:https://wordpress.org/plugins/updraftplus/

Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.

用来备份网站的插件,数据库,服务器等都是不靠谱的,要想我们的网站长存,就得定期备份。BTW,我的网站更新频率很低,所以是一周一备份的。

5. TinyMCE Advanced

网址:https://wordpress.org/plugins/tinymce-advanced/

Enables advanced features and plugins in TinyMCE, the visual editor in WordPress.

强大的在线编辑器插件。以至于装上这个插件之后,我基本上都是在网页端写博客。

6. Crayon Syntax Highlighter

网址:https://wordpress.org/plugins/crayon-syntax-highlighter/

支持多语言、不同主题,高亮来自URL、或本地文件或文章文本。

代码高亮插件。我一直再用。截止到目前,已经有2年没有更新了。。。

7. TablePress

网址:https://wordpress.org/plugins/tablepress/

为您的文章和页面嵌入美观且功能丰富的表格而不需要编写任何代码。

WordPress内置的表格不好看,我都是用这个的。

8. WP QuickLaTeX

网址:https://wordpress.org/plugins/wp-quicklatex/

Access to complete LaTeX distribution. Publish formulae & graphics using native LaTeX syntax directly in the text. Inline formulas, displayed equations auto-numbering, labeling and referencing, AMS-LaTeX, TikZ, custom LaTeX preamble. No LaTeX installation required. Easily customizable using UI dialog. Actively developed and maintained. Visit QuickLaTeX homepage for more info.

让WordPress支持Latex,这样就可以插入复杂的Latex公式了。

9. WP Statistics

网址:https://wordpress.org/plugins/wp-statistics/

Complete WordPress Analytics and Statistics for your site!

统计功能。每天看看自己博客的访问量,也会很开心。

10. Easy Custom Auto Excerpt

网址:https://wordpress.org/plugins/easy-custom-auto-excerpt/

Auto Excerpt for your post on home, front_page, search and archive.

我们一般的WordPress文章,文章的所有内容都会全部显示,这样很不友好。这个插件可以帮我们自动生成摘要。

11. Scalable Vector Graphics (SVG)

网址:

https://wordpress.org/plugins/scalable-vector-graphics-svg/ read more

0

博客服务器维护中的小技巧

这里记录了小喵的博客的服务器的一些小的技巧,包括安装和各种参数的配置,便于以后查看。不定期更新。

1. LNMP环境的配置——oneinstack

LNMP环境就是Linux、Nginx、Mysql和Php这四个的组合,由于这四个都是免费的,因此在网站搭建的时候最常使用到,另一个名词是LAMP,其中A表示的是Apache。但Apache比较占资源,所以我用的还是Nginx。

这里,网上应该有超多的教程,我当时配置的时候也是参考了各种教程,但最终还是放弃了,自己去配置这些东西真的好难。于是,我就把目标转向了各种集成好的环境了。

如果使用的是阿里云或者腾讯云的服务器,那么直接在应用市场上中就有配置好环境的LNMP。如果是自己的服务器,就可以使用 https://oneinstack.com/ 这里提供的一键安装的脚本。

同时oneinstack中,还提供了新建虚拟主机,新建FTP服务器,一键升级软件等各种超实用的功能,十分建议使用。

2. 优化php-fpm的内存占用问题

这里,我们如果使用htop命令查看各种资源占用,会发现,php-fpm这个程序居然占用了10%的内存!明明网站是空闲的,但是内存还是被占用着。

参考 https://segmentfault.com/a/1190000010413463 中的解决方案。

打开/usr/local/php/etc/php-fpm.conf这个文件,该文件是php-fpm的配置文件。不同的版本可能安装的地方不太一样。

打开之后,有这么一段配置:

其中pm = dynamic会使得内存中永远都有php-fpm的进程存在,这样会很大长度的浪费内存,所以把这句改成pm = ondemand。变成:

这样,只有在系统需要的时候,才回产生php-fpm的子进程。子进程会在内存中保留pm.process_idle_timeout这么久的时间之后退出,这里就是10s的时间。

之后重启我们的php-fpm,就会发现内存占用变少了很多。

0

Python Trick

这里主要记录一些Python使用上的小技巧,以后使用的时候可以方便查阅。不定期更新。

1. 豆瓣源

使用pip为python安装一个第三方库的时候,由于国内可能不方便下载国外的库,这里可以使用豆瓣源来加速。只需要加上参数-i https://pypi.douban.com/simple/即可。比如安装scrapy就可以使用如下的指令:

2. Python环境管理

很多时候,我们可能需要用到不同版本的python,比如2.7和3.4两个版本。这时候可以使用virtualenv,virtualenvwrapper等工具。但实际上anaconda本身就已经支持python的版本控制了(我一直用的anaconda)。比如我们要新建一个2.7版本的python环境,就只需要输入:

这样就创建了一个2.7版本的python,且这个python环境的名字叫做py27。

我们如果需要使用这个环境只需要输入指令:

之后就进入我们的全新的python环境了,想退出环境则输入:

如果需要给我们新建的环境也安装anaconda的全套环境,则需要输入:

安装过程是很慢的。我们如果需要给这个环境安装第三方库的话,可以激活这个环境然后使用pip安装,或者使用:

来安装,package_name就是我们要安装的库。

如果我们需要删除现有的环境,使用指令:

如果不使用--all,而是指定一个库,则会删除该库,比如:

就会删除package_name对应的库。

最后一个指令是查看现有的python环境:

3. 简单HTTP服务

使用Python可以通过命令创建HTTP服务器,这在局域网中传输文件,或者测试服务器连通等情况下十分有效。

在Python2中,使用如下命令:

这样就可以创建一个监听本地8000端口的HTTP静态资源服务。

在Python3中,命令改成:

效果同上。

4. 给Python的类或对象动态添加成员函数

https://www.ianlewis.org/en/dynamically-adding-method-classes-or-class-instanc

0

小喵的在线共享编辑器

小喵的唠叨话:写这篇博客的初衷是因为看到了室友电脑面试的时候,面试官要求在线写代码。然后就想到,如果两个人能够在同一个页面进行编辑工作,不就能更方便的调试代码了吗?(PS.懂linux的screen或tmux的可以绕道了。)代码十分简单,在一个月前就写完了,只是一直没有时间写博客说明一下。

心急的同学可以在 http://editor.miaoerduo.com/?doc=demo 先预览一下效果。打开页面两次,进行编辑工作时会发现两边的页面做出了同样的修改。

github:https://github.com/miaoerduo/shared-editor 欢迎forkstar

那么,实现一个这样的在线的共享编辑器需要哪些工作呢?我们下面一点一点的说明。

一、写在前面

熟悉Linux的同学都知道screen和tmux这两个工具。通常我们可以使用他们来执行一些长时间的任务,也可以使用他们的共享终端的功能。在结对编程中,这是很有效的一个工具。

本文要实现的,是和上述两个工具类似的共享编辑器。要说优点的话,可能就是更亲民一些,打开网页就能使用。很适合远程帮女票看个代码啥的(好像很多公司里面会截断websocket,这样就没法用了)。

实现一个这样的编辑器,主要有两个部分。编辑器和同步数据的服务端。下面我们依次介绍。

二、在线编辑器

首先,我们需要一个好看的编辑器。调研了一下,找到了ACE这个编辑器,网址是 https://ace.c9.io ,简单的了解了一下这个编辑器,发现居然连Github用的都是这个编辑器!看来我们选择这个编辑器是没错的啦。

使用起来也异常的简单,官方的Demo如下:

上面的script中的src可能需要换成可以访问的链接。之后就能预览到编辑器的效果。大致和前面小喵的效果类似。

具体的其他的用法可以在官网中查到,这里小喵就不着重介绍了。

三、消息同步机制

选择好合适的编辑器之后,我们需要做的就是消息通信的功能了。

这里主要有四种情况:

1. 文档同步。当用户修改文档的时候,其修改的部分必须同步到所有的阅读改文档的用户。这里只同步修改的部分,因为每次都同步整个文档,那么会很消耗带宽(总不能输入一个 “hello world”都同步十几次文档吧)。

下图是一个示例(强势安利一下:https://www.processon.com 这个画图的工具)。用户1编辑了文档,文档更新的内容发送给了服务器,服务器将更新的内容组播到所有打开相同文档的用户(注意,这里不是广播,广播是向所有的用户发送),同时更新自己的远程备份。

图1 文档更新

2. 文档副本。当用户第一次访问已经存在的文档的时候。这个时候,该用户需要加载页面的所有的内容。因此我们的服务器端需要存放完整的文档的副本。

如下图,用户3打开了这个文档,这时候会请求服务器发送完整的文档信息。

图2 新增用户

3. 文档销毁。小喵这里的文档的内容是直接在内存中保存的。这样的好处是很方便,不需要额外的控制数据库啥的。但是弊端也很明显,虽然每个文档可能比较小,但如果文档创建的比较多,就会一直消耗内存。所以当没有用户使用文档的时候,需要删除文档,这样服务器端就需要保存一个引用计数。计数为0,就删除文档。

4. 冲突解决。考虑到网络可能会出现故障,用户在编辑文档之后,其他的用户可能并没有即使同步,这样就出现文档落后的情况。一个简单的策略就是,每次文档修改之后都返回一个时间戳,下一次修改文档的时候要将这个时间戳作为参数发送到服务器,如果时间戳不是最新的,那么就刷新整个文档。当然这个策略也有很多的不足之处,如果大家能有什么改进,烦请告诉小喵一下~

上面就是设计部分,具体实现的话,需要用到WebSocket技术,这是浏览器和服务器实时通信的一个很好的工具。WebSocket有很多语言的实现,小喵这里选择的是比较容易上手的socket.io

socket.io 不仅支持用户和服务器的点对点通信,还支持组播、广播的操作。简单的学习一下,就可以完成上面的设计。

这里,小喵也不在代码层面上解释实现了。感兴趣的同学可以看看小喵的github: https://github.com/miaoerduo/shared-editor 能够给小喵提交一些PR的话就更好了。

四、写在后面

终于写完这篇博客了,拖了快两个月了。之前迟迟没有动手的一个原因是比较忙,更多的可能因为自己有点懒,一直不想画解释原理的示意图。现在终于写完了,还是挺开心的。

这次的博客相比之前的,更多的是介绍设计的思路。反正代码都在github上了,大家可以随意食用~

希望能和大家一起进步!

 

转载请注明出处,谢谢~

 

8

简易漫画网站搭建-漫画喵Server版

小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具。因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机、Pad看漫画了。

先放上项目的地址:https://github.com/miaoerduo/cartoon-cat-server ,欢迎大家随时star、fork和指教。

关于漫画爬虫的内容,请参看之前的博客:https://www.miaoerduo.com/python/爬虫-漫画喵的100行逆袭.html

写在前面

这里,我们先试着思考几个问题:

1、为什么要做一个漫画网站,而不是APP呢?

小喵最开始其实是打算做一个QT的漫画阅读软件,这样能够在各种操作系统上用。开发了一小段时间之后,觉得用手机或者Pad看漫画的情况会更多。难道要给手机、平板甚至是PC都编写一套软件吗?这个小喵确实能力上达不到。其次是,如果是本地的APP的话,图片可能还是需要存到设备上,这样同样很麻烦。于是,漫画网站就成为最适合的选择,只要在联网的情况下(或者在同一个局域网中),只要有浏览器,就能够看漫画。这才是真正的跨平台,也是小喵要编写这个工具的原因。

2、那么,一个简单的漫画网站可以怎么去实现呢?

讲道理的话,其实单纯的静态的网页可能就足够了,给每个漫画图片编写一个页面,包含图片、下一页、上一页等部分就可以。页面的生成可以是一个脚本程序。不过这样的话,也有点麻烦,而且最终的页面的数目可能会很多。小喵不喜欢这种方式。
这里,小喵采用的方式是前、后端分离的方式。
整个网站由三个部分组成:

  • 数据:也就是漫画本身。
  • 后台:后台程序的功能是根据请求返回用户漫画的列表、章节和图片URL等信息。
  • 前端:调用后台的程序,得到漫画的信息并友好的进行显示。

3、最后,我们使用什么技术来实现呢?

前端的话,使用标准的Html,Css和Js就可以。后台是个API Server,Python + Flask 或者 Nodejs + Express 都是不错的选择(使用起来很简单。。。),小喵这里就选用 Nodejs + Express 的方式编写后台(一直写Js就可以了 😛 )。另外,大型的漫画网站,漫画的信息应该会存到数据库中,这样会方便查找和管理。这里考虑到漫画数目比较少,就去掉了数据库这一步骤,直接通过文件操作来得到漫画信息,工作量也大大减少了。

 

先看一下最终的效果图(虽然界面很简单):

图1 网站的最终效果图

现在,喵粉们是不是已经迫不及待的想要动手写代码了呢?

一、目录结构

下面是小喵的目录结构:

main.js 这里就是后台API的程序。因为功能很简单,所以就放在一个文件中。

package.json 是nodejs的包管理器,在这里可以定义依赖。我们这里只依赖Express。

public 这个文件夹用来存放静态的资源,包括Html、Css、js、image以及漫画资源(store)。

二、后台程序

1. 依赖安装

原生的 Nodejs 就已经十分适合写API程序了,Express 只是让它更加的方便了而已(至少对于这个项目来说)。

Nodejs 的安装十分简单,在官网上 https://nodejs.org 有下载链接,服务器上使用 apt-get 等工具也很容易安装。

Express 的话,可以使用npm install express —save 来安装。这里小喵使用的package的方式来安装。在项目根目录新建package.json文件,写入配置信息:

之后使用 npm install 命令就可以完成安装。安装完成之后会发现根目录多了一个 node_modules 文件夹,里面就是我们的依赖库了。喵粉们如果下载了我的这个项目的话,第一步也是要进入项目目录然后输入 npm install 。

2. 漫画的文件结构

我们的漫画资源都是通过 漫画喵 这个爬虫工具下载下来的,因此漫画都是每个章节都是一个文件夹,每个章节的漫画图片都放在对应的文件夹中,而且按照页码来命名。

这样通过遍历文件夹似乎就能获取漫画的信息了!

漫画列表和章节中的图片列表都可以通过上述的方式来解决,但是章节的列表却不行。因为漫画的章节有时候并没有明确的顺序(比如突然出现一个番外篇啥的),这样遍历文件夹默认的顺序(按名称)就可能是错误的。

我们有两个解决办法:

  1. 按照文件夹的创建时间来显示文件名。这样有点不灵活。
  2. 在每个漫画的根目录建一个文本文件,用来存放章节的信息。

小喵选择第二种策略,创建这个list的方法十分简单粗暴,在漫画目录下面使用:

ls 是linux上面的显示目录的工具,-t 表示按时间排序(最上面是最新的),-r 表示倒序,> 是重定向,最终输出到index这个文件。然后编辑这个文件,删掉index这一行(系统貌似是先生成index这个文件,然后再执行ls,最后把结果输入到文件中,因此文件里面多了一个index的文件名),再做一些必要的调整。

Windows上可以使用:

dir 是windows的查看目录的命令,/OD 表示按照时间排序,/B 表示只显示文件名,> 重定向到index。windows上的这个列表文件中也会出现index这个文件名(看来各种操作系统都一样)。另外需要注意的是windows的换行和linux或mac不一样。

这样,我们就可以通过读这个index文件来获取章节的信息了。

最终的漫画的结构(为了显示的方便,删除了很多图片和章节)如下:

3. API 编写

Express十分的容易使用。这里小喵给一个官网的Hello World的教程让大家看一下:

将上述代码保存成 main.js,使用 node main.js 就可以启动这个程序,然后用浏览器访问 http://localhost:3000 ,就能看到一个显示着 hello world 的页面。

require 语句用来引入依赖,app 是express的封装的对象。通过 app.get 方法就可以给指定的url(官方说法叫route)绑定相应的处理方法(GET方法的请求)。处理函数有2个参数 req 表示request,也就是用户的请求,通过这个对象我们可以获取用户的输入的参数,res 表示response,是一个向用户返回数据的对象。

listen 用来监听一个端口启动服务。

 

这里小喵先给出自己定义的一些辅助的函数,定义错误信息和参数校验,后面会使用到:

1) get_cartoon_list read more

0

新浪微博爬虫实现

  小喵的唠叨话:由于项目需要(其实是个小兼职),需要抓取新浪微博的用户的微博数据。小喵在努力研究了一晚上之后,初步掌握的抓取的方法。所谓聪明的喵不吃独食,特来与大家分享。作为小喵的第一篇博客,小喵努力写了很久,如果写作上有什么不清晰的地方,也欢迎大家指正。

一、分析新浪微博的网页

  这里选择手机版的新浪微博,即:http://m.weibo.cn。原因如下:
手机版的微博内容和电脑版的一样,但是信息比较直接,并且手机网页的验证等操作也要较电脑版简单。故为了便于分析,选择手机微博是一个明智的选择。
登录进微博,随便打开一个关注的微博,查看其主页网址(例如:http://m.weibo.cn/u/1630461754)。
对比可以分析出:

  • 每个用户应该有唯一的网址(当然有的用户有自己的个性域名),而这个网址的最后面的数字很可能是用户的唯一标示。(在后面,我们也验证了该数字确实是用户的uid
  • 所有的微博主页都是以http://m.weibo.cn/u/{uid}的形式(这不绝对,因为实验中确实发现的别的类型的网址,但大多数都是这个样子)。
  • read more