crodas/text-rank textrank算法提取关键词、描述信息

README

extract relevant keywords from a given text

How to use it

In order to use the class, you must instance a Config object.

<?php

require __DIR__ . "/vendor/autoload.php";

use \crodas\TextRank\Config;
use \crodas\TextRank\TextRank;

$config   = new Config;
$textrank = new TextRank($config);

$keywords = $textrank->getKeywords($some_long_text);

var_dump($keywords);

It is possible to get better results by adding few information about the language (stopword list, stemmer with pecl install stem).

<?php

require __DIR__ . "/vendor/autoload.php";

use \crodas\TextRank\Config;
use \crodas\TextRank\TextRank;
use \crodas\TextRank\Stopword;

$config = new Config;
$config->addListener(new Stopword);

$textrank = new TextRank($config);
$keywords = $textrank->getKeywords($some_long_text);

var_dump($keywords);

By doing this it will detect the language of the text and will remove common words (from the stopword list). If ext-stem is available the results will be even better.

Summarize large texts

This class is also capable of summarizing long texts

$config = new \crodas\TextRank\Config;
$config->addListener(new \crodas\TextRank\Stopword);
$analizer = new \crodas\TextRank\Summary($config);
$summary = $analizer->getSummary($text);         

$summary is at most 5% of the sentences of the text.

https://packagist.org/packages/crodas/text-rank

https://github.com/crodas/TextRank

安装是重点


composer require crodas/languagedetector

composer.json 文件加 autoload内容 src/lib/ 对相应 textRank 算法目录

需要到github下载 https://github.com/crodas/TextRank


{
"require": {
"crodas/languagedetector": "^0.1.1"
},
"autoload": {
"classmap":["src/lib/"]
}
}

PHP Session锁及并发机制 | void session_write_close(void)函数

手册中有这样的描述:
void session_write_close ( void )

End the current session and store session data.

Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.

也就是说session是有锁的,为防止并发的写会话数据,php自带的的文件保存会话数据是加了一个互斥锁(在session_start()的时候)。
程序执行session_start(),此时当前程序就开始持有锁。
程序结束,此时程序自动释放Session的锁。

如果同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能。因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。这样,同时多个请求就会引起阻塞。解决方案如下:
修改会话变量后,立即使用session_write_close()来保存会话数据并释放文件锁。

session_start();   
$_SESSION['test'] = 'test';
session_write_close();
......
//do something

有哪些适配微信小程序的开源UI项目?分享几个微信小程序开发框架

1.基于规范的小程序 UI 组件库,自定义标签组件,简洁、易用、工具化 https://meili.github.io/min/docs/minui/

https://meili.github.io/min/docs/minui/index.html

 

2.高颜值、好用、易扩展的微信小程序 UI 库,Powered by 有赞

https://github.com/youzan/zanui-weapp

 

3.A UI library by WeChat official design team, includes the most useful widgets/modules.

https://github.com/Tencent/weui-wxss

https://weui.io/

4.wux – 微信小程序自定义组件(对话框、指示器、五星评分…)

https://github.com/skyvow/wux

5.微信小程序日历组件

https://github.com/iamaddy/calendar

6.https://github.com/TalkingData/iview-weapp

7.https://github.com/aben1188/awesome-wepy

8.城市组件https://github.com/shmy/we-city-select

9. 微信小程序组件和功能封装,基于微信Component自定义组件开发

https://github.com/ChanceYu/weapp

10.https://www.bidianer.com/bag/443

 

 

【小程序开发框架】

1、官方框架MINA

小程序提供的开发框架为MINA框架,它类似于淘宝Weex、Vue框架。MINA框架通过封装微信客户端提供的文件系统、网络通信、任务管理、数据安全等基础功能,对上层提供一整套JavaScript API,让开发者能够非常方便地使用微信客户端提供的各种基础功能与能力,快速构建一个应用。

地址:

https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html

2、美团小程序框架mpvue

mpvue 是美团点评开源的一个使用Vue.js开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的  runtime 和  compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。使用  mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:

  • 彻底的组件化开发能力:提高代码复用性
  • 完整的 Vue.js 开发体验
  • 方便的 Vuex 数据管理方案:方便构建复杂应用
  • 快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload
  • 支持使用 npm 外部依赖
  • 使用 Vue.js 命令行工具 vue-cli 快速初始化项目
  • H5 代码转换编译成小程序目标代码的能力

Github:

https://github.com/Meituan-Dianping/mpvue

官网:

http://mpvue.com/

3、Tina.js 一款轻巧的渐进式微信小程序框架

tina-js.jpg

特性: 轻盈小巧。 极易上手,保留 MINA (微信小程序官方框架) 的大部分 API 设计;无论你有无小程序开发经验,都可以轻松过渡上手。 渐进增强,既有状态管理器,也有路由增强,还可以自己编写插件。

