golang反射Interface

golang博客里有一个例子。下面两段程序的结果是相同的。
package main
import (
    "fmt"
    "reflect"
)

type A struct {
    Name string
}
func (p A) test(){}
func (p A) Test1(){
    fmt.Println("df")
}

type AInterface interface {
    Test1()
    test()
}

func main() {
    var a A
    a.Name = "hha"
    var value reflect.Value = reflect.ValueOf(a)
    p := value.Interface().(AInterface)
    p.Test1()
}
package main
import (
    "fmt"
    "reflect"
)

type A struct {
    Name string
}
func (p A) test(){}
func (p A) Test1(){
    fmt.Println("df")
}

func main() {
    var a A
    a.Name = "hha"
    var value reflect.Value = reflect.ValueOf(a)
    vf := value.MethodByName("Test1")
    in := make([]reflect.Value, 0)
    vf.Call(in)
}
遗憾的是第一种方法事先定义好了interface,如果你加入的新方法应该是不能成功的。
Read more...

一个java class文件反编译工具jd jui

一个很方便的java class文件反编译工具,支持mac linux windows,使用也很方便,可以直接打开一个jar文件,然后就可以浏览代码了0 0. 下载地址:http://jd.benow.ca/  
Read more...

tornado的cookie和secure cookie

tornado里面有关几个cookie的处理,在web.py文件里。 get_cookie,set_cookie普通的设置cookie,clear_cookie,clear_all_cookies是删除cookie。 还有两个是get_secure_cookie,set_secure_cookie,这两个的功能是能够防止用户的cookie被伪造。 先看看函数处理方法。set_secure_cookie,里边与set_cookie的区别就是value经过create_signed_value的处理。 create_signed_value,得到当前时间,将要存的value base64编码,通过_cookie_signature将 加上name,这三个值加密生成签名。然后将签名,value的base64编码,时间戳用|连接,作为cookie的值。 _cookie_signature,就是根据settings里边的 保密的密钥生成签名返回。 get_secure_cookie,用|分割cookie的value,通过name,原value的base64的编码,时间戳得到签名,验证签名是否正确,正确返回,还多了一个过期时间的判断 如果别人想伪造用户的cookie,必须要知道密钥,才能生成正确的签名,不然通过get_secure_cookie获取value的时候,不会通过验证,然后就不会返回伪造的cookie值。
Read more...

公司年会

一句话总结:总体感觉挺好,陈总叨叨了一堆洗脑的话,现场灯光气氛都挺好。 公司发的礼品太坑,扣的一笔。什么梳子,小饼干,赠品化妆品,棒棒糖。。。啥的,我自己抽了一张电影票。吃的还算不错。忘记说红酒了,可能是好酒,又苦又涩而且还酸,跟以前喝的根本不一样0 0,总感觉高级到一定程度,不是普通人能领会的了。 流程:走红毯-露脸-陈总讲话-节目-优秀员工-吃饭-节目-第一次抽奖-走人了。。 挺同事说第二次抽奖有我的一个相机,错过了0 0,其中昨天,今天的一系列巧事就不想说了,说了也没意思0 0.反正没拿到。 总感觉公司搞得华而不实,五星级酒店气派,但是奖品抠脚。这都是放屁,,,不说了 明天晚上回家的车,兴奋。明早早起收拾东西,去公司,晚上在公司待会儿就去火车站坐车了 ,欧耶。 这都二十七了,回家就过年了 ,真快 真晚。 多关心生活,好想有座房子面朝大海春暖花开。
Read more...

放几个屁存在这存着

