Python-使用hexo的python脚本

为了简化blog的使用写的python脚本,用来简化自己的操作= =

更新了一下。

最新的代码在coding.net上

#!/usr/bin/env python2
# coding: UTF-8
import sys
import os
# 博客目录
blog_dir = '/home/svitter/svtter.github.io/source/_posts'
def help():
    '''output help information'''
    print '-n: new blog'
    print '-g: Generate and push'
    print '-h: help'
if len(sys.argv) < 2:
    print 'no option'
    help()
else:
    if sys.argv[1].startswith('-'):
        # 改变工作目录
        os.chdir(blog_dir)
        option = sys.argv[1][1:]
        if option == 'n':
            os.system("hexo n " + sys.argv[2])
            os.system("gvim " + sys.argv[2] + ".md")
        elif option == 'g':
            os.system('hexo g')
            os.system('hexo d')
            os.chdir('/home/svitter/svtter.github.io')
            os.system('. update')
        elif option == 'h':
            help()
        elif option == 'dir':
            print blog_dir
        elif option == 'e':
            os.system('gvim ' + blog_dir)
        else:
            print 'no such command.'
    else:
        help()

使用gdb调试

最近都是用gcc+vim写代码,昨天突然写个代码算法出个逻辑bug,因为用了大量递归调用,DEB半天出不来也是醉了,于是

学习一下gdb——之前也是勉强使用过,但是明显感觉不爽阿。。所以这次好好学习,记录一下。

目前我能用到的几个命令:

选择调试文件

  • <shell>: gdb <file>
  • 或者进入gdb以后,使用

断点

显示断点

  • (gdb): info break

添加静态断点

  • (gdb): b[reak] + 行数/函数名 (可以用tab补全)

添加条件断点

条件为真,则在断点处停止
(gdb): b addr if condition

删除断点

删除编号为1的断点, 如果不加参数,会删除所有断点
(gdb): delete breakpoint 1

启用/禁用断点

  • (gdb): disable breakpoint 1
  • (gdb): enable breakpoint 1

运行

开始运行

  • (gdb):r

继续

  • (gdb):c

单步调试

