添加dotdeb源后出现:由于没有公钥,无法验证下列签名: NO_PUBKEY E9C74FEEA2098A6E

2014年11月10日 14:55

在添加dotdeb源后,执行apt-get update出现提示
忽略 http://packages.dotdeb.org stable/all Translation-en                      
命中 http://mirrors.163.com wheezy-updates/main amd64 Packages/DiffIndex       
命中 http://mirrors.163.com wheezy-updates/main Translation-en/DiffIndex       
下载 836 B,耗时 18秒 (44 B/s)                                                 
正在读取软件包列表... 完成
W: GPG 错误:http://packages.dotdeb.org stable Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY E9C74FEEA2098A6E
 
解决办法
执行下面两条命令
gpg --keyserver keys.gnupg.net --recv-key A2098A6E
gpg -a --export A2098A6E | apt-key add -
命令中的"A2098A6E",是错误提示"E9C74FEEA2098A6E"的后8位

Tags: debian;apt-get;dotdeb
评论(0) 阅读(1113)

apt-get包管理工具

2014年11月06日 15:51

什么是apt-get

    apt(the Advanced Packaging Tool)是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。

基本用法

* 搜索包 apt-cache search
* 获取包信息 apt-cache show
* 安装 apt-get install packagename
* 卸载 apt-get remove packagename
* 更新源 apt-get update
* 更新已安装的包 apt-get upgrade
* 升级系统 apt-get dist-upgrade
* 下载包的源代码 apt-get source packagename

镜像源

apt-get通过镜像源获得软件包
镜像源配置文件:/etc/apt/sources.list
 
网易镜像源
搜狐镜像源
阿里镜像源
 
sources.list有多个版本,不要下错版本
etch    -- debian 4.x
lenny   -- debian 5.x
squeeze -- debian 6.x
wheezy  -- debian 7.x

debian版本

版本 代号    发布日期  
1.1  Buzz   1996年6月17日 
1.2  Rex    1996年12月12日
1.3  Bo     1997年6月2日
2.0  Hamm   1998年7月24日
2.1  Slink  1999年3月9日
2.2  Potato 2000年8月15日
3.0  Woody  2002年7月19日
3.1  Sarge  2005年6月6日 
4.0  Etch   2007年4月8日
5.0  Lenny  2009年2月14日
6.0  Squeeze 2011年2月6日 
7.0  Wheezy 2013年5月5日
8.0  Jessie 尚无确切时间表
 
 

Tags: debian;
评论(0) 阅读(622)

JSTL日期格式化

2014年11月06日 12:18

引入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

用法

<fmt:formatDate value="${DATE}"    pattern="yyyy-MM-dd HH:mm:ss" type="date" dateStyle="long" /> 
 

Tags: jsp
评论(0) 阅读(730)

forEach迭代列表与整数

2014年11月06日 11:18

整数迭代

<!-- 简单示例 -->
<c:forEach var="i" begin="1" end="10" step="1"> 
    <c:out value="${i}" />
</c:forEach>

<!-- 传入变量 -->
<c:forEach var="i" begin="1" end="$(totalPage)" step="1"> 
    <c:out value="${i}" />
</c:forEach>

列表迭代

<!-- experts是个List<Map>-->
<c:forEach items="${experts}" var="expert" varStatus="status" begin="0" end="9">
    <tr>
    <td>${status.index+1}</td>
    <td><img src="${expert.headImagePath}"/></td>
    <td>${expert.expertName}</td>
    <td>${expert.phone}</td>
    <td>${expert.address}</td>
    <td>${expert.expertIntroduction}</td>
    <td>${expert.createTime}</td>
    <td data-expertid="${expert.expertID}">
    </tr>
</c:forEach>

参数说明

items 被迭代的列表(迭代整数时不用设置)
begin 开始的元素(0=第一个元素,1=第二个元素)
end最后一个元素(0=第一个元素,1=第二个元素)
step每次迭代的步长
var 当前条目的变量名称
varStatus 循环状态的变量名称(可以获取序列号)
 

