Life http://127.0.0.1/blog/html/ Learning, Promotion en-us Sun, 19 Feb 2017 00:00:00 +0800 http://127.0.0.1/blog/html/2017/02/19/bytecode_interpret_virtual_machine.html http://127.0.0.1/blog/html/2017/02/19/bytecode_interpret_virtual_machine.html <![CDATA[字节码解释器,虚拟机简单原型]]> 字节码解释器,虚拟机简单原型

制件自己的编程语言之基础,字节码解释器,也是一个mini虚拟机。

Read more...

]]>
Sun, 19 Feb 2017 00:00:00 +0800
http://127.0.0.1/blog/html/2016/11/06/dll与lib的创建与使用.html http://127.0.0.1/blog/html/2016/11/06/dll与lib的创建与使用.html <![CDATA[DLL与LIB的创建与使用]]> DLL与LIB的创建与使用

记录分别Visuall Studio 2015和GCC创建和使用动态库与静态库的方法。

Read more...

]]>
Sun, 06 Nov 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/08/01/generate_exe_file_from_python.html http://127.0.0.1/blog/html/2016/08/01/generate_exe_file_from_python.html <![CDATA[Generate exe file from python]]> Generate exe file from python

如何使用py2exe将python脚本转换为Windows下的exe文件。

Read more...

]]>
Mon, 01 Aug 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/06/27/extending_embedded_python.html http://127.0.0.1/blog/html/2016/06/27/extending_embedded_python.html <![CDATA[在应用程序中嵌入Python]]> 在应用程序中嵌入Python

在应用程序中嵌入Python或其它什么,关键就是如何让应用程序与Python脚本交互,即在 应用程序中解释执行Python代码。回想一下你是如何调用Python标准模块的?应用程序采 取相同的方式与Python交互:

  1. 导入Python模块(加载脚本)
  2. 获取模块中的函数/类/类的方法等
  3. 构建参数,调用Python函数;访问属性等
  4. 解析返回值

Read more...

]]>
Mon, 27 Jun 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/03/24/new_operator.html http://127.0.0.1/blog/html/2016/03/24/new_operator.html <![CDATA[operator new与placement new]]> operator new与placement new

new expression 实际上完成了两项工作:

  1. 分配内存
  2. 在分配的内存上执行初始化(类的构造函数)

可以通过订制operator newplacement new来控制内存分配。

Read more...

]]>
Thu, 24 Mar 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/03/19/shadowsocks.html http://127.0.0.1/blog/html/2016/03/19/shadowsocks.html <![CDATA[shadowsocks源码分析:ssserver]]> shadowsocks源码分析:ssserver

shadowsocks服务端源分析。

Read more...

]]>
Sat, 19 Mar 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/03/19/const_and_this.html http://127.0.0.1/blog/html/2016/03/19/const_and_this.html <![CDATA[this指针与const]]> this指针与const

this指针与const修饰符的关系。

Read more...

]]>
Sat, 19 Mar 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/02/15/const_modifier.html http://127.0.0.1/blog/html/2016/02/15/const_modifier.html <![CDATA[const修饰符]]> const修饰符

const修饰符的特殊使用方法。[1] [2]

Read more...

]]>
Mon, 15 Feb 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/02/04/function_program_in_python.html http://127.0.0.1/blog/html/2016/02/04/function_program_in_python.html <![CDATA[function program in python]]> function program in python

Python中的函数式编程。

Read more...

]]>
Thu, 04 Feb 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/bash.html http://127.0.0.1/blog/html/2016/01/19/bash.html <![CDATA[Learning Bash]]> Learning Bash

学习Bash,记录一些新学到的知识和tips。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/code_evolution.html http://127.0.0.1/blog/html/2016/01/19/code_evolution.html <![CDATA[Code Evolution]]> Code Evolution