不进入单步执行
(gdb):n
进入的单步
(gdb):s[tep

显示变量

以变量为var为例

输出var的值

  • (gdb):p var

输出上一个求得值

  • (gdb):p

输出历史记录中值

  • (gdb):p $[num]

输出变量的类型

  • (gdb):whatis p

调用函数

  • (gdb):p add(a, b)

数组

输出a后面的十个元素
(gdb):p a@10

设置运行参数

  • (gdb):set args -b -x
  • (gdb):show args

参见大牛的部分:(陈皓的gdb讲解)[http://blog.csdn.net/haoel/article/details/2880]

二、设置观察点(WatchPoint)

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:
watch <expr>
    为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
rwatch <expr>
    当表达式(变量)expr被读时,停住程序。
awatch <expr>
    当表达式(变量)的值被读或被写时,停住程序。
info watchpoints
    列出当前所设置了的所有观察点。

TAG

  • 直接输入<CR>,执行上一条命令

ACM – hdu5104-water

这个题目的总结就是不作不会死- -好端端的暴力我非要用个bfs。

看见自己wrong了还以为是哈希的问题- =

题意

  • p1+p2+p3 = n,$p1 <= p2 <= p3$
  • 输出符合条件的组数

输入输出

  • 给100组n,输出组数

分析

  • 只有3个数,暴力解就可以,注意循环终止条件。

继续阅读

解决无法在CentOS下的gvim中使用ibus输入中文

问题

之前在gvim中一直无法使用中文,格外痛苦,后来使用了vim-ibus插件之后,可以在vim中使用中文了,但是依然不能在gvim中使用,一直以为是两个软件冲突的

问题,现在终于解决了。

  • gvim version: vim-X11
  • ibus version: 1.6

解决方案

  • 问题出在:使用的vim插件中有插件与ibus冲突,但是奈何找不到X11的log(应该可以找到,找到再说。。)
  • 排查方式比较简单,使用:PluginInstall,:PluginClean即可(考虑到我使用vundle管理插件)
  • 去除相应的插件即可(比如现在冲突的是auto-pairs)。如果不想去除冲突插件,可以考虑使用vim-ibus,这个在shell下是可以使得很多冲突减少的。
  • 可能auto-pairs在不久的将来就会修复这个bug,请在具体环境下排查

Linux-进程管理

本文出自svtter.com

进程的创建

用于进程的创建。fork()的作用是,从当前位置创建一个子进程,并执行。fork的返回值为子进程的pid

#include <stdio.h>
void main()
{
    int p1, p2;
    if (p1 = fork()) //父进程返回1, 子进程返回0
        putchar('b');
    else
    {
        if(p2 = fork())
            putchar('c');
        else
            putchar('a');
    }
}

运行结果

运行结果

进程的控制

在这段代码中使用了lockf, 和wait函数。作用是什么呢?

  • lockf顾名思义是锁定file. lockf(1, 1, 0)锁定资源,lockf(1, 0, 0)释放资源。

  • wait作用为等待子进程的返回信息。wait中的signal用于接受进程的返回信号,即exit(0)中的0

#include <stdio.h>
#include <wait.h>
// 利用lockf(1, 1, 0)锁定输出设备
// lockf(1, 0, 0)解锁输出设备
int main()
{
    int p1, p2, i;
    if(p1 = fork())
    {
        lockf(1, 1, 0);
        for(i = 0; i < 500; i++)
            printf("parent%d\n", i);
        lockf(1, 0, 0);
        wait(0);        //confirm the father killed after child
        exit(0);
    }
    else
    {
        if(p2 = fork())
        {
            lockf(1, 1, 0);
            for(i = 0; i < 500; i++)
            printf("son %d\n", i);
            lockf(1, 0, 0);
            wait(0);        //
            exit(0);
        }
        else
        {
            lockf(1, 1,0);
            for(i = 0; i < 500; i++)
                printf("grandchild%d\n", i);
            lockf(1, 0,0);
            exit(0);
        }
    }
}

运行结果

运行结果

php-php的类

关于PHP的类 http://php.net/manual/zh/language.oop5.php

(本来想顺便学学nodejs的,但是谁有那么多精力啊。。还有js学的像狗屎一样= =)

<?php
class Test
{
    private $name; // 可以定义类的访问权限
    public function __construct($name) //构造函数
    {
        $this->name = $name;
    }
    public function echoname
    {
        echo $this->name;
    }
}
$a = new Test("This is a.");
$a->echoname();
  • 构造函数重载我不会,有时间再更新吧。。
  • 先记录这些。

Linux-SELinux-httpd无法访问

目录的问题

由于SELinux造成的httpd中的目录无法访问,可以使用

  • chcon -R -t httpd_user_content_t <path to web files>
  • chcon -R -t httpd_sys_content_t <path to web files>

mark一个网站()[http://www.jb51.net/os/RedHat/1303.html]

文件夹访问权限

以上方法解决了SELinux的问题,但是我的目录依然没有访问权限。

然后看了一下文件的基本属性: -rw-r--r--. 1 root root 21 11月 11 12:27 index.html

应该也是没有问题的。

再查SElinux

随后使用cat /var/log/messages探索一番,依然没有找到问题所在——SELinux没有报错。

防火墙的问题?不是阿。因为我本身是在内网访问,防火墙应该不会出问题。

那应该是什么问题呢?

配置文件

终于在配置文件中找到了问题。

apache在进入2.4.*以后,不再使用Allow from all这种形式了,取而代之,使用Require from granted这种格式。晕,就是在此处,<Directory>没有设置好,坑了好久阿。。

相对的我这几天一直都在deepin下开发——因为apt-get得到的apache之前比较习惯,此外deepin没有se也是省了很多功夫。不过通过这一次,总算是把问题解决了!

鼓励!