情话诶~

我爱你,

又很遗憾没人能证明,

可这份爱,已经入鲸向海,

如鸟投林,无可避免,

退无可退了,再见。

我爱你,

如果我此生只能给你拥抱,

和不放开你的手,

你愿不愿意跟我走

我爱你,

好想学一种可以伴你一生的咒语,

哪怕是做你的宠物狗也可以

我爱你,

希望有一天,

可以和你一起,

保护水晶

我爱你,

你用半生温柔,

相濡以沫陪我赌,

我又怎么可能让你输,再见

我爱你,

愿你所有的温柔,

都能换来岁月的情深意浓,

可以不必回首,相扶白头,再见

我爱你,

在我死了以后,把骨灰带在身上,

遇到坏人就扬出去,让我再保护你最后一次,再见

我爱你,如果有一天,你觉得越相爱越是场意外,

那就请你悄悄在月光下,找个男孩把我取代,再见

我爱你,如果有一天,你一无所有,

我是你最后一件行李,我们永远不再见,再见

我爱你,希望你可以把自己挂在淘宝上,

因为你们淘宝承诺过,淘宝,要掏自己喜欢,再见

我爱你,就算你满嘴谎言,仍有我痴情不改变,再见

我爱你,为了寻找你,我搬进鸟的眼睛,经常盯着路过的风,也忘了听猎人的枪声,再见

我爱你,是你给了我故事的开头,太过惊心动魄,也让我忘了看,我们的结局是老死不相往来,没联络,再见

我爱你,原谅我只有遇见你的勇气,却没有留住你的本事,再见

我爱你,就算你一身污秽如刺猬,也有我双手拥抱不忌讳,再见

我爱你,沉默。。。找机会把这三个字还给我吧

我爱你,一直都很爱,只是你离开后我偶尔也会喜欢他人,在他人像你的时候,再见

我爱你,请帮我叫一辆滴滴,目的地就定在你怀里,从此沿途的每一处风景,都是越来越近的你,再见

我爱你,如果有一天,你可以改过自新,我就对你说我爱你,再见

我爱你 就算你满嘴谎言,仍有我痴情不改变。

我爱你 好想学一种可以伴你一生的咒语哪怕是做你的宠物狗也可以。

我爱你 希望你可以把自己挂在

淘宝上,因为你们淘宝承诺过,淘宝,要淘我喜欢的。

我爱你 请帮我叫一辆滴滴,目的地就定在你怀里。从此沿途的每一处风景,都是越来越近的你。

我爱你 如果我此生只能给你拥抱和不放开你的手,你愿不愿意跟我走。

我爱你 希望有一天可以和你一起保护水晶。

我爱你 为了寻找你 我搬进鸟的眼睛 经常盯着路过的风 也忘了听猎人的枪声。

我爱你 就算你一身污秽如刺猬,也有我双手拥抱不忌讳。

我爱你 原谅我只有遇见你的勇气,却没有留住你的本事。

我爱你 一直都很爱,只是你离开后我偶尔也会喜欢他人,在他人像你的时候。

我爱你 在我死了以后 把骨灰带在身上 遇到坏人就扬出去 让我再保护你最后一次。

我爱你 找机会把这三个字还给我吧!

如果有一天你可以改过自新,那么我就对你说我爱你。

我爱你 如果有一天,你觉得越相爱越是场意外,那么请你悄悄的在月光下找个男孩把我取代。

我爱你 你用半生温柔相濡以沫陪我赌,我又怎么可能让你输。

别忘记我爱你,如果有一天,你一无所有,我是你最后一件行李,我们永远不再见!

我爱你 又很遗憾没人能证明,
可这份爱如鲸向海,如鸟投林,无可避免,退无可退了。

我爱你 好希望当你离开的中那天,可以踩中我偷偷埋好的地雷,这样,我们就能永远在一起了,反正你走一步就会死,我离开你也活不了!

我爱你 好想给你打一辈子辅助,召唤师峡谷太大了,你可不可以离我不要太远,人头是你的,兵线是你的,buff 是你的,塔是你的,所有的经济都是你的,我什么都不要,只要你活着。

我爱你 愿你所有的温柔都能换来岁月的情深意浓,可以不必回首,相扶白头。

我爱你 是你给了故事开头, 太过惊心动魄 ,也让我忘了看, 我们结局是老死不相往来 没联络。

我爱你 别为了不属于你的观众,演绎你不擅长的人生,反正谢幕后的每次相逢,都有我捧着鲜花,把你拥入怀中。

我爱你 也想把这世界上所有快乐都与你共享,哪怕被你折磨得 遍体鳞伤。