一段Python代码的进化:

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/comm_pipe.html http://127.0.0.1/blog/html/2016/01/19/comm_pipe.html <![CDATA[命令行管道编程]]> 命令行管道编程

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/datamining.html http://127.0.0.1/blog/html/2016/01/19/datamining.html <![CDATA[学习数据挖掘]]> 学习数据挖掘

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/disk_quota.html http://127.0.0.1/blog/html/2016/01/19/disk_quota.html <![CDATA[磁盘配额管理]]> 磁盘配额管理

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/docker.html http://127.0.0.1/blog/html/2016/01/19/docker.html <![CDATA[docker使用小记]]> docker使用小记

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/economy.html http://127.0.0.1/blog/html/2016/01/19/economy.html <![CDATA[经济指标]]> 经济指标

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/epoll_man.html http://127.0.0.1/blog/html/2016/01/19/epoll_man.html <![CDATA[epoll(7)]]> epoll(7)

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/epoll.html http://127.0.0.1/blog/html/2016/01/19/epoll.html <![CDATA[epoll API]]> epoll API

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/firefox.html http://127.0.0.1/blog/html/2016/01/19/firefox.html <![CDATA[Speed Up Firefox]]> Speed Up Firefox

通过将Firefox的配置文件和临时文件目录存放至内存中,可以加快Firefox的启动迅速,减 少上网时对硬盘的读写,可能在一定程度上加速网页渲染。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/foreman.html http://127.0.0.1/blog/html/2016/01/19/foreman.html <![CDATA[Nginx+Foreman+Passenger]]> Nginx+Foreman+Passenger

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/freebsd.html http://127.0.0.1/blog/html/2016/01/19/freebsd.html <![CDATA[FreeBSD点滴]]> FreeBSD点滴

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/gentoo.html http://127.0.0.1/blog/html/2016/01/19/gentoo.html <![CDATA[Gentoo点滴]]> Gentoo点滴

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/github.html http://127.0.0.1/blog/html/2016/01/19/github.html <![CDATA[使用GitHub]]> 使用GitHub

记录使用github的一些经历。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/gnuplot.html http://127.0.0.1/blog/html/2016/01/19/gnuplot.html <![CDATA[Introduce to the GNUPlot]]> Introduce to the GNUPlot

本文通过学习马欢[1]的Gnuplot系列教程后,练习处理我的计算数据完成。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/holdteam.html http://127.0.0.1/blog/html/2016/01/19/holdteam.html <![CDATA[保持团队稳定]]> 保持团队稳定

以前不知道在哪个博客上看到的一篇文章,遂存于此。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/http_header.html http://127.0.0.1/blog/html/2016/01/19/http_header.html <![CDATA[HTTP Header]]> HTTP Header

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/iamprogramer.html http://127.0.0.1/blog/html/2016/01/19/iamprogramer.html <![CDATA[程序人生]]> 程序人生

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/inline_link_problem.html http://127.0.0.1/blog/html/2016/01/19/inline_link_problem.html <![CDATA[由内联函数引起的一个BUG]]> 由内联函数引起的一个BUG

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/intrusion.html http://127.0.0.1/blog/html/2016/01/19/intrusion.html <![CDATA[入侵检测与响应]]> 入侵检测与响应

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/jail.html http://127.0.0.1/blog/html/2016/01/19/jail.html <![CDATA[如何让特定用户通过SSH登陆后自动chroot?]]> 如何让特定用户通过SSH登陆后自动chroot?

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/jenkins.html http://127.0.0.1/blog/html/2016/01/19/jenkins.html <![CDATA[赤兔项目持续集成系统-Jenkins CI部署]]> 赤兔项目持续集成系统-Jenkins CI部署

当前(2013-10-16)赤兔项目主要针对:android, iOSWeb浏览器三个平台发布客户端。本文主要介绍客户端的持续集成。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/kernel.html http://127.0.0.1/blog/html/2016/01/19/kernel.html <![CDATA[学习内核相关知识]]> 学习内核相关知识

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/learning.html http://127.0.0.1/blog/html/2016/01/19/learning.html <![CDATA[学习方法与态度]]> 学习方法与态度

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/libevent.html http://127.0.0.1/blog/html/2016/01/19/libevent.html <![CDATA[Learning libevent Programming]]> Learning libevent Programming

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/libpcap.html http://127.0.0.1/blog/html/2016/01/19/libpcap.html <![CDATA[抓包-libpcap]]> 抓包-libpcap

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/live_finace.html http://127.0.0.1/blog/html/2016/01/19/live_finace.html <![CDATA[神仙打架-互联网金融]]> 神仙打架-互联网金融

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/logfilter.html http://127.0.0.1/blog/html/2016/01/19/logfilter.html <![CDATA[Apache日志过滤-是否可以用来预防DDOS]]> Apache日志过滤-是否可以用来预防DDOS

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/lsp01.html http://127.0.0.1/blog/html/2016/01/19/lsp01.html <![CDATA[Linux系统编程(一) IO基础]]> Linux系统编程(一) IO基础

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/lvm.html http://127.0.0.1/blog/html/2016/01/19/lvm.html <![CDATA[LVM基础知识]]> LVM基础知识

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mail.html http://127.0.0.1/blog/html/2016/01/19/mail.html <![CDATA[邮件系统-Postfix, Dovecot, MySQL和Postfixadmin]]> 邮件系统-Postfix, Dovecot, MySQL和Postfixadmin

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/matplot.html http://127.0.0.1/blog/html/2016/01/19/matplot.html <![CDATA[Learning Matplot Library]]> Learning Matplot Library

