搭建 IntelliJ 激活服务器

毕竟不是什么光彩的事,赚了钱的同志们还是正版付费吧。这篇文章只贴配置,不解释。

supervisor 配置

[program:idea]
command = /var/local/IDEAServer/IDEAServer -p 1024 -prolongationPeriod 999999999 -l 127.0.0.1
autostart=true
autorestart=true
startsecs=3
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile = /var/local/log/supervisor/idea.log

nginx 配置

server
{
  listen 80;
  server_name idea.project.kelu.org;
  root html;

   location / {
       proxy_pass http://127.0.0.1:1017;
       proxy_redirect off;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }

   access_log off; #access_log end
   error_log /dev/null; #error_log end
}

javascript 正则表达式特殊字符列表

本文来自 MDN(Mozilla Developer Network),做了一些整理和压缩。

概念

正则表达式是用于匹配字符串中字符组合的模式,其由包含在斜杠之间的模式组成,如下所示:

/*
   /pattern/flags 
*/

const regex = /ab+c/;

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

当正则表达式保持不变时,使用这种方法可获得更好的性能。或者临时生成一个正则表达式:

/* 
    new RegExp(pattern [, flags])
*/

let regex = new RegExp("ab+c");

let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$, "gi");

let regex = new RegExp("^[a-zA-Z]+[0-9]*\W?_$", "gi");

正则表达式中的特殊字符

常用:

字符 含义
` \ ` 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。或将其后的特殊字符,转义为字面量。
` ^ ` 匹配输入的开始。 如果多行标志被设置为true,那么也匹配换行符后紧跟的位置。
$ 匹配输入的结束。如果多行标示被设置为true,那么也匹配换行符前的位置。
* 匹配前一个表达式0次或多次。等价于 {0,}。
+ 匹配前面一个表达式1次或者多次。等价于 {1,}。
? 匹配前面一个表达式0次或者1次。等价于 {0,1}。 如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。 例如: "123abc" 应用 /\d+/ 将会返回 "123",如果使用 /\d+?/,那么就只会匹配到 "1"
` . ` (小数点)匹配除换行符之外的任何单个字符。
x | y 匹配‘x’或者‘y’。
{n} n是一个正整数,匹配了前面一个字符刚好发生了n次。
{n,m} n 和 m 都是正整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。
[xyz] 一个字符集合。匹配方括号的中任意字符,包括转义序列。可以使用破折号(-)来指定一个字符范围。对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的。
[^xyz] 一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。
\d 匹配一个数字。 等价于[0-9]
\D 匹配一个非数字字符。
\s 匹配一个空白字符,包括空格、制表符、换页符和换行符。
\S 匹配一个非空白字符。
\w 匹配一个单字字符(字母、数字或者下划线)。等价于[A-Za-z0-9_]。
\W 匹配一个非单字字符。 等价于[^A-Za-z0-9_]。

进阶:

字符 含义
\f 匹配一个换页符 (U+000C)。
\n 匹配一个换行符 (U+000A)。
\r 匹配一个回车符 (U+000D)。
\t 匹配一个水平制表符 (U+0009)。
\v 匹配一个垂直制表符 (U+000B)。
[\b] 匹配一个退格(U+0008)。(不要和\b混淆了。)
\b 匹配一个词的边界。一个词的边界就是一个词不被另外一个词跟随的位置或者不是另一个词汇字符前边的位置。 例子: /\bm/匹配“moon”中得‘m’; /oo\b/并不匹配”moon”中得’oo’,因为’oo’被一个词汇字符’n’紧跟着。 /oon\b/匹配”moon”中得’oon’,因为’oon’是这个字符串的结束部分。这样他没有被一个词汇字符紧跟着。
\B 匹配一个非单词边界。他匹配一个前后字符都是相同类型的位置:都是单词或者都不是单词。一个字符串的开始和结尾都被认为是非单词。 例如,/\B../匹配”noonday”中得’oo’, 而/y\B./匹配”possibly yesterday”中得’ye‘
(x) 匹配 ‘x’ 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。
(?:x) 匹配 ‘x’ 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。
x(?=y) 匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。
x(?!y) 匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。
\cX 当X是处于A到Z之间的字符的时候,匹配字符串中的一个控制符。
\n 当 n 是一个正整数,一个返回引用到最后一个与有n插入的正值表达式(counting left parentheses)匹配的副字符串。
\0 匹配 NULL (U+0000) 字符, 不要在这后面跟其它小数,因为 \0 是一个八进制转义序列。
\xhh 与代码 hh 匹配字符(两个十六进制数字)
\uhhhh 与代码 hhhh 匹配字符(四个十六进制数字)。
\u{hhhh} (仅当设置了u标志时) 使用Unicode值hhhh匹配字符 (十六进制数字).