Tags: jstl;迭代
评论(0) 阅读(1113)

shadowsocks简易代理

2014年9月11日 11:12

以下是运行在windows的简易shadowsocks
帐号可从以下地方获取
配置信息示例
{
    "server":"208.110.83.242",  //服务器ip
    "server_port":43202,        //服务端口
    "local_port":1080,          //本地端口
    "password":"sonydafahaoMA", //用来加密的密码
    "timeout":600,              //超时时间
    "method":"aes-256-cfb"      //加密方法
}
  • 运行boafanx-ss.exe
代理已经启动启动,接下来就可以使用代理了,下面以chrome浏览器为例
  • chrome使用代理
首先chrome需要安装了switchysharp插件.
然后设置代理 socks5 127.0.0.1 1080 
再设置切换规则 *.google.com* 通配符 shadowsocks
  • privoxy.exe可以将socks代理转换成http代理
 
 

Tags: 代理;shadowsocks
评论(0) 阅读(1959)

上士闻道,勤而行之

2014年8月31日 09:39

上士闻道,勤而行之。中士闻道,若存若亡。下士闻道,大笑之。不笑不足以为道。

评论(0) 阅读(647)

指定google搜索的网站

2014年8月28日 12:48

用法

关键词 site:网站地址

例如

Tags: google;搜索
评论(0) 阅读(745)

在自己的网页中调用搜索引擎

2014年8月28日 12:33

示例

下面是常见示例,先动手试试
<meta charset="UTF-8" />
<body>
    <!-- 调用google搜索 -->
    <form method=get action="http://www.google.com/search"  target="_blank">
        <!-- input的中name必须为q,否则提交失败,返回google首页-->
        <input type=text name=q size=40 maxlength=255 >
        <!--input type=hidden name=sitesearch value="yongqing.is-programmer.com"-->
        <input type=submit name=btnG value="谷歌搜索">
    </form>

    <!-- 调用baidu搜索 -->
    <form action="http://www.baidu.com/baidu" target="_blank">
        <!-- input的中name必须为word,否则提交失败,返回baidu首页-->
        <input type=text name=word size=40>
        <!--input type=hidden name=si value="yongqing.is-programmer.com"-->
        <input type="submit" value="百度搜索">
    </form>
    <!-- 调用yahoo搜索-->
    <form action="http://www.yahoo.com.cn/search">
        <input type=text name="p">
        <!--input type=hidden name=vs value="yongqing.is-programmer.com"-->
        <input type="submit" value="Yahoo 搜索">
    </form>
</body>

调用google的参数

发现还可以传递其它参数,它们有什么作用?
<!–Google站内搜索–>
<form method=get action=”http://www.google.com/search”>
    <input type=text name=q>
    <input type=submit name=btnG value=”Google 搜索”>
    <input type=hidden name=sitesearch value=”yongqing.is-programmer.com”>
    <input type=hidden name=hl value=zh-CN>
    <input type=hidden name=ie value=utf-8>
    <input type=hidden name=oe value=utf-8>
</form>
name="q": 搜索的字符串
name="sitesearch": 指定要搜索的网站.
name="hl": 以指定语言显示搜索结果. 比如"zh-CN", "zh-TW", "en"
name="ie": 指明搜索网页的编码,默认是UTF-8.
name="oe": 以指定编码显示搜索结果,默认是UTF-8. 
还有其它参数
name="safe"
name="newwindow"
 
仔细看google首页的源码,发现也用这样的调用方式.
如果想要搜索指定网站的网页,google比较好用,比较适合方在个人博客中,作为搜索工具
百度、yahoo就不介绍了,有兴趣可以研究下.
 
 

Tags: 博客;站内搜索;google;baidu
评论(0) 阅读(1034)

修改jinja2模板中变量标识符

2014年8月27日 14:44

使用webpy时,修改jinja2变量标识