Matplot是一个超强的Python绘图库。

在此记录学习Matplot一些例子,以便于日后可以较快的熟悉学习。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mediawiki.html http://127.0.0.1/blog/html/2016/01/19/mediawiki.html <![CDATA[MediaWiki点滴]]> MediaWiki点滴

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mongodb.html http://127.0.0.1/blog/html/2016/01/19/mongodb.html <![CDATA[MongoDB]]> MongoDB

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/multiprocess.html http://127.0.0.1/blog/html/2016/01/19/multiprocess.html <![CDATA[多线程开发]]> 多线程开发

多线程开发中的一些注意事项:

假定有一个线程(进程)A, 多个线程(进程)B,A知道所有的B的状态,B之间相互不了 解

  1. 首先要注意到有多个B,它们执行的代码一样,如果对某一个资源进行读写,需要考 虑互斥
  2. 由于第1条说明的互斥问题,所以可以考虑把可能引起互斥的数据操作由A来完成然后 通知B
  3. 第2条中又引起了一个问题,因为B有多个,那么A应该通知哪个B呢?这里最为安全的 是在A中对B进行轮询,这个可以避免由于某个B突然失联引起问题,即使某个B线程( 进程)失联了,下次运行时,A就会通知另外一个B,从而避免了一直向失联的B向信 息

关于数据的设计

对于一类数据,最好由一个进程来管理,如果其它进程需要相应的数据,与数据管理进程 沟通,以获取数据,而不是直接去操作数据。

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_backup.html http://127.0.0.1/blog/html/2016/01/19/mysql_backup.html <![CDATA[MySQL数据库的备份]]> MySQL数据库的备份

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_high_availability.html http://127.0.0.1/blog/html/2016/01/19/mysql_high_availability.html <![CDATA[MySQL的高可用方案(一)]]> MySQL的高可用方案(一)

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_io_benchmark.html http://127.0.0.1/blog/html/2016/01/19/mysql_io_benchmark.html <![CDATA[测试MySQL服务器性能]]> 测试MySQL服务器性能

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_key.html http://127.0.0.1/blog/html/2016/01/19/mysql_key.html <![CDATA[MySQL中的索引-读书笔记]]> MySQL中的索引-读书笔记

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_logs.html http://127.0.0.1/blog/html/2016/01/19/mysql_logs.html <![CDATA[MySQL日志相关服务器变量]]> MySQL日志相关服务器变量

MySQL Server参数中与日志相关的选项。如:Error Log, General query log, Binary log, Relay log, Slow query log

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_master_slave.html http://127.0.0.1/blog/html/2016/01/19/mysql_master_slave.html <![CDATA[MySQL配置Master-Slave]]> MySQL配置Master-Slave

简单的MySQL主从架构的建立和维护。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_optimize.html http://127.0.0.1/blog/html/2016/01/19/mysql_optimize.html <![CDATA[MySQL优化-《高性能MySQL》笔记]]> MySQL优化-《高性能MySQL》笔记

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_privileges.html http://127.0.0.1/blog/html/2016/01/19/mysql_privileges.html <![CDATA[MySQL权限管理]]> MySQL权限管理

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_replication.html http://127.0.0.1/blog/html/2016/01/19/mysql_replication.html <![CDATA[MySQL复制]]> MySQL复制

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_status.html http://127.0.0.1/blog/html/2016/01/19/mysql_status.html <![CDATA[MySQL服务器状态]]> MySQL服务器状态

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/mysql_tuning.html http://127.0.0.1/blog/html/2016/01/19/mysql_tuning.html <![CDATA[MySQL通用调优原则]]> MySQL通用调优原则

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/nagios.html http://127.0.0.1/blog/html/2016/01/19/nagios.html <![CDATA[监控工具-Nagios]]> 监控工具-Nagios

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/net-snmp.html http://127.0.0.1/blog/html/2016/01/19/net-snmp.html <![CDATA[Net-SNMP使用心得]]> Net-SNMP使用心得

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/nginx_directive.html http://127.0.0.1/blog/html/2016/01/19/nginx_directive.html <![CDATA[Nginx指令介绍]]> Nginx指令介绍