php 函数 rename 与 tempnam

前几天用到这两个函数,随后记一下。

rename 和 tempnam 都是 php 的文件系统 Filesystem 函数。Filesystem 允许您访问和操作文件系统。

rename

rename函数,顾名思义,重命名一个文件或目录

bool rename ( string $oldname , string $newname [, resource $context ] )

示例:

<?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>

tempnam

tempnam 函数创建一个具有唯一文件名的临时文件。

若成功,则该函数返回新的临时文件名。若失败,则返回 false。

tempnam(dir,prefix)

* dir	必需。规定创建临时文件的目录。
* prefix	必需。规定文件名的开头。

示例:

<?php
echo tempnam("C:\inetpub\testweb","TMP0");
?> 

参考资料


禁ping也能ping的工具:tcping

查看网络延迟标配工具:ping。但是机房服务器禁止ping的情况也很常见。这时候就用到tcping了。

tcping 是类似ping的工具,通过TCP协议工作(ping是通过icmp协议来工作的),也可以通过它来监控服务器的情况。

使用方法很简单,就是把它放在C盘windows目录下的system32文件夹下就可以使用了。

使用格式如下:

tcping www.baidu.com
tcping -t www.baidu.com         # 参数-t 一直运行ping
tcping -d -t www.baidu.com      # -d 是显示时间
tcping -d -t www.baidu.com 21   # 21是监听的端口

效果如下图:

下载链接:http://pan.baidu.com/s/1nvodysD 密码:u2c4

下载的软件包括 tcping 和 tcping64,其中 tcping64 是64位的意思。

常用的也就上面一些命令。如果你对其他的命令感兴趣,可以查看官网介绍:https://elifulkerson.com/projects/tcping.php


shadowsocks 生成二维码 URI

假设我们的配置文件如下:

{
    "server":"hostname",
    "server_port":8388,
    "local_port":1080,
    "password":"barfoo!",
    "timeout":600,
    "method":"aes-256-cfb"
}
  1. 编码前的 URI 格式:

     ss://method:password@hostname:port
    

    例如,在上边的配置文件中, URI 格式应该如下:

     ss://aes-256-cfb:barfoo!@hostname:8388
    
  2. 经过base64编码后的 URI 格式:

     ss://BASE64-ENCODED-STRING-WITHOUT-PADDING
    

最后把这个URI转成 QR 二维码。

php 代码示例如下:

public function qrUrl($host = '10.1.10.41')
{
    $uri = "aes-256-cfb:" . $this->password . "@" . $host . ":" . $this->port;
    $base64 = base64_encode($uri);
    return 'ss://' . $base64;
}

参考资料


Laravel 插件 endroid/QrCode 实现二维码

这是一个用于生成图片二维码的 Laravel 插件。Github 地址: https://github.com/endroid/QrCode

安装

$ composer require endroid/qrcode

源码示例

这个方法输出可以访问的图片http链接地址。

use Endroid\QrCode\QrCode as Qr;

public function qrGenerate(){
    $text = 'http://kelu.org';
    $size = 300;
    $padding = 8;
    $format = 'png';
    $qr = new Qr();
    $qr->setText($text);
    $qr->setSize($size)->setPadding($padding);

    $tmpFilename = tempnam(sys_get_temp_dir(), 'qrcode');
    $qr->render($tmpFilename, $format);

    $filename = 'qrs/'.$this->uuid '.' . $format;

    rename($tmpFilename,base_path('public/res/'.$filename));

    return asset($filename);
}

参考资料