Fork me on GitHub

Ubuntu下配置远程桌面xrdp

想通过windows的远程桌面访问ubunt的桌面,尝试VNC不成功,于是百度出利用xrdp也可以实现。

1.安装

sudo apt-get install xrdp

2.配置

配置文件在/etc/xrdp/xrdp.ini中,我没有进行特别的修改。

3.安装gnome桌面环境

只安装xrdp后就进行连接(端口号3389)时,只会显示一个桌面背景。。。能做的操作就是新建文件夹。。。

百度之后说是因为ubuntu13.04的桌面环境不支持,所以需要换成gnome。

sudo apt-get install gnome-session-fallback
    echo "gnome-session --session=gnome-fallback" > ~/.xsession

4.重启xrdp

sudo service xrdp restart

The end!!

more…

利用Jenkins+Gitlab搭建持续集成(CI)环境

这次实习的任务之一就是搭建一个持续集成(Continuous Integration)环境。

我们选择Jenkins作为持续集成工具,其优点是提供web GUI配置界面,方便配置,还可以安装很多第三方插件(plugin)进行定制与扩展,功能强大。

其次选择Gitlab作为git server。Gitlab的功能和Github差不多,但是是开源的,可以用来搭建私有git server,也提供非常强大的web GUI,比如开发者互相review源代码的时候就会很方便。

本文首先介绍整个系统的结构,然后再一一叙述各个组件的安装及使用方法。

1.系统概览

系统结构如下图所示:

figure_1

系统的工作流程大概分为以下几步:

1> 开发者将新版本push到git server (Gitlab)。

2> Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测)

3> jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。

4> 我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度。

notes

jenkins的工作原理是先将源代码从gitlab中拷贝一份到本地 ...

more…

将Raspberry Pi作为BT下载机

今天尝试了一个有用的功能,就是将树莓派作为bt下载机。

由于树莓派耗电低,没噪音,可以让它一直开着下载bt资源。

一个名为 ` Transmission <http://www.transmissionbt.com/>`_ 的软件为我们提供了这个功能。它不但能作为树莓派上的bt客户端,还可以通过web图形界面进行控制,非常方便。

1.安装Transmission

sudo apt-get install transmission-daemon

2.配置Transmission

Transmission的配置是通过编辑其配置文件实现的,

sudo vim /etc/transmission-daemon/settings.json

可配置的选项有很多,这里挑几个常用的讲一下。

1> "download-dir" : "/home/pi/bt" 设置下载后的资源保存的路径。

2> "rpc-authentication-required" : true 远程控制时需要验证

3> "rpc-enabled" : true 开启远程控制

4> "rpc-password" & "rpc-username ...

more…

Raspberry Pi中samba服务器的配置

为了可以在笔记本上访问树莓派的文件系统,我们可以在树莓派上安装samba服务器。

因为Raspbian是从Debian改来的,所以参考Debian下samba服务器的配置。

1.安装samba

sudo apt-get install samba samba-common-bin

2.配置samba

首先需要为samba创建一个用户:

sudo touch /etc/samba/smbpasswd
sudp smbpasswd -a pi

然后我们需要编辑samba的配置文件(这里用到了vim,没有安装的话也可以用别的编辑器)

sudo vim /etc/samba/smb.conf

然后在配置文件最后加入以下内容:

[home]
        comment = laowang's data
        path = /home
        valid users = pi
        public = no
        writable = yes
        printable = no
        create ...
more…

Raspberry Pi配置USB无线网卡连接wifi

树莓派自身不带无线网卡,所以要想让树莓派连上无线网络,就需要插上一个USB无线网卡。

首先可以在树莓派的 外设兼容列表 中选择一款兼容的USB无线网卡,最好是那种即插即用的(out of the box),这样就不需要安装驱动了。 在日本只能买到 Buffalo WLI-UC-GNM,本以为需要手动安装驱动,没想到直接被系统识别了。

我们可以使用命令

ifconfig -a

来查看接口信息。如果有wlan0这项,就说明新加的网卡已经被识别了。但是IP地址之类的信息还没有。

接下来我们需要配置接口,即编辑配置文件。

sudo nano /etc/network/interfaces

将interfaces中的配置改为:

auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp ...
more…

Raspberry Pi系统安装及启动

最近有些无聊,心血来潮买了一个Raspberry Pi(树莓派)。Raspberry Pi是一款基于Linux系统的个人电脑,配备一枚700MHz的ARM处理器, 512M内存,支持SD卡和Ethernet,拥有两个USB接口,以及 HDMI和RCA输出支持。

首先秀一张开箱图:

figure

1.安装raspbian系统到SD卡