详细信息请查看Nginx 原文档(English[#ref1]_, 淘宝中文版[2])

Proxy_cache相关指令

proxy_cache

prox_cache zone_name | off;

为cache指定一个共享存储区。相同的存储区可以在不同的地方使用。如果设定为off可以关闭从上级配置中继承的cache定义。

共享存储区域”zone_name“是由指令proxy_cache_path定义的。

proxy_cache_path

proxy_cache_path  path [levels=levels] keys_zone=name:size
                    [inactive=time] [max_size=size] [loader_files=number]
                    [loader_sleep=time] [loader_threshold=time];

设定缓存的存储路径和其他一些参数。被缓存的数据都存储在文件中。存储在缓存区的key和文件名是通过被代理的URL的MD5值处理后得到的。参数`levels`用于定义缓存的存放级别的。例如:下面的指令:

proxy_cache_path /data/nginx/cache *levels*=1:2 keys_zone=one:10m;

被缓存的文件在缓存区中是这样存放的:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d650*29c*

A cached response is first written to a temporary file, then a file is renamed. Starting from version 0.8.9 temporary files and the cache can be put on different file systems but be aware that in this case a file is copied across two file systems instead of the cheap rename operation. It is thus recommended that for any given location both cache and a directory holding temporary files set by the proxy_temp_path directive are put on the same file system. 缓存的响应首先写入到一个临时文件,然后进行重命名。

In addition, all active keys and information about data are stored in a shared memory zone, whose name and size are configured by the keys_zone parameter. Cached data that are not accessed during the time specified by the inactive parameter get removed from the cache regardless of their freshness. By default, inactive is set to 10 minutes.

The special process “cache manager” monitors the maximum cache size set by the max_size parameter; when this size is exceeded it removes the least recently used data.

A minute after the start the special process “cache loader” is activated that loads information about previously cached data stored on file system into a cache zone. A load is done in iterations. During one iteration no more than loader_files items are loaded (by default, 100). Besides, the duration of one iteration is limited by the loader_threshold parameter (by default, 200 milliseconds). A pause is made between iterations, configured by the loader_sleep parameter (by default, 50 milliseconds).

proxy_cache_bypass

proxy_cache_bypass string ...;

定义在哪些情况下,响应数据不从缓存中取得。当至少有一个字符参数不为空(“”)且不等于”0”,响应就不会从缓存中提取。

proxy_cache_bypass的功能与下面的proxy_no_cache相同。

proxy_no_cache

proxy_no_cache string ...;

proxy_cache_bypass相同。

proxy_cache_key

proxy_cacke_key $scheme$proxy_host$request_uri;

proxy_cache_valid

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;

proxy_cache_lock

proxy_cache_lock on | off

proxy_cache_lock_timeout

proxy_cache_lock_timeout 5s

proxy_cache_min_uses

proxy_cache_min_uses 1;

proxy_cache_use_stale

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500
                        | http_502 | http_503 | http_504 | http_404 | off ...;

proxy_cache_methods

proxy_cache_methods GET | HEAD | POST ...;

问题

  • proxy cache的流程是什么样的?
  • proxy_cache, proxy_temp_path, proxy_store三种存储有什么差别?
]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/openvas.html http://127.0.0.1/blog/html/2016/01/19/openvas.html <![CDATA[学习弱点扫描工具-openVAS]]> 学习弱点扫描工具-openVAS

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/penetration-testing.html http://127.0.0.1/blog/html/2016/01/19/penetration-testing.html <![CDATA[渗透测试]]> 渗透测试

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/php.html http://127.0.0.1/blog/html/2016/01/19/php.html <![CDATA[PHP点滴]]> PHP点滴

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/proc.html http://127.0.0.1/blog/html/2016/01/19/proc.html <![CDATA[文件系统/proc]]> 文件系统/proc

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/proverb.html http://127.0.0.1/blog/html/2016/01/19/proverb.html <![CDATA[箴言]]> 箴言

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/puppet.html http://127.0.0.1/blog/html/2016/01/19/puppet.html <![CDATA[配置管理工具-Puppet]]> 配置管理工具-Puppet

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/pxe.html http://127.0.0.1/blog/html/2016/01/19/pxe.html <![CDATA[通过PXE安装Linux]]> 通过PXE安装Linux

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/pymysql.html http://127.0.0.1/blog/html/2016/01/19/pymysql.html <![CDATA[Python-MySQL使用心得]]> Python-MySQL使用心得

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/python_network.html http://127.0.0.1/blog/html/2016/01/19/python_network.html <![CDATA[Python网络库的使用]]> Python网络库的使用

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/python.html http://127.0.0.1/blog/html/2016/01/19/python.html <![CDATA[Learning Python]]> Learning Python

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/python_var.html http://127.0.0.1/blog/html/2016/01/19/python_var.html <![CDATA[Pyhton中变量的作用域]]> Pyhton中变量的作用域

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/rpm.html http://127.0.0.1/blog/html/2016/01/19/rpm.html <![CDATA[RPM软件包]]> RPM软件包

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/samba_ads.html http://127.0.0.1/blog/html/2016/01/19/samba_ads.html <![CDATA[samba集成Active Directory]]> samba集成Active Directory

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/samba_basic.html http://127.0.0.1/blog/html/2016/01/19/samba_basic.html <![CDATA[Samba]]> Samba

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/secure_task.html http://127.0.0.1/blog/html/2016/01/19/secure_task.html <![CDATA[运维常用工具]]> 运维常用工具

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/selinux.html http://127.0.0.1/blog/html/2016/01/19/selinux.html <![CDATA[探索SELinux]]> 探索SELinux

学习NSA的开源工具SELinux

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/shadowsocks.html http://127.0.0.1/blog/html/2016/01/19/shadowsocks.html <![CDATA[shadowsocks源码分析:ssserver]]> shadowsocks源码分析:ssserver

学习shadowsocks[1]服务端源码。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/snort.html http://127.0.0.1/blog/html/2016/01/19/snort.html <![CDATA[入侵检测工具-Snort]]> 入侵检测工具-Snort

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/song.html http://127.0.0.1/blog/html/2016/01/19/song.html <![CDATA[知足]]> 知足
怎么去拥有一道彩虹
怎么去拥抱一夏天的风
天上的星星笑地上的人
总是不能够 不能知道足够

如果我爱上你的笑容
要怎么收藏 要怎么拥有
如果你快乐不是为我
会不会放手其实才是拥有

当一阵风吹来 风筝飞上天空
为了你而祈祷 而祝福而感动
终于你身影 消失在 人海尽头
才发现 笑着哭 最痛

那天你和我那个山岳
那样的唱着那一年的歌
那样的回忆那么足够
足够我天天品尝着寂寞

当一阵风吹来 风筝飞上天空
为了你而祈祷而祝福而感动
终于你身影消失在人海尽头
才发现 笑着哭 最痛

当一阵风吹来 风筝飞上天空
为了你 而祈祷 而祝福而感动
终于你身影消失在人海尽头
才发现 笑着哭 最痛

哦……

如果我爱上你的笑容
要怎么收藏要怎么拥有
如果你快乐不是为我
会不会放手其实才是拥有

知足的快乐叫我忍受心痛
知足的快乐叫我忍受心痛
]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/spider.html http://127.0.0.1/blog/html/2016/01/19/spider.html <![CDATA[爬虫框架 - scrapy]]> 爬虫框架 - scrapy

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/sql.html http://127.0.0.1/blog/html/2016/01/19/sql.html <![CDATA[Learning SQL]]> Learning SQL

