postgresql基本命令

Posted in 2016-8-8 21:53 | Category: Linux | Tags: postgresql linux

创建表

CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);

-- 开始为注释

删除表

DROP TABLE tablename;

插入数据

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

或者

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');

或者

COPY weather FROM '/home/user/weather.txt';

查询

基本查询

SELECT * FROM weather;

或者

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

消除重复行

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

多表查询

SELECT weather.city, weather.temp_lo, weather.temp_hi,
       weather.prcp …

Python二分查找实现

Posted in 2016-8-5 20:55 | Category: Python | Tags: python 算法 二分查找

三种方法实现:

def find(a, low, high, v):
    mid = low + (high - low) // 2
    if v < a[0] or v > a[-1]:
        return False
    if mid >= len(a):
        return False
    if a[mid] == v:
        return True
    elif a[mid] > v:
        return find(a, low, mid - 1, v)
    else:
        return find(a, mid + 1, high, v)

def find2(a, low, high, v):
    mid = low + (high - low) // 2
    if v < a[0] or v > a[-1]:
        return False
    if a[mid] == v:
        return True
    elif a[mid] < v:
        low = mid
    else:
        high = mid
    return find2(a, low, high, v)

def find3(a, v):
    n = len(a)
    low = -1
    high = n
    ret = True
    while (low + 1 != high):
        mid = low + (high - low) // 2
        if (a[mid] == v …

python列表reverse后结果为None

Posted in 2016-8-1 0:35 | Category: Python | Tags: python

今天在实现列表倒序时偶然发现

print(list.reverse())

#+RESULTS:
: None

返回为空,搜索了一下,才知道原来reverse是在原列表进行的操作,所以正确的方法是:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a.reverse()
print(a)

#+RESULTS:
: [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

同样的适用于 sort

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a.reverse()
print(a)
a.sort()
print(a)

#+RESULTS:
: [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

话说 org-mode显示的挺好的,到了markdownresult就不显示了

使用python脚本恢复原md文件

Posted in 2016-7-28 23:56 | Category: Python | Tags: pelican python

首先,这个恢复不是从磁盘中恢复,而是从数据库中恢复

原因呢,不久前我的博客md文件被我不小心删了, 而我的博客分静态博客(基于pelican),和我自己写的动态博客(需数据库),静态博客需要md文件, 不过还好,我的数据库一直有备份,所以直接从数据库中恢复

直接给出代码

import psycopg2
import os

conn = psycopg2.connect(database="blog",
                        user="postgres",
                        password="Your password",
                        host="127.0.0.1",
                        port="5432")
cur = conn.cursor()
cur.execute('select id,title,publish,author,category,content from articles')
articles = cur.fetchall()
print(len(articles))
for article in articles:
    cur.execute("select a.title,t.name from articles as a,tags as t, \
    tag_article as tt where  \
    tt.tags_id = t.id and tt.articles_id = a.id and a.id = %d" %
                article[0])
    tags = cur.fetchall()
    tags = ','.join(tag[1] for tag in tags)

    filename = os.path.join('markdown/', '%s.md' % article[1])
    title = (
        'Title: %s\nAuthor: %s\nDate: %s\nCategory: %s\nTags: %s\nSlug: %s\nSummary: %s\n …

tar打包排除目录

Posted in 2016-7-25 22:55 | Category: Linux | Tags: linux tar

使用 --exclude + 需要排除的目录

示例:

tar zcvf hello.tar.gz --exclude="**/__pycache__" maple/ manager.py

注意 :

--exclude 参数需要在要打包的文件或目录前,否则不起作用,另外排除的目录后不能加 /

--exclude 同样用于 排除文件

tar zcvf hello.tar.gz --exclude="*.pyc" maple/ manager.py

如何安装及使用Honmaple社区程序

Posted in 2016-7-25 12:38 | Category: 生活随笔 | Tags: flask python

如何安装及使用

安装需要的package

pip install -r requirements.txt

配置config

查看配置详细介绍

注释下面代码

因为如果不注释的话 初始化数据库 会报错

文件位置: maple/topic/forms.py

category = SelectField(
    _('Category:'),
    choices=[(b.id, b.board + '   --' + b.parent_board)
             for b in Board.query.all()],
    coerce=int)

初始化数据库

python manage.py db init
python manage.py db migrate -m "first migrate"
python manage.py db upgrade

ok,将第三步中注释的内容恢复

创建管理员账户

python manager.py create_user

本地搭建


登陆并进入后台

python manager.py runserver

Visit http://forums.localhost:5000/admin

服务端搭建


参考 http://flask.pocoo.org/docs/0.11/deploying/

以我的配置为例:

配置nginx

server {
    listen …

virtualbox中使用U盘等usb设备

Posted in 2016-7-15 12:39 | Category: Linux | Tags: linux virtualbox

主系统:archlinux + virtualbox 5.0.24-1

虚拟机:windows

安装VirtualBox Extension Pack

下载

先从官网下载扩展包 https://www.virtualbox.org/wiki/Downloads

注意 :版本要一致

└──╼ pacman -Qi virtualbox
名字           : virtualbox
版本           : 5.0.24-1
描述           : Powerful x86 virtualization for enterprise as well as home use
架构           : x86_64

所以下载 5.0 版本的pack

安装

参考 https://wiki.archlinux.org/index.php/VirtualBox

$ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.24-108355.vbox-extpack

安装不一致的版本会

└──╼ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.0-108711.vbox-extpack
0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to install "/home/jianglin/VirtualBox VMs/extpack/Oracle_VM_VirtualBox_Extension_Pack-5.1.0-108711.vbox-extpack"
VBoxManage: error: VBoxExtPackRegister returned VERR_VERSION_MISMATCH, pReg=0000000000000000 ErrInfo='VirtualBox version mismatch - expected 5.1 got 5.0'
VBoxManage: error …

centos7安装python3及pip3

Posted in 2016-7-7 9:32 | Category: Linux | Tags: pip python

安装python3

安装python3很简单

  • 下载源码并且编译
  • 安装epel

这里采用第二种方法:

yum install epel-release

安装完成之后,yum list python3* ,你就可以看见 python34

yum install python34

安装pip3

参考问题
如果在上述安装 python3时采用了第二种方法,pip默认未安装,而且无法通过yum install python34-pip来安装

正确的方法应该是:

yum install python34-setuptools
easy_install-3.4 pip # 这里可能有一些出入,总之是使用python3的easy_install

ok,就这样

emacs解决windowns文件乱码

Posted in 2016-6-22 11:43 | Category: Linux | Tags: linux emacs

最近在看windows文件时总是乱码,查了资料后才知道windowns下的编码为 gb2312 , 而linux下的编码为 utf-8 ,所以打开文件会乱码

如何解决?

换系统

这不是废话吗!

修改language环境

在配置文件中加入这么一行

(set-language-environment 'Chinese-GB)

重启就行,结果····打开 linux下的文件乱码

重新以gb2312的编码载入文件(推荐)

参考这里

M-x revert-buffer-with-coding-system

选择chinese-gb2312,确认载入(不需要重启)

ok,是不是很简单

黑客丛林之旅

Posted in 2016-6-21 21:51 | Category: Web安全 | Tags: web linux security

无意间看到,试了一下,结果.....http://www.fj543.com/hack/

第一关

没什么好说的,查看源码

img

第二关

还是查看源码,结果发现

onSubmit="return chkPassword()"

Ok,f12进入 console,输入

function chkPassword(){
alert('adas');
}

覆盖原有js

第三关

这关我也没想到,后来百度之,原来是cookie的原因

还是进 console

document.cookie="login=yes"

第四关

img 看到这里是不是很熟悉,摩尔斯密码,google一下 对应的密码就是 iamok

第五关

根据提示,密文为成 YmFzZTY0aXNvaw==ad93c1d102ae60f4

第一个很熟悉为base64加密,第二个为md5加密,解密后的密文为

    └──╼ base64 -d
YmFzZTY0aXNvaw==
(C-D)base64isok

第六关

what?这是什么,实在是想不出来,百度一下, 原来

password = sum(port)

密码为各数据库port之和

password = MSSQL(1433)+MySQL(3306)+Oracle(1521) = 6260

第七关

img

很明显,考察的是对图片的处理,但是我不会,不会,会….

文本打开,拉到最后面你会发现“爸鼻我们去哪儿”(vim打开乱码,emacs打开还是图片,C-c C-c转换后乱码) feh打开,发现"8b" OK,key应该就是 8bwmqne (待会儿试试将emacs的编码转成windows的)

第八关

社工,百度

其实只要右上角,查看作者介绍就能知道 吴世昌的弟弟叫吴其昌,网名 …

flask时间格式化

Posted in 2016-6-15 23:46 | Category: Python | Tags: flask datetime python

在前端显示为该问题 "几分钟前发表或几天前发表"

后端通过filter注册

参考资料

设计需求

  • 如果问题发表超过 10天 ,则显示为 %Y-%m-%d %H:%M

  • 如果小于 10天 ,但是大于 1天 ,则显示为 n天前 发表

  • 如果小于 1天 ,但是大于 1小时 ,则显示为 n小时前 发表

  • 如果小于 1小时 ,但是大于 90秒 ,则显示为 n分钟前 发表

  • 如果小于 90秒 ,则显示为 刚刚 发表

具体实现

通过 diff.daysdiff.seconds 实现

比如,大于10天

if diff.days > 10:
    return dt.strftime('%Y-%m-%d %H:%M')

大于90秒,小于1小时

if diff.seconds <= 3600 and diff.seconds > 90:
    periods = ((diff.seconds / 60, "minute", "minutes"), )

具体代码

def timesince(dt, default="just now"):
    now = datetime.now()
    diff = now - dt
    if diff.days > 10:
        return dt.strftime('%Y-%m-%d %H:%M')
    if diff.days <= 10 and diff.days > 0:
        periods = ((diff.days, "day", "days"), )
    if diff.days <= 0 and diff.seconds > 3600:
        periods = ((diff.seconds / 3600, "hour …

linux下串口读写权限问题

Posted in 2016-6-15 23:21 | Category: Linux | Tags: C51 linux 串口

方法很简单,将用户加入串口所对应的group,需要 注意 的是不同的系统对应的group可能不同

按照网上说的加入 dialout,

└──╼ sudo usermod -a -G  dialout username

结果提示 dialout”组不存在

查看对应的组

└──╼ ls -al /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 0 6月  15 23:09 /dev/ttyUSB0
└──╼ sudo usermod -a -G  uucp username

ok,之后重启一下

archlinux更换默认内核为linux-lts

Posted in 2016-6-12 16:23 | Category: Linux | Tags: linux archlinux

前几天更新内核到了 4.6.2 ,结果很不幸,电脑变得非常卡(貌似只有我遇到这个问题?), 实在是找不到解决办法了,于是将内核更改为 linux-lts

更改办法很简单,重装 linux-lts

$ sudo pacman -S linux-lts

重启之前,请确认安装了

img

(注:我的是双显卡,还需要安装 bbswitch-lts )

基于restful的flask权限管理

Posted in 2016-6-10 1:34 | Category: Python | Tags: flask python restful

更新:2016-8-16

class RestBase(object):
    decorators = ()

    def __call__(self, func):
        f = self.method(func)
        if self.decorators:
            for dec in reversed(self.decorators):
                f = dec(f)
        return f

    def method(self, func):
        @wraps(func)
        def decorator(*args, **kwargs):
            meth = getattr(self, request.method.lower(), None)
            if request.method == 'HEAD':
                meth = getattr(self, 'get', None)
            if meth is not None:
                check = meth(*args, **kwargs)
                if check:
                    return self.callback()
            return func(*args, **kwargs)

        return decorator

    def callback(self):
        abort(403)

为什么需要restful形式的权限管理

最近在写flask应用时使用了 restful 形式的flask.views.MethodView,但是在对其进行权限管理时遇到了一些问题

flask文档上介绍说用

decorators = []

添加装饰器,但实际使用上,比如

  • getpost 采用不同的权限

get 不使用 login_required
post 需要 login_required

这样就不能使用 decorators 对视图进行装饰

  • post ,delete, put 都需要 login_required,但是get不需要 而 delete 又需要更高级别的权限,我们可以这样

    class AAA(MethodView):
    
        def get(self,uid):
            ...
    
        @login_required
        def post(self …

培根密码

Posted in 2016-5-30 16:41 | Category: Web安全 | Tags: linux 加密解密 security

第一种方式
A aaaaa B aaaab C aaaba
D aaabb E aabaa F aabab
G aabba H aabbb I abaaa
J abaab K ababa L ababb
M abbaa N abbab O abbba
P abbbb Q baaaa R baaab
S baaba T baabb U babaa
V babab W babba X babbb
Y bbaaa Z bbaab

第二种方式
a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABB k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB

wireshark解决权限问题

Posted in 2016-5-29 10:32 | Category: Web安全 | Tags: linux wireshark

参考sudo 或者 root 打开 wireshark 是不安全的,毕竟我不是root敢死队

如何以普通用户运行 wireshark

  1. 添加wireshark用户组

    $ sudo groupadd wireshark
    
  2. 将dumpcap更改为wireshark用户组

    $ sudo chgrp wireshark /usr/bin/dumpcap
    
  3. 让wireshark用户组有root权限使用dumpcap

    $ sudo chmod 4755 /usr/bin/dumpcap
    

(注意:如果设为4754 Wireshark还是会提示没有权限 )

  1. 将用户加入wireshark组
    $ sudo gpasswd -a username wireshark
    或者
    $ sudo usermod -a -G wireshark username
    

flask日志处理

Posted in 2016-5-24 22:36 | Category: Python | Tags: flask python logging

使用文档上的一句话:

Applications fail, servers fail. Sooner or later you will see an exception in production. Even if your code is 100% correct, you will still see exceptions from time to time. Why? Because everything else involved will fail.

应用发生错误时发送邮件

这里文档上个人认为说的不清不楚,毕竟想要使用还要看logging的文档

原文档

ADMINS = ['yourname@example.com']
if not app.debug:
    import logging
    from logging.handlers import SMTPHandler
    mail_handler = SMTPHandler('127.0.0.1',
                               'server-error@example.com',
                               ADMINS, 'YourApplication Failed')
    mail_handler.setLevel(logging.ERROR)
    app.logger.addHandler(mail_handler)

实际上这里的好多参数没有交代清楚,具体可以看https://docs.python.org/2/library/logging.handlers.html#smtp-handler

具体代码

import logging
from logging.handlers import SMTPHandler
from logging import Formatter
config = app.config
credentials = (config['MAIL_USERNAME'], config['MAIL_PASSWORD'])
mail_handler = SMTPHandler(
    secure=(),
    mailhost=(config['MAIL_SERVER'], config['MAIL_PORT']),
    fromaddr='',
    toaddrs='',
    subject='YourApplication Failed',
    credentials=credentials)

mail_handler.setFormatter(Formatter …

解决evil-escape下visual-state不能使用'jj'的问题

Posted in 2016-5-21 16:28 | Category: Linux | Tags: linux emacs

在一个多月前我给 evil-escape 开发者提了一个issue,但是不幸的是,没人理我,人理我,理我,我·····

于是这一个多月来我使用visual-state下选择段落的方式是: 跳到段落最后,按k从下往上选择, 现如今都快成为习惯了,今天终于有人解决了我的问题,非常感谢 ZzAntares

之前我用

(setq evil-escape-excluded-major-modes '(dired-mode neotree-mode evil-visual-state))

解决了'jj'在 dired-mode neotree-mode 下的问题,但是遗憾的是 visual-state 下的选择问题仍然没有解决

现在终于解决了, issue

(setq evil-escape-inhibit-functions '(evil-visual-state-p))

ok ,就这样