我爱你 等你时,我觉得一日不见,如隔三秋;你朝我笑,我又觉得,三秋未见,不过一日。

Nginx 读书摘抄

查看端口和进程的命令:

lsof -i :port
netstat -lntup

Nginx 疑难杂症排除:

报错提示:

  1. 用户不存在报错
    nginx: [emerg] getpwnam(“nginx”) failed.
    原因:没有对应的Nginx服务用户,如果是定义的其他用户,用户不存在都会报此错误。
    解决方案:创建对应用户即可

  2. 编译安装pcre,gcc不全导致报错
    解决:安装gcc-c++ 软件包即可

  3. 查看编译Nginx 时的编译参数
    解决方案: nginx -V 就能看的编译安装时的选项。

Nginx 企业应用深入剖析

软件功能说明

  1. Nginx 核心功能模块(core functionality )
  2. 标准的Http 功能模块集合
    Nginx http 功能模块 模块说明
    ngx_http_core_module 包括一些核心的Http 参数配置, 对应Nginx 的配置为HTTP区块部分
    ngx_http_access_module 访问控制模块,用来控制网站用户对Nginx 的访问
    ngx_http_gzip_module 压缩模块,对Nginx 返回的数据压缩,属于性能优化模块
    ngx_http_fastcgi_module FastCGI模块,和动态应用相关的模块,例如PHP
    ngx_http_proxy_module proxy 代理模块
    ngx_http_upstream_module 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查
    ngx_http_rewrite_module URL地址重写模块
    ngx_http_limit_req_module 工具定义的Key限制Nginx 请求过程的速率
    ngx_http_limit_req_conn_module 限制也能更好并发连接数及请求数模块
    ngx_http_log_module 访问日志模块,以指定的格式记录Nginx 客户访问日志等信息
    ngx_http_auth_basic_module web认证模块,设置文本用户通过账号,密码访问Nginx
    ngx_http_ssl_module ssl模块,用于加密的http连接,如https
    ngx_http_stub_status_module 记录Nginx基本状态信息等的模块

location 语法

location 的使用语法为:


1
2
3
location [ = | ~ | ~* | ^~ ] uri {
    ....
}

示例


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
location = / {
    [ configuration A ]
    #精确匹配 /
}

location / {
    [ configuration B ]
    # 所有正则都不能匹配后,匹配此选项
}

location /documents/ {
    [ configuration C ]
    #匹配常规字符串,如果有正则,则优先匹配正则
}

location ^~ /images/ {
    # 匹配常规字符串,不做正则检查
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
    # 正则匹配
}

在上述location 配置中,当用户请求”/“ 时, 将匹配configuration A,当用户请求”/index.html”时,将匹配configuration B,当用户请求”documents/index.html”时,将匹配configuration C, 当用户请求”/images/1.gif”时,将匹配configuration D,当用户请求documents/1.jpg 时,将匹配到configuration E。

第四十五天: 考试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#By: nextkara
#Time: 2016-09-031453
white="\e[47m  \e[0m"
black="\e[40m  \e[0m"
for (( i = 2; i < 10; i++ )); do
    d=$[$i%2]
    if [[ $d -eq 1 ]];then
    for (( j = 0; j < 4; j++ )); do
        echo -ne "${white}${black}"
        done
    echo
    fi
    if [[ $d -eq 0 ]];then
    for (( l = 0; l < 4; l++ )); do
        echo -ne "${black}${white}"
        done
    echo
    fi
done
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#By: nextkara
#Time: 2016-09-031416
p() {
for x in {1..100};do
  echo $[$RANDOM%6+1]
  done
}
echo "次数    数字"
p | sort | uniq -c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#By: nextkara
#Time: 2016-09-031424
xin="\e[1;31m*\e[0m"
for x in {0..4};do
  y=4-$x
  z=$[($y)*2+1]
  for (( i = 0; i < $x; i++ )); do
      echo -n " "
      done
  for (( i = 0; i < $z; i++ )); do
      echo -n -e $xin
  done
  echo
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
#By: nextkara
#Time: 2016-09-031437
declare -a Wee
for x in {1..10};do
  Wee[$x]=$[$RANDOM%100]
done
for d in {1..10};do
for x in {1..10};do
  y=$x+1
  [[ $y -eq 11 ]] && break
  for z in {1..10};do
    if [[ ${Wee[$x]} -le ${Wee[$y]} ]];then
      tempp=${Wee[$x]}
      Wee[$x]=${Wee[$y]}
      Wee[$y]=$tempp
    fi
  done
