Mathmatics & Programming


  • 首页

  • 分类

  • 归档

  • 标签

  • 公益404

  • 搜索

问题集锦

发表于 2016-11-21   |  

“Single ampersand used with wrong catcode” error using tikz matrix in beamer

ampersand replacement | fragile

Beamer

发表于 2016-11-18   |   分类于 Latex , Presentation , Beamer   |  

Simple Overlay

Use \pause command.

Overlay Specification

\somecommand<overlay specification>[optional argument]{arguments}

overlay specification = 1-3 (range), 5 (number), -3 (same as 1-3), 1- (from 1 on), …

Commands with Overlay Specifications

if <o.s.> appears twice, it can be put at either place.

<text> can even be a command, like \draw (0,0) -- (1,0);

only<o.s.>{text}<o.s.> insert the text only in specified slides, for other slides, it takes up no space (throw text away).

item<o.s.>{text}<o.s.> show the text in a list environment in the specified slides.

alt<o.s.>{default text}{alternative text}<o.s.> display the default text in specified slides, otherwise show the alternative text.

temporal<o.s.>{before slide text}{default text}{after text} alternate between three different texts.

visible<o.s.>{text} only shown in specified slides, otherwise it doesn’t show up completely.

uncover<o.s.>{text} compared to visible, in unspecified slides the text can be transparent.

onslide

vim 配置

发表于 2016-11-04   |   分类于 Vim   |  

在 MinGW 中改变字体

在 how-do-you-configure-msyss-default-size-color-and-font 中提到,最简单的方法就是在窗口上边框点击右键配置相关参数。 我使用的是 mintty,支持这样的配置方法。更复杂的是 RXVT,可能需要更改相应配置文件。

Statusline 的配置

statusline 即 vim 窗口的状态栏,在命令栏的上方编辑区的下方。可以通过一行配置

1
set statusline=%t[%{strlen(&fenc)?&fenc:'none'},%{&ff}]%h%m%r%y%=%c,%l/%L\ %P

注意,不能出现空格,如果想加入字面上的空格需要用反斜线转义。

也可以用多行带注释的方式

1
2
3
4
5
6
7
8
9
10
11
set statusline=%t "tail of the filename
set statusline+=[%{strlen(&fenc)?&fenc:'none'}, "file encoding
set statusline+=%{&ff}] "file format
set statusline+=%h "help file flag
set statusline+=%m "modified flag
set statusline+=%r "read only flag
set statusline+=%y "filetype
set statusline+=%= "left/right separator
set statusline+=%c, "cursor column
set statusline+=%l/%L "cursor line/total lines
set statusline+=\ %P "percent through file

%t 和 %f 有区别,可以观察在 %f 下把焦点移到另一个 buffer 后发生什么变化。

making-statuslines-that-own 详细说明了配置要点,包括 %{...} 自定义内容,%-0{minwid}.{maxwid}{item} 的完全语法,%(...%) 将多个东西括起来等等。

Vimdiff

E97

vimdiff ( 包括 git mergetool、fugutive 的 :Gdiff ) 都需要可执行文件 diff 的支持。在 MinGW 中如果出现 E97,可参考 解决 E97 中的做法,简而言之使用 ln -s /usr/bin/diff /usr/share/vim/vim74diff 将 vim74diff 指向系统 diff。

diff 输出内容的解读可以参考 how to read diff。

Git Merge

回顾 git remote 和 git fetch 等命令可以看 git 远程操作。

如果在本地修改了一些配置文件,想更新软件主要版本,可以使用 git stash 来完成 merge 过程:

1
2
3
4
git stash
git fetch
git merge origin/master
git stash pop

这时候会有冲突,使用 git mergetool 或者在 vim 中使用 fugitive 插件的 :Gdiff 均可。关于 fugitive 的使用可以观看 fugitive.vim视频介绍,git mergetool 的使用可以查看 vimdiff的说明。

arch

发表于 2016-07-16   |  

pacman

pacman有两个配置文件:/etc/pacman.conf和/etc/pacman.d/mirrorlist。前者指定根据什么来更新,通常是用后者。mirrorlist文件保存了一系列镜像地址,在进行pacman -Syu时根据选择的镜像来更新。

图形界面的安装

要使用图形界面,可以安装集成好的桌面环境(DE)如Gnome、KDE等,也可以自由搭配安装桌面环境中的各个组件。最重要的组件是window manager(wm)和display server。display server似乎只有Xorg和Wayland,大部分使用的是Xorg。我现在使用的wm是awesome。

