最近在刷题,总想把题目保存下来,这样没网的时候也可以做题,放手机里也可以随时做了。所以就想着把题目抓下来保存为比较通用的pdf了。
一开始想的是先做类似整站下载,把文字和图片都抓下来,然后再做html转pdf。自己写工具抓下来的话,要抓图片、修改网页里面图片的链接,昨天调研了一下,没找到用python有什么方便的办法,就放弃这条路了。
今天突然找到,网上还是有很多直接网页保存为pdf的工具、网站的。最方便、强大的要数pdfmyurl了。
最近在刷题,总想把题目保存下来,这样没网的时候也可以做题,放手机里也可以随时做了。所以就想着把题目抓下来保存为比较通用的pdf了。
一开始想的是先做类似整站下载,把文字和图片都抓下来,然后再做html转pdf。自己写工具抓下来的话,要抓图片、修改网页里面图片的链接,昨天调研了一下,没找到用python有什么方便的办法,就放弃这条路了。
今天突然找到,网上还是有很多直接网页保存为pdf的工具、网站的。最方便、强大的要数pdfmyurl了。
由于某种原因,今天玩了一下Hadoop。正确来说,我是玩HOP,一个Hadoop的修改版本。
The Hadoop Online Prototype (HOP) is a modified version of Hadoop MapReduce that allows data to be pipelined between tasks and between jobs. This can enable better cluster utilization and increased parallelism, and allows new functionality: online aggregation (approximate answers as a job runs), and stream processing (MapReduce jobs that run continuously, processing new data as it arrives).
就是多了pipeline(流水线)的Hadoop。分布式流水线可以有效加快各jobs在各节点的同步运算。
今天做exploit exercise的nebula level01,长见识了,记录一下。
题目提供了/home/flag01/下flag01的源码:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp)
{
gid_t gid;
uid_t uid;
gid = getegid();
uid = geteuid();
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
system("/usr/bin/env echo and now what?");
}
flag01的权限:
-rwsr-x— 1 flag01 level01 7322 2011-11-20 21:22 flag01
flag01的uid是用户flag01,gid是level01,suid位被使能了
项目组有每天值日搞卫生和发工作日报的规定,由于不提醒容易忘记,则想到通过内部邮件定时提醒,练练手。
整个“任务”可以分为发邮件+定时两部分。
##发邮件##
由于服务器是windows系统,google得知,windows下有blat这发邮件的大杀器,所以刚开始是想用blat+批处理做的。
执行blat -h
或者看官网上的帮助,使用blat发邮件还是很简单的(所以官网特别提醒不要用blat来发SPAM。。)
blat <邮件正文文件> -from <发送地址> -to <接受地址> -subject <邮件标题>
-server <smtp服务器地址> -username <登录服务器用户名> -password <密码>
blat - -body <邮件正文> -from <发送地址> -to <接受地址> -subject <邮件标题>
-server <smtp服务器地址> -username <登录服务器用户名> -password <密码>
blat还可以通过-install把参数保存到注册表。blat确实是自动发邮件的大杀器!
P.S 在linux实现自动发邮件,可以用msmtp,sendmail等~
这本来是很简单的,但因为任务要根据星期几发送邮件给指定的人,而且我们是12个人分成两周,所以想到用一个二维数组存放成员来实现,这也没什么问题。
问题在于在计算要提醒的人时,要根据今天离开始值日的天数,来从数组获取成员,而这求天数在windows用批处理可不好搞,因为要考虑每月不同天数和闰年啊。
当然也不是不能完成,网上也有方法:
嫌麻烦,我还是决定找有现成库的方法来做,所以就想到用有各种库的python实现了。
最近学scheme,总结一下pair和list的区别,主要是两点:
1.list一定是pair,但只有以null(空list)结尾的pair才是list
对于(define list1 (list a b c)),list1表现为(a b c),其实也可以写成(a . (b . ()))。
可以看到list其实就是pair,而且是以null结尾的pair。
对于像(a.(b.(c.d)))这样的连续pair,因为没有以空list结尾,所以不是list
所以有:
> (define x '(1 2))
> x
(1 2)
> (list? x)
#t
> (cons? x)
#t
> (cddr x) ; 以null结尾
()
> (define y (cons 1 2))
> (list? y)
#f
> (cons? y)
#f
> (set-cdr! y '()) ; 把y的cdr设为null,使y变成list
> y
(1)
> (list? y) ; 变成了list
#t
> (cons? y)
#t
2.pair的显示规则
引用这里的解释:
In general, the rule for printing a pair is as follows: use the dot notation always, but if the dot is immediately followed by an open parenthesis, then remove the dot, the open parenthesis, and the matching close parenthesis. Thus, (0 . (1 . 2)) becomes (0 1 . 2), and (1 . (2 . (3 . ()))) becomes (1 2 3).
大意就是,如果pair的“点”紧接着小括号,则这个点和小括号都可以去掉。
所以(a.(b.c))等价于(a b.c), (a.(b.(c.())))等价于(a b c)。