Let's Encrypt-免费HTTPS证书申请

let-encrypt-banner.gif

背景知识

HTTPS可以看作是 HTTP + Secure 的缩写,即安全的超文本传输协议,和HTTP相比,HTTPS通信是建立在一条加密通道上进行的,能够保证数据的完整性和机密性。如

从制作python模块包说起

最近用python做一些内部的项目,于是将一些常用的一些工具,接口封装成了通用的python模块包,避免了重复建设,也免除了不必要的Ctrl-C, Ctrl-V。那么如何制作python的模块安装包呢?python模块的打包工具又有哪些呢?

wheel egg 与 tgz

首先我们从python包的格式说起,现在常见的包格式有egg, wheel以及源码安装包tgz,这三种格式的包都

angular2动态加载组件

  • angular2 在发布了新的rc版本之后,已经弃用了DynamicComponentLoader动态加载组件的方法。*

angular2是google新推出的一套前端框架,相比angular1,angular2将主要通过组件来组织整个应用。 开发者可以将CSS,js,html封装成一个个功能独立的组件。这个组件有自己的标签,可以在其他组件中调用 也可以调用其他组件。通过组件化的开发大大提高

python 模块静态编译

最近有个需求,需要在服务器上跑一个简单的web服务,由于服务器上环境差异较大,准备编译一个独立的静态python。这样以后服务扩容,迁移都比较轻松。通过几天的研究,虽然中间报了一些错误,python的静态版本,基本编译成功。 staticpython

毕业旅行

途中见闻

记得很久之前,就想着毕业旅行的时候一定要去西藏,去拉萨,也许是因为那句“我是世间最美的情郎”,也许是对藏族文化的好奇吸引了我。但是毕业临近才发现各种烦碎的小事却异常多,最后拉萨的旅行计划只能作罢。在完成毕业答辩之后,我们临时决定跟团前往九寨沟。早上五点钟左右就坐上了前往九寨沟的大巴车。沿途我们经过汶川和茂县,公路两边都是极陡的高山,车在山中穿行,总感觉山上的碎石会砸下来,幸好,很

python with statement

这篇文章主要对工作中经常接触到python 文件读写及with语句做一个总结.

文件打开

try:
    with open(filename,'r') as filea:
        do_process()
except IOError as e:
    print e.strerrpr

打开多个文件:

md5的简单实现

好久没写blog,最近也正好想实现一下常见的摘要算法。

md5的背景介绍

md5是一种消息摘要算法,它能够将输入的任何数据经过运算产生128 bit的hash值(这个hash便是这段消息的摘要) 一般情况下,md5产生的消息摘要发生碰撞得可能性很低(还是存在的),所以人们常用通过对比经md5运算后摘要 来验证一段消息的完整性

md5的算法

md5算法可以描述成下面5个步骤:

android 简易指南针

最近学习了一下android的程序设计,这里学习android传感器的使用 于是想做一个简单的指南针。(需要有地磁感应器和加速度感应器的支持)

基本原理很简单,只要通过计算获得当前手机的方位角即可。

接下来记录一下基本的流程:

1.获取SensorManager

mSensorManager = (SensorManager)getSystemServi

linux sed 命令总结

前一篇的文章里,我们介绍了常见的文本处理工具。这篇文章里, 主要总结一下sed这款工具,sed 的全称是流编辑器。主要是用来对文本进行过滤和转换

首先我们介绍一下,在sed中执行的动作有下面几种

=              #打印当前的行号
a \text        #将text添加到新行里去
i \text        #将文本插入到新行里
r filen

linux shell中常见文本处理工具

这一节我们将介绍linux下面文本处理的一些工具和命令

sort

sort 以每一行为单位,来给一个文本文件排序。默认是按升序来排序的

-d   #排序时忽略行前面的空白,从第一个非空白的地方开始比较
-f   #忽略字母的大小写
-i   #忽略不可打印字符

-n   #根据数字的大小进行排序
     #比如说 666和1000 默认的排序结果是1

linux的管道及重定向

在这篇文章里面,我将总结一下重定向和管道相关命令,同时会介绍一些具体的示例 linux的I/O重定向在shell里面很常用。通过重定向可以提高我们的工作及学习的效率

通过重定向或者管道我们能够改变一个数据流的流向亦或是一个数据流的源。(在linux的shell里面 ,输入和输出的都是一串串的字符,像水流一样,我们把它称为字符流)