安装Xorg

pacman -S xorg-server

安装awesome

pacman -S awesome

display manager常常被DE用来启动桌面环境以及管理用户登录,我们自行安装的wm也需要dm,不过也可以直接startx。

startx是xinit的前段或包装,主要启动x server和执行DE、WM(每个都是一个client)等等。~/.xserverrc是startx用来启动x server的脚本。/etc/X11/xinit/xserverrc是其系统版本。系统版本的图形界面会在一个新的virtual terminal启动,为了限制它在启动它的vt中,需要

#!/bin/sh
exec /usr/bin/Xorg -nolisten tcp “$@” vt$XDG_VTNR

.xinitrc用来指定xinit启动的client。对应系统版本为/etc/X11/xinit/xinitrc。要自定义这个文件,首先要copy系统版本再其基础上修改,因为需要执行其他一系列脚本。自定义结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login
## some applications that should be run in the background
#xscreensaver &
#xsetroot -cursor_name left_ptr &
exec awesome

exec语句是最后一句,因为exec会进行进程替换。其他client应该fork或在后台执行。

需要注意的是,awesome默认使用的是xterm,arch刚刚安装完是没有xterm的,会出现打开terminal没有反应。安装xterm即可。

要启动图形界面,直接startx。awesome有退出选项。

要在登录时自动执行X,使用bash在~/.bash_profile中加入

[[ -z $DISPLAY && $XDG_VTNR -le 3 ]] && exec startx

这样vt1~vt3都可以自动执行X了。

还有在使用中切换DE/WM,暂时没用到。

网络相关

DNS服务器配置文件是/etc/resolv.conf,host文件是/etc/hosts,dhcp配置在/etc/dhcpcd.conf(默认使用duid,如果无法联网可尝试clientid,血的教训/(ㄒoㄒ)/~~)。还有很多在/etc/netctl中,比如静态ip等等。

Cassandra初探

发表于 2016-07-13   |   分类于 Distributed System   |  

Cassandra是一个去中心化的、高可靠性高可扩展性的、高吞吐率的分布式存储系统。它是由Facebook开发,论文发表在paper address上。这里给出这篇论文中描述的关键概念。

Data Model

表是一组索引到一组多维数据的映射,就像传统数据库一样。数据列被组织为column family,一个column family可以包括多个列,此时存取单列记为column_family : column。除此之外还有super column family,一个super column family可以包括多个column family,此时存取单列记为column_family : super_column : column。

API

三个简单的方法:

1
2
3
insert(table,key,rowMutation)
get(table,key,columnName)
delete(table,key,columnName)

这里的columnName可以是column family中的column,可以是column family,可以是super column family,可以是super column中的column。

Partitioning

Partitioning就是将数据分布到不同节点的特性。通过将负载高节点的数据转移到低负载节点,可以提高系统的可扩展性。并且Cassandra支持增量式扩展(scale incrementally)。使用的核心技术是consistent hashing,节点随机分配到标识符环上,key都被hash到一个标识符(和节点的标识符属于同一个标识符空间)。key找到第一个满足标识符大于key的标识符的节点,这个节点是这个key的coordinator。对这个key的请求会被route到这个节点。节点的加入和离开只会影响邻居节点管制的key,容易增量式扩展。基本的consistent hashing带来两个问题,一个是数据负载可能不均衡(?),第二个是节点的性能可能存在差异。Cassandra的做法是分析负载信息,移动低负载节点的位置从而降低高负载节点的压力。

Replication

Cassandra使用复制提高可用性和持续性(availability and durability)。可以指定一个复制因子$N$,系统会将数据复制到$N$个不同的节点。Coordinator负责将数据复制到其他$N-1$个节点中。有几种复制策略选择:“Rack Unaware”会复制到coordinator后面的$N-1$个节点;“Rack Aware”和“Datacenter Aware”会利用Zookeeper选择出一个leader,leader指定数据的其他$N-1$replica位置,节点加入时leader告知它负责哪些range,并且leader维护一个不变式使得每个节点不作为超过$N-1$个range的replica。Cassandra借用Dynamo的说法,将负责某个range的那些节点称为range的“preference list”。

通过将每行数据复制到不同的data center(推测应该是Datacenter Aware策略的结果),Cassandra提供了持续性(durability)保障。这样即使整个data center failure都可以处理。