重写webpy包中的template.py文件中的render_jinja类.
class my_render_jinja:
    """Rendering interface to Jinja2 Templates

    Example:

        render= render_jinja('templates')
        render.hello(name='jinja2')
    """
    def __init__(self, *a, **kwargs):
        extensions = kwargs.pop('extensions', [])
        globals = kwargs.pop('globals', {})

        from jinja2 import Environment, FileSystemLoader
        self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions)
        # 添加下面两句代码,修改标识符
        self._lookup.variable_start_string = '{{ '
        self._lookup.variable_end_string = ' }}'
        self._lookup.globals.update(globals)

    def __getattr__(self, name):
        # Assuming all templates end with .html
        path = name + '.html'
        t = self._lookup.get_template(path)
        return t.render

有其它方式吗?

jinja2的变量标识符可以通过以下方式访问到,但是无法被修改
# 可以通过以下方式访问
import jinja2
jinja2.defaults.VARIABLE_START_STRING
jinja2.defaults.VARIABLE_END_STRING
jinja2.environment.VARIABLE_START_STRING
jinja2.environment.VARIABLE_END_STRING

# 使用以下方式赋值均无效
jinja2.defaults.VARIABLE_START_STRING = '{{ '
jinja2.defaults.VARIABLE_END_STRING = ' }}'
jinja2.environment.VARIABLE_START_STRING = '{{ '
jinja2.environment.VARIABLE_END_STRING = ' }}'
为什么无效?
 
原因是导入jinja2时,执行了jinja2包中的__init__.py文件,而__init__.py中导入Environment对象
Environment对象的构造函数__init__(variable_start_string=VARIABLE_START_STRING,variable_end_string=VARIABLE_END_STRING,...)有默认值
默认值在Environment被导入时,已经固定,之后无法被修改
所以使用赋值的方式无效
 
 
了解原因后,可以找到另外一种方法,在import前设置
__docformat__ = 'restructuredtext en'
__version__ = '2.7.2'

# high level interface
# 在此处添加下面三句代码
import defaults
defaults.VARIABLE_START_STRING = '{{ '
defaults.VARIABLE_END_STRING = ' }}'
from jinja2.environment import Environment, Template

# loaders
from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \
     DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \
     ModuleLoader
 

Tags: webpy;jinja2;variable_start_st
评论(0) 阅读(886)

angularjs过滤器(number)

2014年8月22日 21:13

用来精确浮点数(指定小数点位数).

在html中用法

{{ number_expression | number : fractionSize}}

在js中用法

$filter('number')(number, fractionSize)

参数

  • number 待精确的数字
  • factionSize(可选) 小数点后精确位数,默认值是3.
默认情况下保留的小数位数小于等于3. 比如: 1234-->1234;1234.56789-->1234.568;1234.56-->1234.56)

例子

<!doctype html>
<html ng-app='demo'>
<meta charset='utf-8'>
<body>
<div ng-controller="ExampleController">
  输入数字: <input ng-model='val'><br>
  <!-- 默认格式 -->
  默认格式: <span id='number-default'>{{val | number}}</span><br>
  <!-- factionSize=0 -->
  保留0位: <span>{{val | number:0}}</span><br>
  <!--factionSize大于小数点位数 -->
  保留10位: <span>{{val | number:10}}</span><br>
  <!-- factionSize小于小数点位数-->
  保留2位: <span>{{val | number:2}}</span>
</div>

<script src="/static/lib/angular/angular.js"></script>
<script src="/static/lib/angular-resource/angular-resource.min.js"></script>
<script>
    var app = angular.module('demo', ['ngResource'])
    .controller('ExampleController', function($scope) {
        $scope.val = 1234.56789;
    });
</script>
</body>
</html>
 
显示结果
输入数字: 1,234.56789
默认格式: 1,234.568
保留0位: 1,235
保留10位: 1,234.5678900000
保留2位: 1,234.57
 

Tags: angularjs;过滤器;number
评论(0) 阅读(3985)