学习SQL的一些基本语法。[1]

一些基本术语:实体结果集主键外键事务索引视图约 束

SQL语言可以分为几个模块:

  1. SQL定义语句(Data Definition Language),用于定义存储于数据库中的数据结构;
    • CREATE
    • DROP
    • ALTER
  2. SQL操作数据语句(Data Manipulation Language),用于操作数据库中的数据;
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
  3. SQL事务语句(Data Control Language),用于开始、结束或回滚事务。
    • COMMIT
    • ROLLBACK
    • GRANT
    • REVOKE

一定要注意,不同的数据库软件使用的SQL语法略有不同,如果某条语句提示语法错误请查找相应手册,确认语法符合要求。

数据操作

CREATE TABLE

标准语法定义:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)] [table_options] [select_statement]
-- 或:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(] LIKE old_tbl_name [)];
  • 使用IF NOT EXISTS判断表是否存在:

    CREATE TABLE IF NOT EXISTS tbl_name ......
    

ALTER TABLE

SQL格式:

ALTER TABLE tbl_name ADD (col_name1, col_name2);
ALTER TABLE tbl_name DROP COLUMN col_name;
  • 调整列的数据类型(在MariaDB 5.5.32上测试)[2]

    ALTER TABLE tbl_name MODIFY [COLUMN] col_name col_definition
    
  • 创建一个主键(在MariaDB 5.5.32上测试)

    ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name)
    
  • 删除列

    ALTER TABLE tbl_name DROP COLUMN col_name;
    