done
done
echo "Down : ${Wee[@]}"
for d in {1..10};do
for x in {1..10};do
  y=$x+1
  [[ $y -eq 11 ]] && break
  for z in {1..10};do
    if [[ ${Wee[$x]} -ge ${Wee[$y]} ]];then
      tempp=${Wee[$x]}
      Wee[$x]=${Wee[$y]}
      Wee[$y]=$tempp
    fi
  done
done
done
echo "Up : ${Wee[@]}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
#By: nextkara
#Time: 2016-09-031515
nowfile=`echo $0 | sed 's#\./##'`
finished="\e[1;32mfinished\e[0m"
file=/var/lock/subsys/$nowfile
Start() {
[[ -e $file ]] && echo "Already started!" && continue
touch $file && echo -e "starting... [ $finished ]"
}
Stop() {
[[ -e $file ]] && rm -f $file && echo -e "stopping...   [ $finished ]"
[[ $? -ne 0 ]] && echo "No running service"
}
Usage() {
echo "help   : help"
echo "start  : start script"
echo "stop   : stop script"
echo "restart    : restart script"
echo "status     : status of the script"
echo "exit   : exit now"
}
while true;do
read -p "please input you choice :" choice
case $choice in
start)
Start
;;
stop)
Stop
;;
restart)
Stop
Start
;;
status)
ls $file &> /dev/null && echo -e "Service is    [ \e[1;32mrunning\e[0m ]" \
|| echo -e "Sevice  [ \e[1;31mstop\e[0m ]"
;;
help)
Usage
;;
exit)
echo "==================================="
ls $file &> /dev/null && echo -e "Service is    [ \e[1;32mrunning\e[0m ]" \
|| echo -e "Sevice  [ \e[1;31mstop\e[0m ]"
echo "Stop or run this server by run this script again~ Bye~"
break
;;
*)
echo "\e[1;31mErorr!\e[0m"
Usage
;;
esac
done

转载:工作技巧

技能#1:书面沟通

在开始每天的工作之前,你可能需要先回复邮件。电子邮件迅速成为了生产力的死亡陷阱。与此同时,电子邮件也是展示你对别人有多大价值的门户。书面技能依然是事实业务沟通的领头羊。

既然书面沟通技巧是如此之重要,于是我花了很多时间来掌握发送电子邮件并快速得到回复的技术。

我所有的电子邮件不但设计友好,而且会尽快切入正题。这是我在邮件中要求技术需求的4个步骤:

  1. 感谢对方发送电子邮件。这适用于每封电子邮件。例如:感谢你与我联系。
  2. 强调他们的要点并说明你已了解。例如,“如果我理解正确的话,你是想……”。
  3. 提出问题,以确保你理解他们想要什么。
  4. 在他们回答你的问题之后,按照步骤2的方式回复以确认你理解的内容。

这些步骤将提前节省你大量的时间,让你突出于那些没有做到位的人。书面交流是开发者武器库中一项最被低估的技能。当然要想正确表达自己的想法需要多年的实践,但用好这个武器往往会有“杀人于无形”的奇效。

技能#2:教学相长

如果你是一个初学者,那么你可能认为你没什么可以教人的。但现实情况是,你也许可以。

当我开始我的第一份web开发工作时,我认为我需要花更多的时间向别人学习。但不是所有的情况都是如此。事实上,我做到了学习与教学的结合。我们公司已决定从SVN转移到Git。而我得到这份工作也是因为我的主要卖点就是大量的Github代码仓库。

当我加入的时候,我发现这是一支正在蓬勃成长的团队,并且转移到Git对于我们而言是有压力的,因为它是一个更好的协作工具。

这真是一个超现实的体验,因为,这是我人生中第一次不得不用标记来武装自己以及在白板上画图。虽然只是一些简单的图表,用来演示git是如何工作的以及它如何与Github互动。还有解释如何最佳利用分支。

请记住:这只是在公司待满一个月之后。从那以后,我一直是头脑风暴会议的一部分,解释Rails中一切的工作原理,从会话到嵌套表单。

在你第一份开发工作中,通过教学,你可能最终会给人一种你比他们更知识渊博的印象。即使你不认为自己是“专家”或“高级开发者”。

在每一家公司里,总有共享的知识池。当我教人的时候,我会对此作出贡献,同时带走别人的经验和见解。

基本上说来,每个人都会贡献自己的经验和观点到这个知识池中。而这便是大规模的教学相长。

技能#3:专注

任何职业,无论是画家还是作家,专注于小细节才有可能一步步累积至伟大。如果你想产出令人惊艳的工作,那么你得小心注意并调整方法。

