HackToday Walk Blog


  • Home

  • Tags

  • Archives

  • Search

Kate 软件使用,开启console

Posted on 2011-12-11

Kate 不错的编辑工具:

当安装到ubuntu下,可能console开启不了,
解决方案如下:

When you click the Terminal button in Kate, but a terminal does not show up, it’s simply because Kate requires the Konsole terminal and you don’t have it installed yet.

To install it just do: sudo apt-get install konsole

python __init__.py

Posted on 2011-12-04

最近接触了python,看到init.py 感到很奇怪。经过查资料发现,这是python引进的package管理机制的产物。 cnblog有篇文章写的比较清晰,转载与此,
仅作个人资料查看。

http://www.cnblogs.com/tqsummer/archive/2011/01/24/1943273.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。这样的做法,对于少数文件是可行的,但如果程序数目很 多,层级很复杂,就很吃力了。
有没有办法,像Java的Package一样,将多个.py文件组织起来,以便在外部统一调用,和在内部互相调用呢?答案是有的。
主要是用到python的包的概念,python __init__.py在包里起一个比较重要的作用
要弄明白这个问题,首先要知道,python在执行import语句时,到底进行了什么操作,按照python的文档,它执行了如下操作:
第1步,创建一个新的,空的module对象(它可能包含多个module);
第2步,把这个module对象插入sys.module中
第3步,装载module的代码(如果需要,首先必须编译)
第4步,执行新的module中对应的代码。

在执行第3步时,首先要找到module程序所在的位置,其原理为:
如
果需要导入的module的名字是m1,则解释器必须找到m1.py,它首先在当前目录查找,然后是在环境变量PYTHONPATH中查找。
PYTHONPATH可以视为系统的PATH变量一类的东西,其中包含若干个目录。如果PYTHONPATH没有设定,或者找不到m1.py,则继续搜索
与python的安装设置相关的默认路径,在Unix下,通常是/usr/local/lib/python。
事
实上,搜索的顺序是:当前路径
(以及从当前目录指定的sys.path),然后是PYTHONPATH,然后是python的安装设置相关的默认路径。正因为存在这样的顺序,如果当前
路径或PYTHONPATH中存在与标准module同样的module,则会覆盖标准module。也就是说,如果当前目录下存在xml.py,那么执
行import xml时,导入的是当前目录下的module,而不是系统标准的xml。

了解了这些,我们就可以先构建一个package,以普通module的方式导入,就可以直接访问此package中的各个module了。

Python中的package定义很简单,其层次结构与程序所在目录的层次结构相同,这一点与Java类似,唯一不同的地方在于,python中的package必须包含一个__init__.py的文件。
例如,我们可以这样组织一个package:

package1/
    __init__.py
    subPack1/
        __init__.py
        module_11.py
        module_12.py
        module_13.py
    subPack2/
        __init__.py
        module_21.py
        module_22.py
    ……

__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容,下文详细介绍。

好了,现在我们在module_11.py中定义一个函数:

def funA():
    print "funcA in module_11"
    return

在顶层目录(也就是package1所在的目录,当然也参考上面的介绍,将package1放在解释器能够搜索到的地方)运行python:

>>>from package1.subPack1.module_11 import funcA
>>>funcA()
funcA in module_11

这样,我们就按照package的层次关系,正确调用了module_11中的函数。

细心的用户会发现,有时在import语句中会出现通配符*,导入某个module中的所有元素,这是怎么实现的呢?
答案就在__init__.py中。我们在subPack1的__init__.py文件中写

__all__ = ['module_13', 'module_12']

然后进入python

>>>from package1.subPack1 import *
>>>module_11.funcA()
Traceback (most recent call last):
  File "", line 1, in
ImportError: No module named module_11

也就是说,以*导入时,package内的module是受__init__.py限制的。

好了,最后来看看,如何在package内部互相调用。
如果希望调用同一个package中的module,则直接import即可。也就是说,在module_12.py中,可以直接使用

import module_11

如果不在同一个package中,例如我们希望在module_21.py中调用module_11.py中的FuncA,则应该这样:

from module_11包名.module_11 import funcA

Network-manager Panel没有的问题,如何配置

Posted on 2011-11-15

解决办法:编辑nm-system- settings.conf文件,将managed = false改为 true
sudo gedit /etc/NetworkManager/nm-system-settings.conf
[ifupdown]
managed=true
sudo /etc/init.d/network-manger restart

就可以看到状态为已经连接了.

注:还有一个信息和上面的无关,为了简单就记在这里,(ubuntu 10.04 更改最大化最小化关闭按钮位置 ),见参考资料2

  1. Alt + F2 ,运行 gconf-editor
  2. 在左侧目录树中,找到 /apps/metacity/general/
  3. 在右侧找到键: button_layout , 修改值为 menu:minimize,maximize,close