Membership

Cluster membership基于Scuttlebutt(我并不了解),Scuttlebutt是一个高效的anti-entropy Gossip based mechanism(并没有详细介绍)。Cassandra中gossip并不仅仅用于membership还被用来分发系统控制状态。

Cassandra使用修改版的$\Phi$ Accural Failure Detector来探测节点failure。这个failure detection module为每个节点释放一个$\Phi$值,这个值在一个量表中表征某个含义(含义略)。

Bootstrapping

节点在加入时随机选择一个标识符,这个映射会被存储到硬盘盒Zookeeper上。标识符信息会被gossip给cluster的所有节点,cluster的节点就可以知道标识符环的节点位置。节点bootstrap的加入需要初始contact points,Cassandra称之为seeds,通常由Zookeeper配置。

(Facebook相关)Facebook环境中节点会暂时断开但并不意味着永久离开,因此不需要partitioning的重新平衡和unreachable replica的repair。因此节点的加入和离开由人来控制,然而人可能犯错,因此一个Cassandra实例的消息都带有这个实例的名字。当人工操作失误时,操作将被制止。

阅读全文 »

TikZ

发表于 2016-05-25   |   分类于 writing   |  

TikZ是什么

PGF/TikZ是用于绘制几何和代数的向量图形的语言,PGF是底层语言,TikZ则是基于PGF的宏高级语言。PGF/TikZ可以在$\LaTeX$、plain $\TeX$、和\ConTEXt中使用. 这里主要关注TikZ在$\LaTeX$中的用法。

TikZ基础

设置使用环境

1
2
3
4
5
6
7
8
9
\documentclass{article} % say
\usepackage{tikz}
\begin{document}
We are working on
\begin{tikzpicture}
\draw (-1.5,0) -- (1.5,0);
\draw (0,-1.5) -- (0,1.5);
\end{tikzpicture}.
\end{document}

构造直线

1
\draw (-1.5,0) -- (1.5,0) -- (0,-1.5) -- (0,1.5);

不要忘记表达式尾的分号。

构造长方形

1
\draw (-0.5,-0.5) rectangle (-1,-1);

增加一点风格

1
help lines/.style={color=blue!50,very thin}

如果help lines定义在全局,则在文档开头使用\tikzset

1
\tikzset{help lines/.style=very thin}

一个风格的定义可以引用另一个风格。如Karl's grid引用了上面的help lines

1
2
3
\tikzset{Karl’s grid/.style={help lines,color=blue!50}}
...
\draw[Karl’s grid] (0,0) grid (5,5);
阅读全文 »

hexo_install_config

发表于 2016-05-22   |   分类于 工具 , hexo   |  

title: hexo_install_config
date: 2016-05-22 20:13:53
categories:

  • 工具
  • hexo
    tags:

经过两天折腾,hexo总算像模像样了。中间走了不少弯路,这里记录下来方便后来人。

安装hexo

首先建议安装git,因为在后面使用主题时会用到。在windows下可以使用git for windows代替,一路默认即可。

接下来下载安装node.js。从官网下载安装即可。

下面进入正题。安装hexo是极为简单的。

  1. 用node.js的包管理工具npm安装hexo:

    $ npm install -g hexo-cli

  2. 在目标文件夹<folder>中初始化hexo:

    \$ hexo init <folder>
    \$ cd <folder>
    $ npm install

配置hexo

安装容易配置难。hexo可配置的内容非常多,建议仔细阅读hexo官方docs,当然也可以按照我的顺序来挂了我可不负责哟。这里暂不涉及hexo主题,hexo主题放在下一节。以下内容分别为

  1. hexo的目录结构
  2. 作者信息相关配置
  3. git部署
  4. mathjax支持
  5. 流程图支持
阅读全文 »

jensen_inequality

发表于 2016-05-20   |   分类于 Mathmatics , PRML   |  

凸函数与凹函数

凸函数convex function形象地说两头往上翘,中间往下沉。凹函数concave function恰好相反,两头往下沉,中间往上翘。下图是一个凸函数
convex function

凸函数的定义在某些国内教材中和Wiki中的含义不一,注意区分。

阅读全文 »
N.C.Yi

N.C.Yi

程序员的学习之路

8 日志
14 分类
9 标签
RSS
github 微博 zhihu
© 2017 N.C.Yi
由 Hexo 强力驱动
主题 - NexT.Pisces