普通用户运行sshd

        转载请注明出处。

        sshd 是 ssh 套件中的监听守护模块,只有运行 sshd 监听程序的主机才能被远程主机通过 ssh 登录。在某些情况下(比如在一台没有系统权限的主机上,系统的 ssh 限制了某些登录)需要以普通用户的身份在某一端口启动 sshd 服务,以方便地进行 ssh 登录。本文便总结了经过实践验证的启动 sshd 的方法。

  • 设置 sshd 配置文件
  •  mkdir etc  cp /[......]

Read more

VTune 分析 MPI 程序

        本文来自于一篇英特尔的技术文档,讲解了如何用 VTune 和 Inspector 工具分析 MPI 程序。我在实际工作中用到的是 VTune 工具。没用过的不好说,不过两者操作起来很是相似。

        用 VTune 分析 MPI 程序,就像把大象装冰箱,分三步:

  • 用 amplxe-cl 和 inspxe-cl 命令行工具收集程序数据。默认情况下会分析所有进程,也可过滤数据,分析一部分进程。每个被分析的进程都[……]

Read more

文艺 shell——zsh

        最近读了一本书,作者深深地推荐了一款对我来说完全是新玩意儿的 shell——zsh。听说不光功能强大,还很文艺。无意之中看到同实验室的同学竟然也在用,给我很大触动。本着活到老折腾到老的精神,我也装一个玩玩看,当然,运行环境是 Ubuntu。

        本文主要参考终极shell定制你的zsh命令提示符

安装

zsh据说是很难配置的,后来有人写了个方便上手的工具,叫做“oh my zsh”。所以除了安装 zsh 以外,还要安装这个工具。zsh 的安装非常简单:

$sudo apt-get install zsh
$chsh -s /bin/zsh[......]

Read more

编程珠玑笔记(18)-字符串

  • 单词

  第一个问题是为文档中包含的单词生成一个列表。可以使用C++标准模版库中的sets和strings:

  int main(void){
      set  S;
      set ::iterator j;
      string t;
      while (cin >> t)
          S.insert(t);
      for (j = S.begin(); j != S.end(); ++j)
          cout > t)
          M[t]++;
      for (j = M.begin(); j != M.end()[......]

Read more

编程珠玑笔记(17)-堆

  本章重点关注的是一种特殊的数据结构——堆。这种结构在数据结构课和算法课中多有介绍(其实本章内容与《算法导论》中第6章的内容“堆排序”比较相似)。本章介绍了堆以及其两种用途——优先级队列和排序。

<li><strong>堆数据结构</strong></li>

  堆有两个特定的性质。一是顺序,即任何结点的值都小于或等于其子结点的值,这意味着根结点的值最小。二是形状,一般用一棵二叉树来表示堆,树是平衡的,它最多在两层上具有叶结点,其中最底层的叶结点尽可能地靠左分布。因此,如果堆有n个结点,那么所有结点到根结点的距离都不超过lgn。

  因[……]

Read more

编程珠玑笔记(16)-搜索(II)

<li><strong>二分搜索树</strong></li>

  二分搜索树可以认为是在链表的基础上进一步进行扩展——它支持快速搜索和插入。

  二分搜索树基于一个事实:任何一个结点,其左孩子的值小于其值,其右孩子的值大于其值。

  private:
      int n, *v, vn;
      struct node{
          int val;
          node *left, *right;
          node(int i) {val = i; left = right = 0; }
  [......]

Read more

编程珠玑笔记(15)-搜索(I)

  本章讨论的是搜索问题中的数据结构。作者依次描述了适用于不同情境下的数据结构,存储的数据信息均为整数。

  • 接口
  •   要实现的伪代码:

      initialize set S to empty
      size = 0
      while size < m do
          t = bigrand() % maxval
          if t is not in S
              insert t into S
              size ++
      print the elements of S in sorted order
    

      (数据结构)接口的定义:

      class IntSetImp {
      public:
          IntSetImp (int maxelements, int maxval); //将集合初始化为空
          void insert (int t); //插入新整数t
          int size(); //返回集合中的元素个数
      [......]

    Read more

    让照片具有冲击力

    • 调整光圈以体现画面冲击力

      长焦距、浅景深(大光圈),让主要拍摄对象成为唯一清晰的区域。
      拍摄快速移动的物体,可以在拍摄对象要经过的某个点上预先对焦,尽量背对主光源。
      

    • 长焦镜头和广角镜头

      使用广角镜头时应当让拍摄对象距离相机较近,而且,选用恰当的引导线可以实现生动的透视效果(比如火车轨道)。
      

    • 如何使用快门实现创意控制

      如果拍摄正在移动的对象,尝试在它经过您面前时使用“摇拍”技巧。用相机跟随从面前经过的对象(一般与此同时辅以较慢的快门速度),还可以使用闪光灯(TTL模式)填充闪光。

    编程珠玑笔记(14)-取样问题

      本章的关注点是随机对象的选取。具体来讲,就是从n个对象中随机选取m个对象的问题,其中要用到随机数生成函数。
      假设:一个能返回很大随机整数的的函数bigrand(),一个能返回i..j范围内均匀选择的随机整数函数randint(i,j)。
      在C语言中,随机函数rand()通常返回约15个随机位,可以使用该函数实现上述bigrand()和randint()函数。

      int bigrand(){
          return RAND_MAX*rand() + rand();
      }
      int randint(int l, int u){
          return l + bigra[......]

    Read more

    编程珠玑笔记(13)-排序

    插入排序
      直观的插入排序isort1:

      for i = [1, n)
          for (j=i; j > 0 && x[j-1] > x[j]; j--)
              swap(j-1, j)
    

      将swap展开后得到isort2,展开代码为:

      t = x[j] ;  x[j] = x[j-1];  x[j-1] = t
    

      考虑到t总是被赋予同样的值,将其挪到循环外面得到isort3:

      for i = [1, n)
          t = x[j]
          for (j = i; j > 0 && x[j-1] > t; j--)
      [......]

    Read more