条件过滤-WHERE子句

  • 比较操作符有:=, !=, <>, <, >, LIKE, IN, BETWEEN, IS
  • 逻辑操作符有:AND, NOT, OR

范围条件-BETWEEN

即:a > 0 and a < 10等同于a BETWEEN 0 10。例如下列两条SQL语句等同。

SELECT name FROM employee WHERE start_time < '2007-01-01' AND start_time < '2005-01-01'

SELECT name FROM employee WHERE start_time BETWEEN '2005-01-01' '2007-01-01'

成员条件-IN

当对某个值的限制为一个有限集合时,SQL可以写为:

SELECT name FROM employee WHERE district = 'CHN' OR district = 'CHK' OR district = 'CD' OR district = 'SAV'

使用IN可以写的更为简洁,如:

SELECT name FROM employee WHERE district IN ('CHN', 'CHK', 'CD', 'SAV')

除了自定义集合,也可以使用子查询产生的集合。如:

SELECT name FROM employee WHERE district IN (SELECT district_code IN district WHERE people_count < 1000000)

对于IN也可以使用“非”操作,即表示不在集合内。关键字为:NOT IN

SELECT name FROM employee WHERE district NOT IN ('CHN', 'CHK', 'CD', 'SAV')

匹配条件-LIKE, 通配符,正则表达式

在各种匹配条件中,也可以使用内置函数。如:

SELECT name FROM employee WHERE LEFT(lname, 1) = 'T'

上面使用内置函数LEFT提取lname的首字母,然后与字母“T”进行比较。

  • LIKE可以使用通配符和一些简单的正则表达式。如下表:
符号 匹配
% 匹配任意数目的字符(包括0)。类似于正则表达式中的“.*”
_ 匹配一个字符。类似于正则表达式中的“.”
[abc] 匹配集合中的元素
[^abc] 不匹配集合中的元素
  • 另外可以使用函数REGEXP来使用正则表达式来进行匹配。如:
SELECT name FROM employee WHERE lname REGEXP '^[FG]'

在Oracle中使用函数regexp_like代替REGEXP,而在MS SQL SERVER中可以直接在LIKE中使用正则表达式。

关于NULL值的操作

当使用NULL需要注意:

  • 表达式的值可以为“NULL”,但为不能等于“NULL”。
  • 两个“NULL”不能判断为相等。如果利用“=”来判断两个“NULL”值,将不会得到正确的结果,而且服务器也不会发出出错提示,这是相当危险的。
  • 判断两个“NULL ”相等,需要用到操作符“IS”。如下:
/* 假定superior_emp_id存在NULL值 */
/* 错误的做法 */
SELECT emp_id, name FROM employee WHERE superior_emp_id = NULL
/* 正确的做法 */
SELECT emp_id, name FROM employee WHERE superior_emp_id IS NULL

另外进行条件筛选时也要考虑全面,注意NULL值的存在

分组与聚集

这一部分貌似有点像简单的数据分析和挖掘,当然是最最初级的。 它主要包括:分组聚集两种操作。

  • 分组即针对某一特征的不同值进行分组,分块。
  • 聚集其实是对分组后,每组中的数据进行统计分析。SQL只提供了一些简单的统计 函数。如MAXMINSUMCOUNTAVG等。

GROUP BY

SQL:

SELECT * FROM tbl_name WHERE conditions GROUP BY col_names;

SQL的执行顺序:(不同软件实现可能不同)

FROM -> WHERE -> GROUP BY -> SELECT

关于GROUP BY需要注意的:``SELECT``字句中只能包含常数、聚合函数、``GROUP BY``子句中的列(聚合键)