如果你对细节的关注还不到位,那么关键是要具备处理专注的能力。

完全专注于一项任务的能力在我们当前这个世界里是呈现递减状态的。Twitter,Facebook和Reddit正在不断诱惑我们的注意力。Cal Newport在他的《Deep Work》一书中指出,为了有一个有影响力的就业,人们必须放弃浅层的工作并拥抱深层的工作。

浅层工作被定义为只有短期利益的工作。例如,你可以花一天用来撰写和回复邮件,但会因此而错过深层工作。深层工作是需要全神贯注并最终导致实际成果的工作。

作为一个开发者,这个技能不能被低估。我们的工作是建立有用的东西。而创造有价值的东西是需要大量时间的。少一点消费者的心态,多一点生产者的心态。

可能会有用的一种技术手段是番茄工作法。

下面是它的工作原理:

  • 设置25分钟的定时器
  • 专注于一个任务25分钟
  • 25分钟结束后,休息5分钟
  • 任何浮现出来和任务无关的想法,你可以先写下来以便于以后来关注。
  • 你重复循环四次(或更多)

这种技术之所以伟大是因为它使你一次专注于一件事情。它可以帮助你产出更有意义的工作,而不是每隔几分钟查看Twitter或Facebook。

技能#4:了解大局

那些主要产品围绕代码的开发人员需要执行一种小心以及平衡的行为。一方面,从发布到产品来帮助企业成长。另一方面,你要保证不会给你将来的同事留下难以维护的代码。而且以及当然,用户也得享受于软件。

但是,首先,此刻你能做的就是编写代码。当你开始作为一个开发人员提高自己的时候,你将——回过头去重构原先的代码。让你的软件更适应将来在上面工作的开发人员。

有一个伟大的概念是DRY(don’t repeat yourself)原则。其基本思想是写一个只需要改变一次的代码片段,如果你决定将来更改它的话。这种方法既是程序员的福音,也有利于企业。

然而,所谓的大局并不仅仅涉及到代码。大多数的大公司遵循Peter Drucker的原则。如果你学过MBA,那么你一定听说过Peter和他的管理原则。如果没有,那么建议阅读他写的书。

Peter对西方公司产生了深远的影响。他提出的最重要的概念之一是成本中心和利润中心。在销售和市场营销工作的人被认为是企业的利润中心。他们增加收入。必须控制企业成本以最大限度地提高收入。作为开发人员,你既可以是利润中心也可以是成本中心。

管理你的职业生涯的最佳方式是了解你适合企业内部的哪个位置。这会附加你的价值,并让你的职业生涯走得更远。

技能#5:社交技巧

许多人认为,像Google这样的公司创造了一种从自上而下的文化。不过,你和你的同伴也在建立文化。而培育这种团队范围的文化的最佳方式是通过你自己的社交技巧。

回想一下你的现实生活,而不是工作生活。你的朋友圈中有没有这样一个人是每个人都期待看到的?他们的存在可以带来欢笑和深刻的讨论。他们不传播流言和谣言。在有人需要帮助时他们会及时伸手。总而言之,他们被描述为是一个够意思的哥们或菇凉。

这样的人也存在于工作场所。而你的目标应该是尝试成为那样的人。

成为一个每个人都期待看到的人。建立用一种建设性的心态说出意见的勇气。这与你认为自己是一个内向或外向的人无关。

慢慢的,你的事业、你的技术技能将和这个领域中的其他人相同。但是如果你想在职场中获得成功,那么你需要成为团队成员。你必须能够和他人交流,能激励他人,并值得信赖。因为在一天结束时,如果你不能与别人进行联系,那么你将永远无法让别人接受你的想法,无论多大或多小。最终你只能接受其他人的想法,而不是给出你的想法。

技能#6:发现并处理问题

程序员的作用是解决问题。但要解决问题,首先必须去发现问题究竟是什么。

世界上最容易的事情是记住一堆命令或复制和粘贴在Stackoverflow上的代码。真正的能力是知道发生了什么事的大局观。如果你正在解决工作中的一个大问题,那么最好是把它分解成微小的可编辑的片段。

先查看问题本身。想想代码试图解决的问题。

  1. 它使人更容易购买吗?
  2. 它做报告吗?
  3. 创建这个软件的目的是什么?

然后,看一下当前的解决方案(如果存在的话)。最后,考虑当前的解决方案是如何解决这个问题。(如果它能解决的话)。

一旦你高度概括了这个应用程序,那么你就可以进入应用程序的功能部分。利用问题、解决方案和细节技术来进一步分解问题。这些框架步骤帮助我理解了不同的开源项目,例如Disourse。