今天晚上很恼火。这种屌事我按我的性格根本不会理睬,但是那比整天装,我觉得不理睬他以为你承认了。 我感觉你怕别人说的事才是你正真在乎觉得自己弱的地方,如果你真正觉得好,别人在怎么所谓的秀,你都不可能在乎。 前提还是我没秀,我一直没在乎过,只是觉得自己不错,很开心。不好的地方我也会发出来,也不觉得丢人。谁特么没用输的时候。你永远不输才是神,不然都是扯淡。最不懂的是我也没说我是最屌的,你对比个蛋,我也不觉得你比我玩的好。我还没自大到认为自己是最牛逼的。这样不需要自己认为,是明摆的事实。Xtou狗我都不屑一故。 你越想说明自己牛逼,其实是你自己都觉得自己不牛逼要装的牛逼一点。但是无论有钱没钱,有权没权,有点缺点,当你能在众人面前展示的时候,那才是觉得自己这方面无论好坏 都不在乎,觉得自己这方面很屌。 哪来的我可以是最牛逼的,总会有比你牛逼的,当你沾沾自喜的时候,别人都在不屑一顾。 你在乎的东西 在别人眼里可能根本一分钱不值,你还在那死jiang。你爱咋咋滴,我可以以后一直不和你玩,我又不是没有基友,我在有同学的情况下没和你们玩过。群里流行的一句话,你做了什么,为什么要屌你。 玩都没有娱乐精神,也根本不想和你玩。 当你认为别人在秀的时候,我觉得其实你也是有一种病态心理“我比你牛逼,我都没秀你秀什么”,如果你真牛逼你根本不会在乎,你会觉得我是跳梁小丑,因为我就有这种感觉,但是我遇到这种情况 通常只说一句话再就不说了,可能是称赞的话,可以说我认为会这样的原因,或者他的不足。我不会嘲讽,不会对比,不会说我怎么怎么样。我就看透了,我发优势 我都说对面怎么不好,让我巧合变成优势了。除非我确实在某一块的操作亮了 ,我也会说出来,我觉得我就是很屌能做出来的人不多,虽然也是巧合。但是只是说出来别人看不到,不会懂。 我现在想,当时真特么的嘴贱和他说了这么长时间,我为什么要说,说了 也说明我在乎,我最后对我自己呵呵一下。 愤怒的时候才会写这么多的文字,我感觉现在的和我差不多年龄的人都很偏激。只会已自己的思维放大到无穷大,加到别人身上,我觉得我爸很屌,教会了我要换位思考。 写这么多屁话心情还是没变好,可惜了本来的好心情。淡定看时间,要走的路很长,跟个不认识的人生气那是自找的。。   写完了以后,我又看了一遍,突然发现群里的一个人在这方面很像我,也执着于一个英雄,他也不在乎玩的怎么样,不觉得自己玩的好还是怎样。有着自己独特的想法,为啥他发的时候没有人说他那是秀,我发就不行,凡事有因果报应,我根本也不想想。至少在他刚加群的时候我就说过他是正直的好少年。他们看不见这篇文章,总有很多东西是你永远不知道,也想不明白的。这仅仅是发泄。 赶紧睡觉,明天上班,加油。
Read more...

mutt配置邮件客户端

还是在邮件列表里学到的,今天折腾了一下,好在找到一片不错的文章照着配置了一下。 http://home.ustc.edu.cn/~lixuebai/GNU/MuttConfig.html 我用的组合也是mutt+msmtp+getmail+procmail,显示html邮件用的w3m。 安装都是apt-get安装,开始我用源码安装,进去界面都是乱码的也没找原因,直接删掉重新安装了一下。 创建了~/mail目录,下面inbox,postponed,sent,配置文件没有就创建。 复制一下配置文件 ~/.muttrc
#编辑器
set editor="vim"

#邮件发送
set sendmail="/usr/bin/msmtp"

#信箱
set folder="~/mail"
set mbox="~/mail/inbox"
set spoolfile="~/mail/postponed"
set record="~/mail/send"

# 让mutt监视下面几个邮箱,并随时报告新邮件
mailboxes "=inbox"
mailboxes "=Gmail"

#指定你有那些信箱文件。当你按 "c" 切换信箱时,再按 Tab 键,这些信箱就可供你选择
mailboxes Mailbox sent-mail 

#显示html
auto_view text/html

set check_new = yes
set timeout = 600

#这是一个格式字符串,用来控制你的index的列表显示。它的缺省定义是
set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s"
#这是一个 bool 型变量。它表明你在回信时引用原文是否加入原文的邮件头。
set header=no
#可以设置为 yes, no, ask-yes, 或者 ask-no. 这是说,当你按q退出时,是否提示你(ask-yes,ask-no),
#还是直接就退出了(yes),还是根本不理你(no)。
set quit=ask-yes
#这也是一个提示性变量。它是确定当你退出时,是否提示你把信件从 spool 移动到的 mbox 文件。
set move=no
#当 Mutt 用 thread 方式显示时,是否用纯 ascii 表示树状列表。
set ascii_chars=yes
#回信时是否包含原文。
set include
#回信的引文之前插入那个符号?
set indent_str="> "
#设置你自己的邮件头。
#my_hdr From: xxx@mail.ustc.edu.cn
#打分
#新信件+4分,主题包含“通知”的+2,主题包含 “Circulation” +3, 已经标记删除的 -5,上次没有读的 +1,包含 “believe”的 -10(垃圾广告!)。
score "~N" +4
#score "~s 通知" +2
#score "~s Circulation" +3
score "~D" -5
score "~O" +3
#score "~s believe" -10

