安装yii2时出错 Invalid Argument – yii\base\InvalidArgumentException The file or directory to be published does not exist: D:\Mrli_work\apps\legacy-sale_erp/vendor\bower/jquery/dist

The “https://bower.herokuapp.com/packages/jquery” file could not be downloaded (HTTP/1.1 502 Bad Gateway)
https://bower.herokuapp.com/packages could not be fully loaded, package information was loaded from the local cache and may be out of date

 

解决方法:

你要把composer升级到最新,然后fxp那个插件设置成~1.2(也是最新的吧)

composer self-update

composer global require “fxp/composer-asset-plugin:~1.2”

Git 忽略提交 .gitignore

在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。

Git 忽略文件提交的方法

有三种方法可以实现忽略Git中不想提交的文件。

在Git项目中定义 .gitignore 文件

这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为。

.gitignore 文件是可以提交到共有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。

在 .gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

*.log
*.temp
/vendor

在Git项目的设置中指定排除文件

这种方式只是临时指定该项目的行为,需要编辑当前项目下的 .git/info/exclude 文件,然后将需要忽略提交的文件写入其中。

需要注意的是,这种方式指定的忽略文件的根目录是项目根目录。

定义Git全局的 .gitignore 文件

除了可以在项目中定义 .gitignore 文件外,还可以设置全局的 git .gitignore 文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。

这种方式也需要创建相应的 .gitignore 文件,可以放在任意位置。然后在使用以下命令配置Git:

git config --global core.excludesfile ~/.gitignore

Git 忽略规则

详细的忽略规则可以参考官方英文文档

Git 忽略规则优先级

在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

  • 从命令行中读取可用的忽略规则
  • 当前目录定义的规则
  • 父级目录定义的规则,依次递推
  • $GIT_DIR/info/exclude 文件中定义的规则
  • core.excludesfile中定义的全局规则

Git 忽略规则匹配语法

在 .gitignore 文件中,每一行的忽略规则的语法如下:

  • 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  • # 开头的文件标识注释,可以使用反斜杠进行转义
  • ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  • / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  • / 开始的模式匹配项目跟目录
  • 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  • ** 匹配多级目录,可在开始,中间,结束
  • ? 通用匹配单个字符
  • [] 通用匹配单个字符列表

常用匹配示例:

  • bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
  • /bin: 忽略根目录下的bin文件
  • /*.c: 忽略 cat.c,不忽略 build/cat.c
  • debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
  • **/foo: 忽略/foo, a/foo, a/b/foo等
  • a/**/b: 忽略a/b, a/x/b, a/x/y/b等
  • !/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
  • *.log: 忽略所有 .log 文件
  • config.php: 忽略当前路径的 config.php 文件

.gitignore规则不生效

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

原文出处:http://uusama.com/542.html

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