思考:

-- 执行一下下面的语句,看看结果如何?分析一下?
SELECT col_name AS COL_NAME, COUNT(*) FROM tbl_name GROUP BY COL_NAME;

HAVING

HAVING子句类似于WHERE,为指定条件的语句。但是HAVING的条件主要是针对聚合结果进行判断。所以,HAVING子句的条件可以是什么?不能是什么?

SQL格式:

SELECT * FROM tbl_name WHERE conditions GROUP BY col_names HAVING conditions;

思考:

  • 包含HAVING子句的SQL执行顺序是什么样的?
  • 什么时候用``WHERE``?什么时候用``HAVING``呢?

子查询

子查询是指包含在另一个SQL语句内部的查询。它总是被括号包围,且通常在包含语句前执行。可以分为两类:

  • 非关联子查询。子查询单独执行,在包含语句之前完成执行,不引用包含语句。
  • 关联子查询。不是在包含语句执行前一次执行完毕,而是为每个候选行执行一次。

非关联子查询

  • 如果子查询返回值为单行单列(即,仅为一个值),可以直接用于运算操作。如:
  • 如果子查询返回值为多行单列(即,为一个集合),不能用于相等操作,不过可以使用其它用于集合的操作符。如:IN, NOT IN, ALL, ANY。也可以使用聚集函数进行统计。
SELECT COUNT(*) FROM (
                        SELECT 1 FROM City
                        GROUP BY district
                     ) AS d;
  • 如果子查询返回(多行)多列。

关联子查询

多表查询与连接

集合

等同于数学中关于集合的一些操作,如并集,交集,差集。 并集操作

并集操作UNIONUNION ALL

  • UNION连接多个数据后会进行除重、排序。(所以速度后相对慢一点)
  • UNION ALL仅仅将两个数据集并在一起,无其它操作,相对于UNION快一些

一个简单的例子:

SELECT 1 NUM, 'abc' STR
UNION
SELECT 9 NUM, 'xyz' STR

交集操作INTERSECTINTERSECT ALL

语法与UNION一样。在MySQL中没有实现,SQL Server、Oracle和IBM DB2中有实现。

差集操作EXCEPTEXCEPT ALL

MySQL中没有实现。

集合操作的一些规则

想想数学中的集合操作规则。

指定排序

如果使用ORDER BY指定按某一列进行排序,此列名只能是第一个查询的列名。

如:

SELECT num, name FROM employee
UNION
SELECT product_id, open_b_id FROM account
ORDER BY num

操作优先级

  • INTERSECT优先于其它两个操作
  • 按从左到右的先后顺序进行操作

条件逻辑

事务

锁的策略

锁是数据库用于控制数据被并行使用的一种机制。当数据库的一些内容被锁定时,任何对这个数据的修改(甚至是读取)都必须等待锁被释放。主流有两种锁策略:

  • 数据库的写操作必须申请并获得写锁才能修改数据,而读操作必须申请和获得读锁才能查询数据,多用户可以同时读取数据(即读锁可以分配多个)。一个表(或页或行)只能分配一次分配一个写锁,并且拒绝读请求直至写锁释放。 读写是相互排斥的,读写都必须申请锁。SQL Server才用的是此策略,MySQL取决于选择的存储引擎。
  • 数据库的写操作必须申请并获得锁才能修改数据,而读操作不需要锁。但是数据库服务器必须保证读操作从开始到结束看到的是一个一致的数据视图。此方法称为版本控制写操作需要锁,读不需要锁,但服务器必须保证读时数据一致。Orale采取的是此策略。

锁的粒度

  • 表锁 阻止多用户同时操作一个表的数据
  • 页锁 阻止多用户同时操作表中同一页(2-16KB内存空间)的数据
  • 行锁 阻止多用户同时操作表中同一行的数据

SQL Server使用表锁,页锁和行锁,Oracle只有行锁,MySQL取决于存储引擎的选择。在某些情况下,SQL Server会逐步升级锁,Oracle从不升级锁

索引与约束

视图

参考资料