Ubuntu 关闭触摸板:
sudo modprobe -r psmouse即可。如果想打开的话可以把前面两种方式中的-r去掉即可。

来源:
[1]http://www.brucebot.com/2010/05/solve-error-of-gnome-panel-and-network-manager-under-ubuntu-1004/
[2]http://apps.hi.baidu.com/share/detail/17102222
[3] http://blog.csdn.net/iaccepted/article/details/6857454

T420 Linux 安装的问题

Posted on 2011-11-14

问题一,
因为软件兼容问题,需要安装ubuntu 10.04,但是这个版本的Linux对T420的支持的并不好。 操作系统安装后发现
无法上网,网卡无法识别。
查资料发现,需要安装一个e1000e的驱动,于是下载最新的版本:
http://sourceforge.net/projects/e1000/files/e1000e%20stable/
安装里面的README说明,解决了上网问题。

问题二,
AT&T VPN client问题,不知道是因为ubuntu版本缘故还是怎么的,11.10是能使用
http://huang.yunsong.net/2008/att-network-client-ubuntu.html
说的发现是可行的,但是10.04怎么就是不行,出现Kill VPN的错误,好吧。
继续搜索,发现一个顶用的信息:
http://www.attnetclient.com/forum/viewtopic.php?t=715
解决问题

问题三,
Java plugin for Firefox brower
因为使用的是openjdk,所以需要新的插件,sudo apt-get install icedtea6-plugin
如果是sun的jdk那么就用ubuntu wiki的说明:
http://wiki.ubuntu.org.cn/Qref/More#.E7.BC.96.E8.AF.91.E7.8E.AF.E5.A2.83.E9.85.8D.E7.BD.AE
本人还是跟随ubuntu推荐的openjdk算了,不跟sun凑热闹了。

问题四,
显卡的分辨率低,
还是ubuntu 10.04的驱动问题,11.10是没有问题的,好吧,那我就编译3.0内核试试,因为1024*768的分辨率实
在无法忍受。

编译内核需要注意的问题,
1) 一个是 mdio-gpio的already register的问题,虽然不影响进入操作系统,但是每次都打印一行这种信息,很碍眼。
所以,为了避免编译内核出现这种问题,那么就需要,
将 MDIO_GPIO 这一项的config配置成 编译成模块,默认的是编译进内核。这样就不会出现这个问题了。

2)对于显卡的问题,编译内核的时候注意nvidia,intel的显卡相关的选项都配成编译成模块,或者编译进内核.
还有一个Laptop Hybrid Graphics 选上,毕竟这个T420是支持双显卡的。

3)关于编译后出现的module dep的问题,我在自己的前面的内核编译中讲过处理的办法,这里不再说明。

4)编译后的有个问题是声卡正常,外音没有,耳机插入有声音。 好吧,这个暂时可以忍受。

5)无线网卡也可以识别出来,自己进行配置选取可行的网络,即可。

6)编译后的显卡直接是1600900, 没有其他的选项,有点不足,不过比1024768的好多了。

usb 安装 iso 文件, 安装 ubuntu

Posted on 2011-11-13