#排序方式。
set sort=score
#当用 thread 排序方式时,我们对各个 thread 的相对排序顺序。
set sort_aux=date
#如果翻到最后,再按往下翻也不会翻到下一封信件
set pager_stop
#如果设置,当你按 "r" 回信时,就不会再提示你输入回信地址和主题,直接进入编辑模式。
set fast_reply
#当你按 "t" 或者 "D" 之类的标记操作时,是否自动把光标移动到下一封信件。
set resolve=yes
#地址簿
#source ~/.mutt.alias
#当你在 index 里按 "a" 为来信者取别名时,使用哪一个别名文件保存这个别名。
#set alias_file=~/.mutt.alias
#你发出的邮件保存到那个信箱文件?比如可以像我这样每个月发出的信件放在不同的文件里。
set record="~/mail/=sent-mail-`date +%Y-%m`"
#你的终端支持哪一种编码的显示?这个必须和你的终端编码一样。推荐用utf8
set charset="utf-8"
#send_charset
set send_charset="utf-8"
#外部程序退出时,是否要求用户按一个键才返回。这在察看某些shell命令输出时是比要的,
#否则它们一下就消失了。
set wait_key=yes
#当你要把信件存到另一个信箱,而这个信箱已经存在时,是否提示附加?
set noconfirmappend
#是否把邮件头也放在编辑器里可以修改?
set edit_headers=no
#当你在用 pager 看信件时,在 index 留出多少行显示邮件列表?
set pager_index_lines=4
#告诉 Mutt 你已经订阅了那些邮件列表(mailing-list).
#subscribe fvwm@fvwm.org

#mutt显示日期为中文
set locale="zh_CN"
#有些没有设置字符编码时
#charset-hook ^us-ascii$ utf-8
#Chinaren 等服务器发出来的信件使用了 quoted-printable 的 subject,
#而且设置编码为 "iso8859-1",这显然是错误的。
#对付这个错误的办法是把 iso-8859-1 变成 gb2312 的别名
#charset-hook ^iso-8859-1$ gb2312
# evolution 发过来的 subject 为 utf-8 编码的邮件标题乱码!
#那就把不是 utf-8 的编码都映射到 gb2312
#charset-hook !utf-8 gb2312
charset-hook ^gb2312$ gb18030

# mutt进行pop3收信,当然之前要查看$ mutt -v 编辑情况的确编辑了pop3了。
# 以后进入mutt按G就可以收信了。
#set pop_user=xxx@mail.ustc.edu.cn
#set pop_pass="xxxxxx"
#set pop_host=202.38.64.8
#现在不用mutt直接收信了。

#把mutt发送的from域作为sendmail发送邮件的sender(否则会用user@localdomian)
set envelope_from=yes

macro index G "!getmail\n" "Invoke getmail"
macro pager G "!getmail\n" "Invoke getmail"
  ~/.mailcap
text/html; w3m -o document_charse=%{charset} %s; nametemplate=%s.html
text/html; w3m -dump -o document_charse=%{charset} %s; nametemplate=%s.html; copiousoutput
  ~/.msmtprc
account default
host smtp.gmail.com
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
from your@gmail.com
auth on
user your@gmail.com
password pass
logfile ~/.getmail/msmtp.log
chmod 600 .msmtprc
~/.getmail/getmailrc
[options]
verbose = 1
read_all = false
message_log = ~/.getmail/log

[retriever]
type = SimplePOP3SSLRetriever
server = pop.gmail.com
username = shanqiuchant@gmail.com
port = 995
password = 370asd285jp##%%**

[destination]
type = MDA_external
path = /usr/bin/procmail
unixfrom = true
  使用crontab定时自动收信
$ crontab -e
每隔10分钟收一次信,只收未读的信件。
0,10,20,30,40,50 * * * * getmail -n
~/.procmailrc
PATH=/bin:/sbin:/usr/bin:/usr/sbin
SHELL=/bin/bash
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/inbox
LOGFILE=$MAILDIR/.procmaillog

:0
* ^From.*@gmail.com
Gmail

:0   #最后的这个配置就是指如果上面分类剩下的信件全扔到inbox里
* .* inbox

# 黑名单(垃圾邮件)
:0:
* ^From.*badguy
/dev/null
    可以用msmtp anoth_email@gmail.com 这里随便输入一些内容,然后按下Ctrl-d组合键来结束,来测试是否能发送成功。 照着配置了一下还没使用,要使用还需要很多人性化的设置。
Read more...

vimwiki搭建学习笔记wiki

先写上连接:http://0x55aa.sinaapp.com/wiki/ 邮件列表里讨论用什么工具进行学习知识的管理,看有人说了这个工具,研究了一下感觉挺好用的,直接放到博客上了。 项目网站:https://github.com/vimwiki/vimwiki,文档在安装完成后,可以使用:h vimwiki查看。 和网上有的教程差别大的地方是html模版的配置。template_header和footer没有了,使用
'template_path': '~/public_html/templates/',
\ 'template_default': 'def_template',
\ 'template_ext': '.html'}]定义
你可以在wiki中指定:%template、%title、等然后在模板里替换%title%等。高级一点的功能还没用到,只用了一个替换模版的,看网上的文章还可以添加时间,那个我也没研究,不准备加上时间戳,主要记载零碎东西。其实评论也不必加,我一直对这种提供评论服务的很好奇,正好用了一下 感觉真方便,还能减少网站的压力,不过需要前端js的支持才行。原理很简单,没看代码,但是我觉得应该就是通过url来区分的评论。
wiki的代码高亮我还没测试,还不知道能不能用的上0 0.
 
