设置全局的用户名邮箱
$ git config --global user.name 0x55aa
$ git config --global user.email admin@google.com
设置全局的.gitignore
git config --global core.excludesfile ~/.gitignore
设置全局的命令别名
git config --global alias.st status
这个命令确实好用啊,用hg用的一直输入st, 现在又换成git不适应了,总要输错一次。mercurial和git,svn做简单版本控制还是都不错的
其实这些设置都是更改了~/.gitconfig文件。可以参考文档http://git-scm.com/docs/git-config.html
Read more...
java打jar包记录
记录,说不定以后还能用到。打jar包指定main程序入口
Read more...
public class Hello{
public static void main(String[] args){
System.out.println("hello");
}
}
java版helloworld。保存成Hello.java。执行
javac Hello.java会生成Hello.class
jar cvf hello.jar Hello.class生成hello.jar
现在直接执行java -jar hello.jar会提示“hello.jar中没有主清单属性”要先指定程序入口
解压hello.jar,会看到/META-INF/MANIFEST.MF文件
Manifest-Version: 1.0
Created-By: 1.8.0_25 (Oracle Corporation)
加上两行
Class-Path: .
Main-Class: Hello
执行
jar umfv MANIFEST.MF hello.jar 更新一下jar包里边的文件
执行java -jar hello.jar 成功显示hello。
服务器ssh密码验证错误次数太多进行iptables屏蔽
额 早就想写这么个脚本了。这次有点时间写了一下,借助shell下的工具和python还是可以很快写好。
发现总有人爆破我ssh密码,我修改了端口还是跑。是盯上了还是怎么。如果关闭密码登录会好,但是每次换电脑就要添加公key,感觉还是密码方便一点。
Read more...
# coding: utf-8
import os
import time
def lo():
ban_ip_list = []
output = os.popen("""grep "Failed password for root" /var/log/auth.log | awk {'print $11'} | uniq -c | sort -rn""")
for l in output.readlines():
count, ip = l.split()
if int(count) > 5 and ip not in ban_ip_list:
ban_ip_list.append(ip)
print ban_ip_list
iptables_ban_ip_list = []
output = os.popen("""iptables -L -n|grep "DROP" | awk {'print $4'} """)
for l in output.readlines():
iptables_ban_ip_list.append(l.split()[0])
print iptables_ban_ip_list
iplist = list(set(ban_ip_list) - set(iptables_ban_ip_list))
print iplist
for ip in iplist:
os.popen("""iptables -I INPUT -s {} -j DROP """.format(ip))
#iptables -L -n --line-numbers
#iptables -D INPUT 8
while 1:
lo()
time.sleep(1)
break
代码还可以改进,比如后边set了 前边就不用判断ip在不在列表里了。我是用服务器上另一个脚本用vim复制后按思路写的。功能跑通就不想改了。加入crontab搞定。
以后有时间改成只屏蔽10分钟,这样实用性就强一点了。想法就是要记录下错误时间,错误时间加十分钟就是解禁时间。
jquery post一个array
jquery在post一个array的时候,我直接{array:array},提交的字段名字会改称array[].
解决方法是在发送post之前加上一个jQuery.ajaxSettings.traditional = true;
直接用ajax的话加一个traditional:true 参数。然后就好了,从提交的数据看,array[]=[]直接提交一个list。而array是array=&array=&&&这种形式。
Read more...
option selected属性设置问题attr,prop
在选中一个值的时候,设置必须选中其他值。开始使用attr('selected','selected'),发现只有在第一次选中的时候好用。
从网上查找发现要使用prop('selected','selected')来做,问题就解决了。
Read more...
iterm2终端高亮设置
官网:http://iterm2.com/downloads.html
参考配置 http://blog.csdn.net/zhaoxy_thu/article/details/9409999
vim ~/.bash_profile
然后将下面的代码拷贝到该文件中:
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Read more...
第二天面试记录
这一天打击挺大的,突然感觉真的基础不行。
第一家提前到了半个小时,问了基本情况,聊了一点框架,不搭边的问题,然后黑板画算法题,突然感觉脑袋空白,只能说想法,然后很多还不是最好的处理方法。然后见了hr,问了基本问题。具体多长时间没算,总之导致第二家面试迟到,而且期间没吃午饭。。
第二家,做面试题,填空什么的都是php,写程序,shell,还有基本的系统什么的,能用python就用python写,做完说,人力给错题了,重新给我python的题做。除了一个算法题,都做出来了,感觉那些比较简单。算法题以前还见过,不过怎么也想不起应该怎么做来了。就是一组数分两组个数相同的组,使和差值最小。
第三家, 突然就感觉无力了,问了一个mysql两个常用引擎的区别,索引优化,只答出了一点,回去的路上都想起好几点,不知道当时怎么搞的。还做了一份笔试题,都是基本的,不过很多函数名记不住,只能画横线了。。。还问了一个二分法查找,想了半天什么是二分法。然后写了个递归,被问,list很大,栈是不是会溢出。。然后换人,连问三个基本数据结构,忘干净了。
其实感觉问的问题不是难,借口就是忘记了,其实一看就会的东西。面试完了什么心情都没了,不过好处也显而易见,目标也很明确了。
Read more...
第一天面试记录
蛋碎的一整天--总记
总共面了三家。
第一家,手机app,用户量很多。简单问了一下简历上的东西,没问技术、python的东西。我问了入职一下要做什么,总体很紧张,最后我问了一下我的不足。说:高并发接触太少了,不要死磕一个django框架。说的都挺有道理的,都是做的访问量不高的东西,随便写写就行。感觉面试官人很好,虽然紧张的说话都不自然了应该。答复,等消息,感觉希望不大。
第二家,手机游戏,早到十多分钟,前台没人,以为中午吃饭没上班,面试完走的时候也没人,坑啊。然后令来一个刚毕业的同面试的。到点我打了个电话。。然后让我做面试题,蛋碎的题,一个统计一个字符串有多少个‘a’字符的问题,没写出来。一个mysql创建表修改字段名的,写不出来,用django用的像创建,改字段名基本不操作。一个查看进程所有端口的,我写的netstat -an不知道为啥错了,一个问进程线程的区别,我写了进程开销大,线程小。线程可以共享数据。也说错了,然后总结为基础太差。其中笔试题一题出错,字典写成{{'a':1},{'b':2},...}让我统计字典里的元素个数,我当时就慌了,大叫一声“我操”,python还有这种写法。然后我就把那个字典圈出来了,等后边问,然后是出错题了。突然就感觉,麻痹的太不自信了,虽然没背过python语言参考,但也写了这么长时间了。还有个python题就是考察传参的,缩进都错了,当时我就感觉,我操 搞python的这能容忍。好在题没逻辑,我也知道考的是什么,直到缩进应该到哪。面试官岁数挺大,面部一脸疲惫,也是不容易。总体感觉不爽。让等,让我去我也不会去。
第三家, 先来笔试,sort函数,参数忘记都有什么了,map函数也是,reduce好像根本没用过。问了一个进程间通信的问题。其他的还好,一上来直接边看我做的边说哪里错了,怎么改。心里默默和第二家做了对比,懂的都不怕给你说。然后问了简历上的问题,问了很多相关问题。
后换了一个领导,低头看简历,然后各种刁钻问题,有不知道的。印象最深的问了个数据库范式,名字确实熟悉,但是确实不知道。不过你的回答他满不满意很容易从他答应的声音里听出来,哈哈。最后来个技术副总裁,让我直接画黑板。然后聊了很多,总体感觉说的话有很多很有说服力,能当领导的果然口才还是要有的。聊的什么也就不说了,对错只能自己分辨。然后工资和在现在公司涨的一样。
收获还是蛮多的,我首先决定,下载一本超基础的mysql书,背mysql语句。有官方文档下载就下载官方文档。面试一下还是有好处的,突然就感觉动力十足了。
Read more...
操作系统编写-hello world
clear主要作用是清屏
ax=0600h初始化屏幕
cx起始位置
dx结束位置
然后调用bios中断
clear下边是设置光标的位置
ah=02h
dh行,dl列
DispStr主要打印hello world
详细介绍google搜索得到。
boot/boot.asm代码:
Read more...
org 07c00h
mov ax,cx
mov ds,ax
mov es,ax
call clear
call DispStr
jmp $
clear:
mov cx,00h
mov dx, 2580h
mov bh, 00h
mov ax, 0600h
int 10h
mov bh, 00h
mov dh, 11h
mov dl, 00h
mov ah, 02h
int 10h
ret
DispStr:
mov ax,BootMessage
mov bp, ax
mov cx, 12
mov ax, 1301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "hello, world!"
times 510-($-$$) db 0
dw 0xaa55
操作系统编写环境搭建
lisp群里有人写操作系统,我又想起了以前写的。以前写的没做完,当时有很多不明白的,现在决定看书再做一遍。
环境搭建:系统是ubuntu,编译器gcc,make,nasm,虚拟机bochs,然后应该没了。
bochsrc.txt文件配置
floppya: image=./img/a.img, status=inserted,加载软盘镜像
ata0-master: type=disk, path="./img/c.img", mode=flat, cylinders=20, heads=16, spt=63, 硬盘镜像,这个还没用,建了个10M的文件
boot: floppy,,启动顺序
#boot: disk
log: ./log/bochsout.txt 日志记录
parport1: enabled=1, file="./log/parport.out"# 并口的数据记录文件
应该在没啥了,有错误可以再改。
Makefile文件配置
Read more...
build/boot : boot/boot.asm nasm boot/boot.asm -o build/boot a.img : build/boot dd if=build/boot of=img/a.img bs=512 count=1 conv=notrunc run : a.img bochs clean : rm build/boot每次直接make run就可以了
~/code/os$ tree . ├── bochsrc.txt ├── boot │ └── boot.asm ├── build │ └── boot ├── img │ ├── a.img │ └── c.img ├── log │ ├── bochsout.txt │ └── parport.out └── Makefile目录结构,先这样了。慢慢添加