[1]Mick, 孙淼,罗勇译;《SQL基础教程》;人民邮电出版社
[2]http://dev.mysql.com/doc/refman/5.5/en/alter-table.html
]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/sscanf.html http://127.0.0.1/blog/html/2016/01/19/sscanf.html <![CDATA[一个字符引发的问题 - sscanf]]> 一个字符引发的问题 - sscanf

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/svn_mirror.html http://127.0.0.1/blog/html/2016/01/19/svn_mirror.html <![CDATA[SVN仓库安全之镜像备份]]> SVN仓库安全之镜像备份

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/svn.html http://127.0.0.1/blog/html/2016/01/19/svn.html <![CDATA[SVN Q/A]]> SVN Q/A

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/taiwan.html http://127.0.0.1/blog/html/2016/01/19/taiwan.html <![CDATA[台湾]]> 台湾

一些与美食有关的地名

下面的地名全都来自台湾美食中介绍到的:

  • 台中:南屯,北屯,
  • 台南:玉井,沙卡里巴,白河。
  • 彰化:北斗
  • 新北:深坑
  • 基隆:庙口(小吃)
  • 桃园:中历、村子口(?眷村)
  • 高雄:左营、岗山、美浓
  • 花莲:吉安
  • 屏东:垦丁
  • 南投:八卦山
  • 台东:太麻里

店:国旗屋(眷村)

阿美族

酸菜 -> 福菜 -> 梅干菜

以下信息来自不老的骑士

苏花公路:花莲至苏澳镇,公路在山崖上,依山面海,双行没有自行车道,有隧道。

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/tcp-wrappers.html http://127.0.0.1/blog/html/2016/01/19/tcp-wrappers.html <![CDATA[简易防火墙TCP-Wrapper]]> 简易防火墙TCP-Wrapper

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/test.html http://127.0.0.1/blog/html/2016/01/19/test.html <![CDATA[sphinx用法测试]]> sphinx用法测试
spam(eggs)
ham(eggs)

Spam or ham the foo.

The function spam() does a similar thing.

-rf

work recursively and force

  • A list of
  • short items
  • that should be
  • displayed
  • horizontally

See also

Module zipfile
Documentation of the zipfile standard module.
GNU tar manual, Basic Tar Format
Documentation for tar archive files, including GNU tar extensions.
environment
A structure where information about all documents under the root is saved, and used for cross-referencing. The environment is pickled after the parsing stage, so that successive runs only need to read and parse new and changed documents.
source directory
The directory which, including its subdirectories, contains all source files for one Sphinx project.
]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/tmux.html http://127.0.0.1/blog/html/2016/01/19/tmux.html <![CDATA[tmux]]> tmux

tmuxscreen的替代工具,功能比screen更为强大。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/todolist.html http://127.0.0.1/blog/html/2016/01/19/todolist.html <![CDATA[TODO List]]> TODO List
  1. sudo systemctl start openvpn-client@owind不能插入路由条目,连接上其它 vpn客户端
]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/unicode.html http://127.0.0.1/blog/html/2016/01/19/unicode.html <![CDATA[折磨人的字符编码问题]]> 折磨人的字符编码问题

网页因为乱码显示的一团糟就不说了。说下比较少见的情形。

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/vim.html http://127.0.0.1/blog/html/2016/01/19/vim.html <![CDATA[VIM Tips]]> VIM Tips

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/yslow.html http://127.0.0.1/blog/html/2016/01/19/yslow.html <![CDATA[Best Practices for Speeding Up Your Web Site]]> Best Practices for Speeding Up Your Web Site

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2016/01/19/zabbix.html http://127.0.0.1/blog/html/2016/01/19/zabbix.html <![CDATA[配置Zabbix]]> 配置Zabbix

Read more...

]]>
Tue, 19 Jan 2016 00:00:00 +0800
http://127.0.0.1/blog/html/2015/12/20/bigdata_trend.html http://127.0.0.1/blog/html/2015/12/20/bigdata_trend.html <![CDATA[引导,迎合]]> 引导,迎合

Read more...

]]>
Sun, 20 Dec 2015 00:00:00 +0800
http://127.0.0.1/blog/html/2015/12/20/children.html http://127.0.0.1/blog/html/2015/12/20/children.html <![CDATA[小孩教育]]> 小孩教育

Read more...

]]>
Sun, 20 Dec 2015 00:00:00 +0800
http://127.0.0.1/blog/html/2015/12/20/travel_wuyi.html http://127.0.0.1/blog/html/2015/12/20/travel_wuyi.html <![CDATA[武夷山之行]]> 武夷山之行

2014年7月30号出发,8月3号返回。

Read more...

]]>
Sun, 20 Dec 2015 00:00:00 +0800