树莓派用SD卡充当硬盘,为了速度,我专门买了一张16G class10的SD卡。

树莓派支持多个系统,官方建议的是Raspbian,这是一个从Debian改过来的系统。首先需要在官网下载系统镜像 Dowload Raspbian

然后我们需要一个工具 Win32 Disk Imager 将系统写入SD卡中。

下载并解压,然后运行win32diskimager。工具的界面很简单,我们只需要在"Image File"中选择系统镜像的位置(注意镜像的路径中不能有中文), 在"Device"下选择SD卡的盘符,然后点击"write"按钮。

接下来就是等待至工具提示"Write Successful"后,即可将SD卡安全移除。

我们会发现SD卡的空间变成74MB了 ...

more…

windows下安装pelican

用虚拟机在ubuntu下写了这么久的博客,实在是受不了电脑内存不够,一开虚拟机就开始卡的情况。

原来一直懒得搞,因为在linux下安装程序很方便。今天尝试了一下在windows下安装pelican,其实也不是很烦。

1.安装python

pelican是用python开发的,所以首先要在windows下安装python。

在python官网上下载python安装包: Download Python 。我是win8-64bit,所以选择Python3.3.2Windows X86-64 MSI Installer。安装的过程是全自动的,只需要选择路径和点下一步即可。

安装的过程中会询问是否将python添加到环境变量中,为了可以直接在cmd(命令提示符)中使用python命令,建议选是。如果不小心选错了,也可以手动 将python添加到环境变量中去。在path中加入

C:\Python33\Scripts;

即可(此处路径为示例,有可能不一样)。

可以在cmd中输入python查看是否安装成功。(ctrl+c退出)

2.安装pip

pip是一个帮助我们安装和管理python包的工具,我们通过pip来安装pelican。

首先在 Download pip 下载pip。

然后解压下载的压缩包 ...

more…

算法导论第10-14章习题答案

10.1-6

Q:说明如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。

A:栈是先进后出,而队列是先进先出,一种自然的想法是,用一个栈来存储队列的元素,入队就和如栈一样; 出队的时候先将这个栈的元素依次压出另一个栈内,然后将栈顶元素(即队首)弹出,然后再依次倒回原先的栈内。 这样入队为O(1),出队为O(n)。仔细想想,并不需要每次都将当前所有元素在两个栈内倒来倒去, 只需要入队用一个栈,出队用另一个栈: 入队操作即在第一个栈上执行入栈;出队操作时,若第二个栈不为空,则在第二个栈上执行出栈, 若第二个栈为空,则将第一个栈内的元素依次全部压入第二个栈内。这样入队出队操作都为O(1)的复杂度。

10.1-7

Q:说明如何用两个队列来实现一个栈,并分析有关栈操作的运行时间。

A:一种自然的想法,类似于上一题,用一个队存储,另一个队列作为临时空间。入栈时就向第一个队列中插入元素; 出栈时,先将第一个队列中除队尾(栈顶)的元素依次出队后进入第二个队列,然后将队尾(栈顶 ...

more…

算法导论第15章习题答案

15.2-2

Q:请给出一个递归算法MATRIX-CHAIN-MULTIPLY(A,s,i,j),使之在给出矩阵序列<A1,A2,...,An>,和由MATRIX-CHAIN-ORDER计算出的表s, 以及下标i和j后,能得出一个最有的矩阵链乘法。(初始调用为MATRIX-CHAIN-MULTIPLY(A,s,1,n))。

A:模仿PRINT-OPTIMAL-PARENS(s,i,j)即可。伪代码:

MATRIX-CHAIN-MULTIPLY(A,s,i,j)
{
    if i=j then return Ai;
    else
        return MATRIX-CHAIN-MULTIPLY(A,s,i,s[i ...
more…

算法导论第6,7,8,9章习题答案

6.5-6

Q:说明如何使用优先级队列来实现一个先进先出队列,另说明如何用优先级队列来实现栈。

A:队列的性质是先进先出,所以维护一个最小优先级队列,给先进队的元素赋一个小的优先级,每插入一个新的元素优先级加1。 出队时取优先级最小的元素并维护优先级队列即可。栈的实现同理。

6.5-7

Q:HEAP-DELETE(A,i)操作将结点i中的项从堆A中删去。对含n个元素的最大堆,请给出时间为O(lgn)的HEAP-DELETE的实现。

A:类似于堆排序时做的操作,将要删除的结点和堆的最后一个结点交换,将其删除后维护堆的性质。伪代码:

HEAP-DELETE(A,i)
{
    A[i] = A[heap-size[A]];
    heap-size[A] = heap-size[A] - 1;
    key = A[i];
    if key ...
more…