Read more...

go web框架-tfwf出炉了

没写完,先这样吧,应该要停写一段时间,先放出来。我又开始研究别的了0 0,golang又要放下了,不过我觉得,那个消耗的时间不会长,回头再接着写^_^. 我的第一个web框架,用go写。虽然没啥价值^_^ 靠,忘记写地址了0 0:github
Read more...

ubuntu deb包 解包并查看安装时进行的操作

我要把mercurial-server的相关文件放到web项目里一起部署,于是想知道在apt-get安装mercurial-server时都执行了那些操作。官方没有手动安装的教程,我就查了整理一下。 开始找到这个命令,这个命令只会将一些安装的文件列出来,还有一些不知道什么用0 0.没有达到目的。 dpkg -x xxxx.deb xxxx 然后找到 ar vx xxxx.deb .deb其实是一个ar档,所以使用ar解压。 deb 包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;安装信息及控制脚本包,包含 deb 的安装说明, 标识,脚本等,文件名为 control.tar.gz;最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可 以看到。 control.tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件:control,用了记录软件标识,版本号,平 台,依赖信息等数据;preinst,在解包 data.tar.gz 前运行的脚本;postinst,在解包数据后运行的脚本;prerm,卸载时, 在删除文件之前运行的脚本;postrm,在删除文件之后运行的脚本。 搞定0 0. 参考: http://www.linuxdiyf.com/viewarticle.php?id=78628 http://www.baike.com/wiki/DEB%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F
Read more...

go实现第一个web框架小总结-tfwf

从上上个周开始,就开始进行了。为啥起了这么蛋疼的一个名字,0 0当时建目录的时候不知道起啥名字,然后就起了一个the first web framework(tfwf),然后在bitbucket上开了一个私有项目,就开始写了。 先说说目的:一直都在用别人写的东西,包括接触的n多东西,一直想自己也实现一个。终于下决心用go准备写一个web框架,因为对这个还算是熟悉的了。选择go的原因是,写了可能会有别人用,但是我的出发点是学习并玩玩。不懂设计,不懂高深的理论,能有点样子就好了。 其实go自带的包写web应用已经非常方便了,现在主要实现的功能有: url的正则匹配,并且可以定义`^/aa/(?P<second>\d+)/`这样的样式。 网站的基本设置,像域名,名字,templedir等 控制器模仿tornado的样子写的,感觉蹩脚的很0 0. 启动时模板的导入。 就这些了。   说说从一开始写的过程,现在只记得七七八八了,时间有点长了。 准备写web框架的时候,我先去大略看了一遍谢大的 goweb编程那本书,第3.4节是对web框架开头路由的编写起了关键性的作用。 然后我就直接从http包 函数找到源码,把那里的代码意思看懂,就开始写了支持正则匹配的路由,然后对应的handler是函数。之后我就想写成python里边面向对象可以重载的方法,就研究了一下go的面向对象的编程,写成了接口的模式,什么走路像鸭子就是鸭子0 0。。写这里的时候我遇到一点问题:从接口取到对应struct的元素和方法,我有去看来reflect包的内容。 这期间我找了,web.go和beego的代码,大体看来一遍,发现beego的控制器写的跟我想的基本一样,直接看代码,借鉴了很多代码- -算不算抄袭。像url里匹配的变量,我发现go不支持继承的方法参数啥的必须一样。我就在context里边加了一个属性args,感觉真二。 今天开会的时候又加上了temple的启动时集中导入功能,功能的来源beego。再可耻一下0 0.settings和templates都是全局的,这些都不需要修改,第一次启动添加,应该不会有问题。 现在还有好多细节没处理好。还有很多必要的功能没有,像:错误提示,我自己写的时候测试,都发现非常困难,只是自己比较了解,能快速定位刚才修改的代码。我现在很多代码的错误验证都还没有0 0.、 对 一个主要的功能准备,明天实现:异步的问题,现在还没头绪,明天仔细研究一下,并测试一下在普通http请求这两个差别真的很大吗。我现在只是直接调用方法。觉得挺直观明白的0 0. 代码明天实现异步在上传到github上,现在也没格式化。我觉得我应该用我自己写的框架写点能用的东西,才知道还有哪里需要修改的更好0 0.
Read more...

Previous Page 1 2 3 4 5 6 7 8 9 10 Next Page 最后一页