linux的shell中有3个标准的流,对应着三个不同的文件描述

linuxshell命令总结(2)

前面介绍了一些基本的操作命令,这里我们再看看查看文件的一些命令

查看文件信息

cat

cat的作用是将一个文件的信息读到标准输出设备上(一般情况就是我们的屏幕) cat 后直接加上要查看的文件就可以,如果什么都没有加,就会从标准输入读,然后再输出到标准输出上 下面是一些常用的参数:

cat -n filename  #输出信息加上行号(-b 的作

linux shell命令总结(1)

这里将对linux下面的基本文件的操作,做下简单的总结

这些命令都是非常基本和常用的命令。

ls

ls命令可以用来列出一个文件夹下面所包含的内容。 在当前的目录下直接输入ls,则可以输出当前目录下所包含的文件信息 如果你想输出其他文件夹下的信息,则可以在后面跟上需要查看的文件夹的路径 例如我想查看我的home下面的信息则可以 ls ~ (~在linux上表示用户目录)

那么ls可以

SaveLabmanNo.004

杭州区的网络赛,求异面直线的最短距离,及公垂线与两条直线的交点坐标,这题开始直接用公式计算WA了无数次, 如果直接用公式计算,改用用long double保存中间计算结果,可以Accept.

下面贴的是一个向量法的代码

#include<cstdio>
#include<cstring>
#include<cmath>
#define eps (1e-10);
st

gentoo安装小记及其他

已经好久没有写博客了。这几天稍稍有点时间。我把用了一年的archlinux给换成gentoo了。 去年虽然也装过,但是那次困难重重,最后死于Xwindow,幸好用arch,让我从她的的wiki 上学到了很多(Archlinux的wiki真的很棒!)

这里小小的总结下这几天的折腾的事吧。安装gentoo,最难的地方莫过于配置内核,一旦配置 的不好,有什么驱动给漏了。轻则不能正常上网,重的话可能直接

用RAWSOCKET实现简单抓包

网络上随时都流通了大量的数据包,我们要想实现抓包,并分析的,那么该怎么做呢?其实思路很简单 大概流程如如下:

1 在合适的时候捕获数据包,保存到缓冲区,备用

2 按照一定的结构和格式去读取缓冲区的内容

由于各种公开的网络协议是已知的.所以对于数据包的分析就比较简单.这里主要讲解的是如何捕获到原始的数据包

这里我们借助LINUX系统里的套接字.TCP/IP协议套接字分为三大类,它们分别是数据

CRC校验

计算机网络的一次作业。

冗余码的生成

1.首先将k位信息码左移r位,得到长度为(k+r=n)的数

2.用得到的(k+n)位数,除以除数P(除数一般是一个生成多项式)得到余数R(n位,比P少一位)

3.R为所求冗余码

模2运算

模2运算进行加法不进位,实际上就是我们熟悉的异或运算。