Tina.js 开源框架地址:

https://github.com/tinajs/tina

4、组件化开发框架wepy

WePY 是一款让小程序支持组件化开发的框架,通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序。框架的细节优化,Promise,Async Functions的引入都是为了能让开发小程序项目变得更加简单,高效。

特性:
  • 类Vue开发风格
  • 支持自定义组件开发
  • 支持引入NPM包
  • 支持Promise
  • 支持ES2015+特性,如Async Functions
  • 支持多种编译器,Less/Sass/Styus、Babel/Typescript、Pug
  • 支持多种插件处理,文件压缩,图片压缩,内容替换等
  • 支持 Sourcemap,ESLint等
  • 小程序细节优化,如请求列队,事件优化等

Github地址:

https://github.com/Tencent/wepy

官网地址:

https://tencent.github.io/wepy

5、前端框架weweb

weweb是一个兼容小程序语法的前端框架,你可以用小程序的写法,来写web应用。如果你已经有小程序了,通过它你可以将你的小程序运行在浏览器中。

特性: 跨平台,一套代码多端运行(小程序、h5、未来直接打包成安卓、ios app也不是梦) 自带常用组件,完美继承了小程序内置组件 兼容小程序rpx语法,使页面更容易适配各种机型

地址:

https://github.com/wdfe/weweb

小程序开发工具

1、图片处理工具Jinaconvertjinaconvert.jpg

Jinaconvert可以帮你把图片处理成各种需要的格式,你只需要在 Jinaconvert 上选择你需要的格式类型,再将图片文件上传至即可。

工具网站地址:

https://jinaconvert.com/cn/

2、单位转换工具postcss-px2units

将px单位转换为rpx单位,或者其他单位的PostCSS插件。 postcss-px2units就可以使用简单的配置,轻松实现转换。而且该插件可以将px转换为任意你想转换的单位,比如rem。

地址:

https://github.com/yingye/postcss-px2units

3、腾讯云上传插件qcloud-upload

基于nodejs的腾讯云上传插件 支持自定义文件前缀、覆盖及非覆盖上传方式

地址:

https://github.com/yingye/qcloud-upload

4、二维码工具weapp.qrcode.js

在微信小程序中,快速生成二维码 可自定义二维码内容、宽高、纠错级别。此外,还支持生成不同前后景色的二维码。

地址:

https://github.com/yingye/weapp-qrcode

微信小程序脚手架工具 wxdad

一款微信小程序脚手架工具,帮助你快速开发微信小程序应用。目前有两个功能: 快速构建初始项目架构。 把 wxdad 语法快速编译成 wxml 和 wxjs 文件,帮助开发者急速开发。

地址:

https://gitee.com/lisniuse/wxdad

5、小程序图标工具wx-charts

基于 canvas 绘制、体积小巧的微信小程序图表工具。

  • 支持图表类型:
  • 饼图 pie
  • 圆环图 ring
  • 线图 line
  • 柱状图 column
  • 区域图 area
  • 雷达图 radar

地址:

https://github.com/xiaolin3303/wx-charts

6、小程序开发、微信公号管理系统RhaPHP

RhaPHP微信平台管理系统,支持多公众号管理,小程序开发,APP接口开发,平台反文旁虫立且快速简洁易用。灵活的扩展应用机制,具有容易上手,几乎融合微信接口,简单的调用对二次开发与开发扩展应用模块大大提高开发效率,降低企业商家运营成本。扩展应用模块化,机制灵活,代码简单并快速上手。基于THINKPHP5强力内核驱动与LAYUI前端框架,支持 Linux/Windows/Mac。

官方网站:

https://www.rhaphp.com/

7、即速应用:适合技术小白的小程序开发工具

可视化操作,直接拖拽组件生成页面 提供大量可套用的模板 可将代码打包下载,直接对接到小程序的开发工具 下载下来后的代码可以任意编辑 复杂的功能仍然需要专业程序员二次开发

官网:

http://www.jisuapp.cn/

附:微信小程序开发者文档官网地址

https://mp.weixin.qq.com/debug/wxadoc/dev/index.html

 

 

Gearman-任务分发系统

简介

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。

Gearman提供了一个通用的应用程序,可以工作在更加适合处理这项任务的其他计算机或其他处理器上。它允许并行处理,载入平衡处理,而且可以在不同语言间进行调用。它可以应用于各种各样的应用场合。

Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资 源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。

优点

以下是关于Gearman的一些优点:

  • 开源:完全开源,免费的。
  • 多语言:有许多语言接口,而且支持的语言数量一直在增加。
  • 灵活:不依赖于任何特定的设计。
  • 快速:简单的协议和接口,可以减少现有应用程序的开销。
  • 嵌入:轻量,可以以最小的代价引入到现有程序。
  • 没有单点故障:具有较强的容错性。

工作原理