刻录光盘安装发现费事,而且一不小心就浪费一张,搞的很疲惫. 后来网上发现,直接使用USB(只要是FAT16 或32格式
就行,于是,果断采取USB安装.

  1. 下载制作软件

Universal USB Installer

  1. 下载ubuntuI的ISO

  2. 制作完成, 修改电脑BIOS的Boot顺序, Flash Disk优先

  3. 安装OS开始, 完成

Universal USB Installer is a Live Linux USB Creator that allows you to choose from a selection of Linux Distributions to put on your USB Flash Drive. The Universal USB Installer is easy to use.

具体参考细节:

http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

虚拟化技术简介[转]

Posted on 2011-11-13

看到一篇还不错的介绍虚拟化的文章,所以记下来来源:http://www.cnblogs.com/ventlam/archive/2010/10/09/1846862.html一.虚拟化技术的类型

1.全虚拟化
全虚拟化(Full virtualization),
也称为原始虚拟化技术,全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全
不做任何修改就可以在虚拟机中运行。该技术架构图如图1-1所示:

图1-1. 全虚拟化: 使用Hypervisor分享底层硬件
由于计算机硬件化资源被抽象化,必须需要一个机制来管理抽象化之后的资源。这个机制一般称作Hypervisor或者Virtual
Machine Monitor(VMM)。该模型使用虚拟机协调客户操作系统和原始硬件.因为VMM在客户操作系统和裸硬件之间用于工作协调.
一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理.
因为操作系统是通过Hypervisor来分享底层硬件。全虚拟化的运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为Hypervisor需要占用一些资源.它的唯一限制是操作系统必须能够支持底层硬件(比如, PowerPC) 代表项目;VMWare 闭源/ z/VM(IBM) 闭源
2.半虚拟化
半虚拟化(Paravirtualization)是另一种类似于全虚拟化的热门技术.
它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件。半虚拟化技术使得操作系统知道自身运行在一个Hypervisor,它的客户操作系统
集成了虚拟化方面的代码. 该方法无需重新编译或引起陷阱, 因为操作系统自身能够与虚拟进程进行很好的协作.如图1-2所示:

图1-2半虚拟化: 通过客户操作系统分享进程
上面提到过, 半虚拟化需要客户操作系统做一些修改(配合Hypervisor), 这是一个不足之处. 但是半虚拟化提供了与原始系统相近的性能. 与全虚拟化一样, 半虚拟化可以同时能支持多个不同的操作系统.代表项目: XEN GPL / UML GPL
3.硬件辅助虚拟化
硬件辅助虚拟化(Hardware-assiisted virtualization).或者称作硬件虚拟机(HVM)
主要是指操作系统在其之上运行时,必须靠系统的硬件来完成虚拟化的过程。硬件辅助虚拟技术不但能够提高全虚拟的效率(VM的产品都加入该类功能),而且使
用半虚拟技术的XEN也通过该项技术做到支持Window,Mac之类闭源的操作系统。该技术的架构图如图1-1所示:

图1-3. HVM架构图

X-86平台(包括X-86 64,AMD64)上的硬件辅助虚拟化项目主要是:Intel的VT和AMD的AMD-V

  1. 操作系统级的虚拟化
    最后一个需要了解的虚拟化技术是操作系统级的虚拟化(Operating system-level virtualization),
    它使用不同于上面的虚拟化方法. 该类只能仿真出主机的操作系统,如在Linux上只能运行Linux,Window上只能运行Window

图1-4操作系统级的虚拟化: 隔离单个服务器
二.具体的虚拟化产品
1.XEN
Xen作为最优秀的半虚拟化引擎,在基于硬件的虚拟化的帮助下,现在也支持完全虚拟化MS windows了.XEN架构如图2-1所示:

图2-1 XEN架构

最底层的是计算机硬件,包括CPU,RAM,硬盘接口,网卡,外设数据总线等等。硬件层之上,是Xen hypervisor层,包括总控界面(Xen Control Interface),虚拟CPU,虚拟RAM,虚拟硬盘,虚拟网卡等等。
在Xen层之上,是各个OS实例(OS
instances)。其中最左边的OS实例很特别。在启动Xen的时候,最左边的OS实例,Domain0 on
XenoLinux,自动被启动。Domain0里运行着Xen Control
Software,这个软件控制着各个OS实例的启动,终止,以及监控其运行情况。
Domain0对于其它OS实例的控制,是通过Xen层中Xen Control Interface来实现的。而这个Xen
Control
Interface只对Domain0开放。其它OS实例只有被管理的义务,而没有管理其它实例的权力。DomUs可以运行被修改过或者标准化的操作系
统。被修改的系统运行在paravirtualization(半虚拟化)每个OS实例都被分配一套虚拟的CPU,RAM,硬盘和网卡。每个OS实例使用
这些虚拟的设备,与通常的OS并无不同。在新版的XEN中通过PCI允许客户OS直接读取硬件,以提高整体性能。如图2-2所示,客户OS直接使用硬件

图2-2客户OS通过XEN PCI 直接读取硬件

2.KVM
KVM是在X86平台上的Linux全虚拟化方案。Linux 2.6.20内核增加了KVM虚拟化技术.它的特点是系统内核通过添加KVM的kernel module(kvm.ko),使系统内核自身成为一个Hypervisor(虚拟机管理程序)。
内核中的KVM模块通过/dev/kvm字符串设备显示被虚拟的硬件. KVM使用修改过的QEMU进程做为客户操作系统接口.KVM的虚拟化架构如图2-3所示:

图2-3. KVM的虚拟化

KVM模块向内核增加了一个新的执行模式: 客户模式. 官方原始内核(vanilla kernel)支持内核和用户模式. 客户模式用于执行所有非I/O客户代码, 普通用户模式支持客户I/O.
它是第一个整合到Linux内核的虚拟化技术.

3.VMware
WMware是全球最大的虚拟化厂商,该公司产品线漫长,主要包括桌面版的 Vmware workstation和企业版的VMWare ESX server。它们使用的虚拟化技术主要是全虚拟,在加上硬件辅助虚拟化后,产品性能有所提高。
在云计算中,VM主打产品是vSphere。它是非常完整的虚拟机群集产品,其组件包括:ESX Server 群,vCenter管理中心,数据库,vSphere (VI4)客户端。vSphere组件层如图2-4所示:

图2-4vSphere组件层

VirtualBox - 自动调整屏幕大小,显示分辨率

Posted on 2011-10-22

在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕调整不太好,操作起来非常不方便,需要安装Vbox的增强功能。具体如下:

  1. 在 设备–》 安装增强功能这时会自动加载VBOXADDITIONS的虚拟光盘

  2. /media/VBOXADDITIONS_4.0.10_72479 (4.0.10_72479是版本号)找到对应的操作系统的文件,比如Linux的是,VBoxLinuxAdditions.run

  3. 运行这个文件,需要管理员权限

  4. 操作完成,重启Ubuntu

  5. 然后,就会,发现其中的菜单项“Switch to Seamless Mode”可以使用了

  6. 点击“自动调整窗口大小”菜单项,这样屏幕分辨率会随着屏幕大小自动调整,非常方便

参考资料:http://aofengblog.blog.163.com/blog/static/631702120101117104437593/

Tomcat7.0 jndi连接池的配置

Posted on 2011-09-04

测试环境:

1
2
3
4
5
6
ubuntu 11.04
Kernel: 2.6.38
Mysql: 5.1.54
Tomcat: 7.0
eclipse: 3.6
Mysql数据库驱动: mysql-connector-java-5.1.17.zip

因为打算看看后端的数据库操作,所以就搭了环境试验一下,对于普通的数据库连接(使用JDBC的方式,比较简单,所以就试验jndi 连接池)

  1. 搭建好tomcat服务器

在mysql建立一个BookDB的数据库,建立一个books表,内容如下:

1
2
3
4
5
6
7
8
9
mysql> select * from books;
+-----+-----------+------------------------+-------+------+--------------------------------+------------+
| id | name | title | price | yr | decription | saleAmount |
+-----+-----------+------------------------+-------+------+--------------------------------+------------+
| 201 | wangfang | Java programming guide | 33.75 | 1999 | Guide user to grasp quickly | 1001 |
| 202 | zhangbing | Weblogic tech | 50.25 | 2000 | Good to learn web logic | 2000 |
| 203 | sunyan | Oracle Database | 60 | 2002 | database entry book | 2700 |
| 204 | Aling | Hadoop Guide | 100 | 2004 | A cookbook for distrbuted Arch | 5700 |
+-----+-----------+------------------------+-------+------+---------------------
  1. 将Mysql驱动中得jar文件拷贝到 {TomcatHome}/lib/

  2. 使用eclipse建立一个Dynamic Web Project, 在META-INF/ 下建立context .xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
xml version="1.0" encoding="UTF-8"?>

<Context>

<Resource auth="Container"

driverClassName="com.mysql.jdbc.Driver"

maxActive="100"

maxIdle="40"

maxWait="12000"

name="jdbc/BookDB"

username="root"

password="test"

type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/BookDB?characterEncoding=UTF-8" />

Context>
  1. 在WEB-INF/ 下创建 web.xml
1
2
3
4
5
6
7
8
9
10
'-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
'http://java.sun.com/j2ee/dtds/web-app_2_3.dtd'>

DB Connection
jdbc/BookDB
javax.sql.DataSource
Container
```

5. 创建jsp文件, index.jsp

<%@ page language=”java” import=”java.util.,javax.naming.,java.sql.,javax.sql.“pageEncoding=”UTF-8”%>

<%

Context ctx = new InitialContext();        

String strLookup = "java:comp/env/jdbc/BookDB";   

DataSource ds =(DataSource) ctx.lookup(strLookup);  

Connection con = ds.getConnection();  

if (con != null){  

    out.print("success");  

}else{

    out.print("failure");  

}         

%>
`

  1. 运行,OK

shell的特殊符号

Posted on 2011-08-03

这里的记录仅仅是备忘,标记前人做的很好的总结,以备很好的作为工具书查看:

http://blog.csdn.net/wiserstar/article/details/4345628

shell中的if判断:

http://hi.chinaunix.net/?483016/viewspace-44373

Linux sed工具的用法

Posted on 2011-08-03

sed的用法,如果不常用就老是忘记,搜到了两篇文章,介绍的很好,特此标记一下,以后就不费功夫每次搜索找了:

一篇是介绍去掉空格相关的:
http://www.blogjava.net/xzclog/archive/2010/12/28/341752.html

还有一篇是介绍sed用法的,里面包含很多奇妙的替换方法:

http://blog.csdn.net/wxm7075/article/details/5260110

最后一篇来了个sed集锦,也不错:

http://blog.csdn.net/y8421/article/details/6441694

1…192021…26

Kai Qiang Wu

This is a place for thinking and writing

253 posts
32 tags
GitHub
© 2020 Kai Qiang Wu
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4
Visitor Total Visit