/*********************************

poj1511InvitationCards

题意

题目给了一些站点。和一些路线(单向的)。现在有很多ACM志愿者,他们要从中央站点出发分别到其它站点

志愿者在傍晚还需要返回中央点(第一个点)。求最少所需的费用。

解法

两次spfa,第一次对原图spfa把中央检查站到每个站的距离相加,第二次对反图spfa,再把各站到中央检查站的距离相加,输出即可

//bnu1630
#include<cs

poj1459

题意大概

有n个发电站,m个用户,以及以及一些电力中转站。求电量最大消耗量

建图

典型的多源多汇题,所以加上一个超级源和超级汇,超级源和每个发电站之间连线,容量是发电站的电量

从每个用户向超级汇连线,容量是用户的消耗量

然后就直接可以用用模板解题了

//bnu1578 poj1459
//600k 63ms
#include<cstdio>

openshift试用

openshift是红帽推出的云平台,提供了丰富的语言平台和框架支持.甚至可以自己DIY

为了学习python,我用django写了一个简单的blog,尝试部署到openshift上.

下面是我的操作流程

注册用户

单击此连接注册帐号

注册完帐号之后,可以用RH提供的web方

poj1014Dividing

题目大意如下:有6种物品,都有不同的价值(分别为1,2,3,4,5,6)和数量. 问是否可以将他们分成两个相等的部分.

思路: 很暴力的险过.dp[i]表示,物品价值为i的情况是否出现. 那么我们枚举每一种物品.和价值.如果出现总价值的的一半.则可以平分.

//bnu1133
#include<stdio.h>
#include<string.h>
bool dp[60

poj1836Alignment

题意大概是:最少去掉队列中的多少个士兵后,使队伍中的每个士兵都可以看见无穷远的地方

解法:LIS问题 这样我们从左向右和从右向左求最两次最长上升子序列.然后枚举每一个中间点.找到两个序列 和的最大值.这样出队伍的人也就确定了.

最长上升子序列的N^2算法

设dp[i]在序号为i的的串中,最长的上升子序列的长度.

那么已知dp[i]后,dp[i+1]...dp[n]的值也就显而易见

POJ1011Sticks

题意大概是:有一些棍子,现在需要把他们拼接恢复成若干根长度相同的棍子. 求这些棍子的最小长度

这题和poj2362类似.减枝的部分见代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 70
int

poj1129ChannelAllocation

在一个区域内有若干信号转发器,相邻的装发器不能转发相同频道的信号. 给你一个转发器的分布图.让你确定最少需要的频道数量

思路:图着色的问题.由于只有26个点.直接就过了.

//bnu1248
#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;
#define M

poj1035Spell_checker

字符串的模拟题,先给定一个字典.如果给定的单词在字典中出现过,那么输出 XXX is correct

否则尝试删除,替换,插入一个字母,如果变换后的单词在字典中出现,则按先后顺序输出.

大体思路:

字符串的模拟题.暴力就可以过.分析见代码注释

//bnu1154
#include<cstdio>
#include<cstring>
#include<iostream

POJ3009-Curling2.0

题意总结如下:

2表示冰球的起点 3表示冰球的终点 1表示有障碍物.当冰球碰上障碍物时,障碍物会破碎.冰球停在前一格. 0 表示可以通行,无阻力,所以冰球在这上面会一直滑行

由于场地的模型中,障碍物会被击毁,所以不能用普通的宽搜,这里用深搜 加上回朔解决.

//bnu3128
#include<stdio.h>
#include<string.h>
#define M

poj3432CountSquares

给你n个点,求这些点中可以构成多少个正方形.(顶点相同的算同一个)

基本做法

把所有点都用hash存起来,然后枚举两个点,算出另外的两个点,如果hash中能找到,则 可以构成一个正方形.

//bnu3551 poj3432
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace

poj3349SnowflakeSnowSnowflakes

已知一片雪花的有6个角,给你一些数据,分别表示一片雪花的每个角的长度. 然后你要找出是否存在两片相同的雪花. 如果两片雪花,角的长度按照次序对应相等,则可以说它们是相同的.例如

1 2 3 4 5 6

4 3 2 1 6 5 可以从1逆时针看 所以这是两片相同的雪花

做法

先用hash把数据存一下,计算时对于hash值相同的雪花.固定一片雪花,另一片雪花,我们分别按逆时针和顺时

bnuoj代码提交器

用bash shell写的一个bnuoj平台的代码提交器. 平时习惯用vim在终端写代码,每次提交的时候特别麻烦,写个提交器,就方便多了 顺便联系一下shell编程

但是程序源代码的第一行要表明写一个注释,表示当前题目的题号

提交数据,我用wireshark抓包,分析了一下提交上去的数据.具体内容看代码吧

#!/bin/bash

filename=$1
#你的oj

poj1007DNASorting

一道求逆序数的题.逆序数的含义是在一个排列中,如果一对数的前后位置与大小顺序相反, 即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数

逆序数的求法之一就是暴力直接计数,时间复杂度为O(n*n),第二种方法是通过改进归并排序求逆序数 复杂度为O(n*logn)

poj1804和这题类似,求最少的交换次数,应为每交换一次都能使逆序数减一.当逆序数为0时

poj2458Highways

裸题,求最小生成树中的最大边. 下面是prim算法实现的

#include<stdio.h>
#include<string.h>
#define MAX 505
#define INF 0x3f3f3f

int mmp[MAX][MAX];
int dis[MAX];
int vis[MAX];
int prim(int);
int main()
{

linux缓冲区类型

上次同学写了一个程序,在这里我给简化为下面的代码,

#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("hello");
    while(1);
    return 0;
}

你会发现在linux系统下,执行这个程序的时候。程序并没有输出hello,难道是print语句没有执行吗?这也让我当时 感到疑惑了。

通过ip获取mac地址

这里是通过ARP协议获取局域网中指定ip地址的对应的硬件地址

大概流程如下

1.这里通过socket创建原始套节字,需要root权限

2.自己构建一个arp请求的数据包

3.发送这个数据包,接受arp回应包,处理数据

构建arp数据包时需要本地的ip及硬件地址。这个在上篇文章有介绍这里为了简单,直接指定了本地的ip和mac

发送的包,arp部分长度只有28.所以还要有18字节填充,否则

POJ1789TruckHistory

2012年的最后一天。刚刚又A了一道题。留作纪念 题意大概是给你N个字符串,串长度为7。每个串都可以由其他串变化而来 其代价是两个串中对应位置不同字母的个数。寻找一种方案是代价最小

我们把每个串看成一个点。构建一个图。图的边的权值就是两个串之间不同字母的数目 用prim算法求的最小生成树既可!

//poj 1789 最小生成树
#include<string.h>
#in

linux下获取IP和硬件地址

在linux下获取当前的IP地址我们用ifconfig命令 但是如果通过编程怎么实现呢?下面的代码或许有一点启示

这里用到的函数有:

socket 创建套节字

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就

是对设备的一些特性进行控制

下面是用到的两个参数

宏定义 SIOCGIFHWADDR表示获取接口的硬件地址

宏定义 SIOCGIFADD

大数加法

大数运算指的是两个很大的数之间进行运算。由于这个数很大 可以达到几百位。那么直接用int将无法表示。所以我们要考虑 其他方法进行计算。直接模拟就是一个比较直观方便的处理方法 这里以高精度加法为例进行说明。

首先我们将大数以字符串的形式读入到内存中

计算的时候就模拟小学时学习的竖式相加.例如下面:

例如:

    18
  + 21
  -----
    39

计算的时

bnu14288Cowties

昨天练习一道题.题意大概是.有n头牛,需要按次序连接成一个环(1连2,2连3....,).每头牛都有几个可选坐标.求怎样连可以使连接的线最短.

思路:dp的思想.cow[i].dis[j]表示第i头牛的第j个坐标到第一头牛的第t个坐标的最短距离由于要连成环,所以cow[0].dis[t]里就是这个环的最短距离 .枚举一下第一头牛的坐标.就可以得到结果.

最后的结果要取整.第一次就是因为不是取整

军队调度

今天开始又要做题了.A的第一题.发一下,以表纪念.

本题用递归模拟既可

分四种情况

1 把栈内数据放入左边的队伍中 2把栈内数据放入右边的队伍中 3左边队伍中的人直接到右边的队伍中去 4左边的人到栈中去

#include<cstdio>
#include<cstdlib>

#define YZ 3  //左边到栈中去
#define OUT 1 //到右边队伍中

linux编程之fork及vfork

linux下的多线程编程中,创建进程主要用fock函数。使用该函数要包含头文件 fock()函数比较特殊,调用一次返回两次。如果执行成功,根据其返回值可以可以区别父子 进程,返回0表示在子进程中,如果在父进程中则返回子进程PID。出错返回-1,fock()创建 的子进程是父进程的副本,它将获得父进程数据段、BSS段、代码段,栈,堆等资源的副本。 但是父子进程间不共享这些存储空间。下面是一个fock

回想-感慨

今天晚上,的确很高兴。终于如同小狼(XX是小狼,你懂得)说的一样,我们参加比赛不仅 仅是我们自己,更重要的是为了软工的荣誉,真的感谢他,这个学期来一直在奋斗。我也感到很 荣幸,遇上这样一位很厉害的同学加朋友但是比赛之后,我们回望一下走过的路。却感到些许的 不安,心中泛起了淡淡的波澜。

正如陶姐所说的,在一个团队中,你们应该时常考虑。你为这个集体究竟贡献了什么,你又 从这个集体中获得什么。当思考这

最大连续字段和

最大连续子段和的定义

给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值。如果该序列的所有元素都是负整数时定义其最大子段和为0

求法1:

第一种当然是暴力枚举每一个子段,求其和比较。这里不再讨论

方法2:

我们知道每一个子区间都可以表示为a[j]-a[i](这里给出C语言的实现代码)

hdu1230(火星A+B)

Problem Description

读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……

I