Gearman Client:负责发起任务请求,创建Job
Gearman Job Server:负责任务调度,负责把来自Client的Job分发到不同服务器或不同处理器上的Worker。
Gearman Worker:负责Job处理,并通过Job Server返回结果给Client。

Worker工作流程

  1. Worker通过CAN_DO消息,注册到Job server上。
  2. 随后发起GRAB_JOB,主动要求分派任务。
  3. Job server如果没有job可分配,就返回NO_JOB。
  4. Worker收到NO_JOB后,进入空闲状态,并给Job server返回PRE_SLEEP消息,告诉Job server:”如果有工作来的话,用NOOP请求我先。”
  5. Job server收到worker的PRE_SLEEP消息后,明白了发送这条消息的worker已经进入了空闲态。
  6. 这时如果有job提交上来,Job server会给worker先发一个NOOP消息。
  7. Worker收到NOOP消息后,发送GRAB_JOB向Job server请求任务。
  8.  Job server把工作派发给worker。
  9. Worker干活,完事后返回WORK_COMPLETE给Job server。

处理时序图

同步

异步

集群

如果Job Server挂了该怎么办,Gearman会如何处理?我们可以同时运行多个Job Server。Clients和Workers通过配置好的Job Server,如果这个Job Server发生故障挂了,会自动故障切换到另一个可用的Job Server。Job Server建议两台以上,通过冗余来提高系统的容错性。
You probably don’t want to run too many job servers, but having two or three is a good idea for redundancy.(官网原文)
  • 高可用
启动两个job server,他们是独立的服务进程,有各自的内存队列。当一个job server进程出现故障,另一个job server可以正常调度。(worker api与client api可以完成job server故障的切换)。在任何时候我们可以关闭某个worker,即使那个worker正在处理工作任务(Gearman不会让正在被执行的job丢失的,由于worker在工作时与Job server是长连接,所以一旦worker发生异常,Job server能够迅速感知并重新派发这个异常worker刚才正在执行的工作)

  • 负载均衡

job server并不主动分派工作任务,而是由worker从空闲状态唤醒之后到job server主动抓取工作任务。

  • 可扩展

松耦合的接口和无状态的job,只需要启动一个worker,注册到Job server集群即可。新加入的worker不会对现有系统有任何的影响。

  • 分布式

gearman是分布式的任务分发框架,worker与job server,client与job server通信基于tcp的socket连接。
gearman内置内存队列,默认情况队列最大容量为300W,可以配置最大支持2^32-1,即4 294 967 295。

  • 高性能

作为Gearman的核心,Job server的是用C/C++实现的,由于只是做简单的任务派发,因此系统的瓶颈不会出在Job server上。

使用场景

  • 长时间运行的处理:图片处理,订单处理,批量邮件/通知 …
  • 要求高CPU或内存的处理:大容量的数据处理,MapReduce运算,日志聚集,视频编码
  • 分布式和并行的处理
  • 定时处理:增量更新,数据复制
  • 限制速率的FIFO处理

实例-python

Client-单任务

在没有worker启动的情况下,client并不会结束,会阻塞直到worker处理完job。

Client-多任务

同步非阻塞方式发送多个job的例子,在取得server返回结果之前,用了wait_until_jobs_completed函数来等待task中的所有job返回结果。

Worker

对worker而言,则会一直阻塞直到有新的job到来。

GearmanAdminClient

Job Server相关的API,用于监控和设置。
  • send_maxqueue(task, max_size): Sends a request to change the maximum queue size for a given task
  • end_shutdown(graceful=True): Sends a request to shutdown the connected gearman server
  • get_status():Retrieves a list of all registered tasks and reports how many items/workers are in the queue
  • get_version(): Retrieves the version number of the Gearman server
  • get_workers():Retrieves a list of workers and reports what tasks they’re operating on
  • ping_server(): Sends off a debugging string to execute an application ping on the Gearman server, return the response time

 

https://blog.csdn.net/zl18310999566/article/details/69615777?locationNum=10&fps=1

bash: netstat: command not found

apt-get install net-tools, 对于所有的linux系统都适用。

redhat系列的 Redhat、Centos、Fedora等 可以使用yum安装。

顺便说一句,wget只是个下载工具,相当于迅雷,不负责安装。

apt-get 和 yum才是包管理工具,不要傻傻分不清楚

linux centos 查看系统版本

查看系统版本

cat /etc/os-release

查看内核版本

方法1:

[root@linuxidc ~]# cat /proc/version
Linux version 3.10.0-327.18.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu May 12 11:03:55 UTC 2016

方法2:

[root@linuxidc ~]# uname -a
Linux linuxidc 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Docker CE 镜像源站

Docker CE 镜像源站

使用官方安装脚本自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

手动安装帮助

Ubuntu 14.04 16.04 (使用apt-get进行安装)

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

CentOS 7 (使用yum进行安装)

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

安装校验

root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false