东东东 陈煜东的博客

分类存档: 实用技巧

git bash 遇到的一些问题

使用了 git windows 客户端遇到的一些问题记录。

$ git --version
git version 2.11.0.windows.1

退格键无法工作

升级了一下git的 Windows 客户端,默认操作都是使用 git-bash.exe 来进行命令行的使用的。但是例如 PyCharm 里面带的 Terminal 用的是 git-bash.bat 这里面的效果。遇到了很尴尬的问题,方向键和退格键都无法使用。

看了这个帖子修改了一下可以使用方向键和退格键了。 http://superuser.com/a/683405

git-bash.bat 开头的一些地方加了下面的一段话。

SET TERM=cygwin

git bash 中文乱码

ls 文件的时候出现

''$'\345\217\221\344\277\241\346\201\257''.txt'

类似的编码,使用一下的东西,好像也没怎么改动。在git-bash.exe 中就中文显示正常了,但是 PyCharm 里面的那个还是有问题。

# disable/enable 8bit input
set input-meta on
#set output-meta on
set output-meta on
set convert-meta off
#set convert-meta off

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: git bash 遇到的一些问题 – https://www.chenyudong.com/archives/git-bash-windows-keng.html

分类: 实用技巧

sphinx文档使用graphviz来画图

Sphinx是用来写文档的利器,虽然比Markdown来的麻烦一些,但是功能强大,用起来也还很不错。考虑到不同文档之间内的跳转,还有把文档从拆分成多个小文档,而且reStructuredText语言入门成本不高,所以用了sphinx-docs来做文档的编写。

Word来编写文档?呃。。。请赐我一刀。使用Word来进行编排文档,在多人协作的情况下,简直惨不忍睹,文档的格式乱七八糟。

reStructuredText再通过LeTax来编译生成pdf也是很方便的。

为什么要用graphviz来画图?

画图的软件并不是太多,一般的人会选择使用visio来进行画图,visio来画图确实可以,也无可厚非,所见即所得,容易上手。但是用于一个版本控制的文档,visio的版本控制就不是太好了。用文本来说就方便很多了。

有个ditaa使用ascii字符来画图的,http://ditaa.sourceforge.net/。很多工业界的IETF文档用它来画图

+--------+   +-------+    +-------+
|  cRED  | --+ ditaa +--> |       |
|  Text  |   +-------+    |diagram|
|Document|   |!magic!|    |  cGRE |
|     {d}|   | cYEL  |    |       |
+---+----+   +-------+    +-------+
    :                         ^
    |       Lots of work      |
    +-------------------------+

ditaa

但是和中文结合在一起排版就不是太好了。中文一个字符占两个英文字符的位置,导致原图不和谐。还有另外一个原因,感觉编译ditaa的速度有些慢。

下载安装Graphviz

Windows下载Graphviz,解压到一个路径下,然后把其bin目录加入到环境变量中。在cmd中dot -V来验证是否可以使用dot编译了。

Linux请使用系统自带的包管理程序来安装atp-get install graphviz,和Windows同样的验证方法。

Sphinx 配置文件修改

Sphinx项目也需要做一些变更,因为开启了Graphviz插件。修改conf.py

# 通过配置开启graphviz插件
extensions = ['sphinx.ext.graphviz']

# 设置 graphviz_dot 路径
graphviz_dot = 'dot'
# 设置 graphviz_dot_args 的参数,这里默认了默认字体
graphviz_dot_args = ['-Gfontname=Georgia', 
                     '-Nfontname=Georgia',
                     '-Efontname=Georgia']
# 输出格式,默认png,这里我用svg矢量图
graphviz_output_format = 'svg'

这里graphviz_dot的值是dot,为了不把绝对路径写到配置中,防止其他人的路径不一样,所以这里要求dot这个程序在环境变量中,能够直接使用。

graphviz_dot_args这个参数注意正确使用'-Gfontname=Microsoft YaHei',以下是错误的'-Gfontname="Microsoft YaHei"'。 通过-G, -N, -E 来设置全局的 graphnodeedge 属性。

开始使用Graphviz

好了,接下来就可以在sphinx文档中插入你的图片了。

例如:

.. graphviz::

    digraph abc{
        a;
        b;
        c;
        d;

        a -> b;
        b -> d;
        c -> d;
    }

demo图

简单的图形

或者通过

.. graphviz:: external.dot

这个使用一个dot文件内容。

测试一下你的graphviz能否支持好中文


.. graphviz::
   
   digraph idp_modules{
     fontname = "Microsoft YaHei";
     rankdir = TB;
     fontsize = 12;
     
     node [fontname = "Microsoft YaHei", fontsize = 12, shape = "record" ];
     edge [fontname = "Microsoft YaHei", fontsize = 12 ];
     
         subgraph cluster_sl{
             label="IDP支持层";
             bgcolor="mintcream";
             node [shape="Mrecord", color="skyblue", style="filled"];
             network_mgr [label="网络管理器"];
             log_mgr [label="日志管理器"];
             module_mgr [label="模块管理器"];
             conf_mgr [label="配置管理器"];
             db_mgr [label="数据库管理器"];
         };
     
         subgraph cluster_md{
             label="可插拔模块集";
             bgcolor="lightcyan";
             node [color="chartreuse2", style="filled"];
             mod_dev [label="开发支持模块"];
             mod_dm [label="数据建模模块"];
             mod_dp [label="部署发布模块"];
         };
     
     mod_dp -> mod_dev [label="依赖..."];
     mod_dp -> mod_dm [label="依赖..."];
     mod_dp -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
     mod_dev -> mod_dm [label="依赖..."];
     mod_dev -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
     mod_dm -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
   }

如果你的graphviz能够对上面的片段能够输出全部的中文,那么你的graphviz就对中文支持很好了。如图:

中文识别不太好

如果使用Windows的可能node节点里面的文字会看不见,而Linux下的graphviz可以工作的很好。

在中文label的前面增加一个空白字符,要使用以下的:

.. graphviz::
   
   digraph idp_modules{
     fontname = "Microsoft YaHei";
     rankdir = TB;
     fontsize = 12;
     
     node [fontname = "Microsoft YaHei", fontsize = 12, shape = "record" ];
     edge [fontname = "Microsoft YaHei", fontsize = 12 ];
     
         subgraph cluster_sl{
             label=" IDP支持层";
             bgcolor="mintcream";
             node [shape="Mrecord", color="skyblue", style="filled"];
             network_mgr [label=" 网络管理器"];
             log_mgr [label=" 日志管理器"];
             module_mgr [label=" 模块管理器"];
             conf_mgr [label=" 配置管理器"];
             db_mgr [label=" 数据库管理器"];
         };
     
         subgraph cluster_md{
             label=" 可插拔模块集";
             bgcolor="lightcyan";
             node [color="chartreuse2", style="filled"];
             mod_dev [label=" 开发支持模块"];
             mod_dm [label=" 数据建模模块"];
             mod_dp [label=" 部署发布模块"];
         };
     
     mod_dp -> mod_dev [label="依赖..."];
     mod_dp -> mod_dm [label="依赖..."];
     mod_dp -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
     mod_dev -> mod_dm [label="依赖..."];
     mod_dev -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
     mod_dm -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
   }

修正后,可以更好的支持中文了。

修正后,中文识别的更好

参考

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: sphinx文档使用graphviz来画图 – https://www.chenyudong.com/archives/sphinx-docs-draw-graphic-with-graphviz.html

分类: 实用技巧

Sublime Text预览Graphviz图

经常用Sublime Text来进行画Graphviz图,如果每次用命令行来进行预览就麻烦了。这个时候当然要利用热心的网友提供的插件了。

下载安装Graphviz

Windows下载Graphviz,解压到一个路径下,然后把其bin目录加入到环境变量中。在cmd中dot -V来验证是否可以使用dot编译了。

Linux请使用系统自带的包管理程序来安装atp-get install graphviz,和Windows同样的验证方法。

自动安装插件不兼容Windows

打开Package Control来搜索了一下graphviz,还真的发现了一个插件GraphvizPreview。于是安装它,发现并不能用。使用快捷键win + shift + g 出现

Graphviz: Could not open PDF, only works for Mac… fork this repo for your OS!’

什么情况,插件只能支持Mac,不支持Windows。

上官方的github的issue搜索看了下,有人已经提交了Windows版本的修复,可是Package Control的版本还是很老的,没有把master的版本进行更新。所以通过release版本下载的是2014年4月份的v0.1.1版本,而Windows的修复版本是在2015年2月份。

所以只能通过下载master来进行手动安装。

手动安装步骤

第一步:下载https://github.com/munro/SublimeGraphvizPreview/archive/master.zip 第二步:打开Preferences -> Packages Settings -> Packages Control -> Settings User,来确认一下installed_packages没有GraphVizPreview。并且增加"remove_orphaned": false防止Sublime Text 把手动安装的插件包给删除了。

{
    "bootstrapped": true,
    "in_process_packages":
    [
    ],
    "installed_packages":
    [
        "EncodingHelper",
        "Package Control",
        "Theme - Spacegray"
    ],
    "remove_orphaned": false
}

第三步:打开Preferences -> Browse Packages...进入到Sublime Text的插件包下Packagas

第四步:解压zip文件到Packagas下,并且更改文件夹SublimeGraphvizPreview-masterGraphVizPreview

第五步:重启Sublime Text。

效果图预览

参考

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Sublime Text预览Graphviz图 – https://www.chenyudong.com/archives/sublime-text-graphviz-preview.html

分类: 实用技巧

git与svn 共舞

Git好用,但无奈历史原因,整个项目还得继续使用svn,但是又想使用Git的特性,所以尽力地去追求Git与svn的协作。

git svn命令

Git 中所有 Subversion 桥接命令的基础是 git svn 。所有的命令都从它开始。相关的命令数目不少,本文不过多介绍git svn的命令使用,只简单的说明一下最常用的几个,更多的知识参考书记pro git。

整理用户名与Email的映射

在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中。如果想让已有的信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 Git 作者的一个映射关系,因为Git是用邮箱来标识一个提交者的。建立一个叫做 user.txt 的文件,每行一条svn作者 = 作者昵称 <邮箱地址>,用如下格式表示映射关系

schacon = Scott Chacon <schacon@geemail.com>
selse = Someo Nelse <selse@geemail.com>

SVN代码的所有提交者的作者名可以通过以下命令获得:

svn log --xml | grep "^<author" | sort -u |  \
         awk -F '\<author\>' '{print $2}' | awk -F '\</author\>' '{print $1}' > user.txt

得到以下文本,然后根据以上的格式编辑作者的邮件信息等。

schacon
selse

这样我们的把有svn的提交记录的作者、邮箱user.txt都准备好了,接下来就克隆svn的地址。

克隆svn的trunk到本地

git svn clone http://example.com/path/to/project-x/trunk   \ 
              --authors-file=users.txt  project-x
  • http://example.com/path/to/project-x/trunk是svn的项目地址,这里用了trunk的目录。
  • --authors-file=users.txt是指明svn的作者信息,git要用到。
  • project-x是文件夹名字
  • --no-metadata参数可以不要svn的信息,适合迁移的时候使用,不适合git svn共用,见下面的小节

如果你的项目很大,这一步是非常缓慢的。因为Git会去把整个提交记录遍历过去,然后对svn的每次提交多做一个补丁,产生一个git提交。特别是到了84000的时候感觉是假死的情况,其实只要慢慢等待就可以了。

no-metadata去除不爽的git与svn的关联信息

使用这个参数,请认真阅读本片段。

如果没有使用 --no-metadata来克隆svn项目,那么如果输入git log将会看到一堆“没用的东西”:

commit 37efa680e8473b615de980fa935944215428a35a
Author: schacon <schacon@4c93b258-373f-11de-be05-5f7a86268029>
Date:   Sun May 3 00:12:22 2009 +0000

    fixed install - go to trunk

    git-svn-id: https://my-project.googlecode.com/svn/trunk@94 4c93b258-373f-11de-
    be05-5f7a86268029

如果使用--no-metadata参数,那么得到的提交信息是这样的:

commit 03a8785f44c8ea5cdb0e8834b7c8e6c469be2ff2
Author: Scott Chacon <schacon@geemail.com>
Date:   Sun May 3 00:12:22 2009 +0000

    fixed install - go to trunk

是不是变得清爽了呢?那么git-svn-id这个东西到底是做什么用的呢?

原来git-svn-id是记录git的提交与svn的提交的关联关系。如果没有这个,那么你只能在git上的提交,无法提交到svn。

建议:如果是你想向svn提交,那么不要使用这个参数。如果你只是迁移svn的历史记录到Git中,那么请开启这个参数。

设置Git的参数

之前我们把svn的代码拉取到本地来了,接下来要设置一下远程仓库的配置

cd project-x

# 设置远程仓库的url地址,如果你的是ssh的方式,又可能不一样了。
git remote add origin http://git.code.com/url/project-x.git

# 设置git的提交用户名和邮箱
# --global参数是全局设定,如果是想当前项目设置,那么去除这个参数
git config --global user.name youname
git config --global user.email email@email.com

从svn获取更新

刚刚我们git svn clone下载了svn的源码,但是如果有人提交了svn的代码,那么我们这个时候还要继续拉取svn的代码。

# 从svn拉取代码。这个事实拉取代码到本地,并没有合并到本地的分支来。
git svn fetch
git checkout master
git svn rebase
# svn update = git svn fetch + git svn rebase

这里检出master分支,去做一次拉取svn并合并代码的操作,理想的情况下使用其他的分支,不一定是master分支。 然后用rebase把提交记录应用到分支上,构成一个线性的提价记录。

我有好多个分支怎么办?

我们一开始都默认值选择了一个分支,我如果想获取多个分支怎么处理呢?

向svn提交代码

假设你在分支feature分支上做开发,没有提交到master分支上。那么有两种方法提交到svn。

  • 保留feature分支所有的提交记录
  • 压缩feature分支的提交记录,变成一个提交记录。

保留个人的提交记录

svn和git分支概念不一样,你要把git的提交推动到svn的代码库中也非常的简单。只需要使用rebase命令到跟踪svn的那个分支上就可以了。然后执行dcommit提交到svn服务器。

git checkout master  # 先拉取svn的代码
git svn rebase
git checkout feature123  # rebase 到master分支上
git rebase master
git checkout master
git merge feature123   # 使用fast-forward合并,让master指针指向最新的提交
git svn dcommit        # 推送到svn服务器

压缩个人的提交记录

和上一种提交没有什么区别。唯一的区别就是在如果你拉取了一个分支feature123,并且没有人在master上面做任何的提交,那么可以使用merge来进行fast-forward快速合并(这样子是不会压缩为一个提交记录的)。然后提交到服务器。

另外一种情况是,他人在svn的分支上提交代码了,你也在master的基础上提交代码了。这个时候git没办法进行fast-forward快速合并,只能进行merge 三方合并。这个时候会把之前的提交记录变成一个提交。然后推送到服务器上。

git checkout master  # 先拉取svn的代码
git svn rebase
git merge feature123     # 这里可能是fast-forward合并,也可能是三方合并。
git svn dcommit          # 推送到svn服务器

使用心得

git与svn协同,这种方式用的比较麻烦,又要使用svn又要使用git。只是有这种需求的人,都是项目还在svn管理。建议将整个项目使用git提交信息,但是最后推送到svn的tag目录下。

参考

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: git与svn 共舞 – https://www.chenyudong.com/archives/git-and-svn-collaboration.html

分类: 实用技巧

你真的知道字节的换算单位关系么?

学计算机编程的都知道字节(byte)和位(bit)的概念,但是对于KB、kB、MB、MiB他们的之间的关系你真的懂么?你确信你没有搞错?

我们都知道

1 byte = 8 bits (1字节 = 8比特)

但是你知道1KB = ?B , 1kB = ?B么?KiB又是什么吗?

在此,我先列一个表格,看看里面的信息。

这里面列出了很多的单位,但是因为这些不同的单位给我们带来了许多的困挠。

硬盘容量缩水现象

对于容量的概念,有十进制和二进制两种计量方法。最常见的是硬盘、内存容量“缩水”的情况。对于计算机来说1M = 1024KB,但是厂家为了方便计算与生产,是以1M = 1000K字节计算容量,但是计算机主板、操作系统是按1024的关系来计算的。于是就出现了500G的硬盘,在实际电脑上显示才465G的情况。以下是计算公式:

500G 
= 500 × 1000 MB 
= 500 × 1000 × 1000 kB 
= 500 × 1000 × 1000 × 1000 B
= 500 × 109 B 
= 500 × 109 / 10243 GiB 
= 465 GiB

历史情况

出现这样的问题是有原因的。以前大多数情况下,工业界喜欢使用和国际单位制(International System of Units , 缩写SI)定义的kilo, mega, giga等前缀保持一致,他们都是1000进制的关系。但是在计算机界中,都是以2进制定义数据和信息的,许多的计算都是1024的关系。两者的不一致给人们造成了许多的困挠。

1998年12月,在电工技术领先的国际组织——国际电工委员会(International Electrotechnical Commission,IEC)制定了规范,使用新的一系列二进制乘数词头(binary prefixes)来无歧义地表示1024底数,他们有kibi、mebi、mebi、tebi、pebi、exbi,可以参考上面的表格。

此外,美国国家标准技术研究所(National Institute of Standards and Technology, NIST )规定的国际单位制前缀只能在十进制意义上使用,这个和SI是一致的:

kilobyte 表示 1,000 bytes megabyte 表示 1,000,000 bytes

二进制上使用新的术语

kibibyte (缩写 KiB) 表示 1024 bytes mebibyte (缩写 MiB) 表示 1,048,576 bytes gibibyte (缩写 GiB) 表示 1,073,741,824 bytes …

具体的数据可以参考上面的表格。

现在的使用情况

可以看到现在在做宣传的时候,硬盘、U盘上的数据都是使用MB、GB来表示1000的进制关系。但是在windows系统中,使用MB、GB等来表示1024的进制关系。就比如4GB的优盘,在windows上显示为3.8GB的容量。

在Linux系统中,已经开始使用KiB、MiB等由IEC制定的二进制前缀来表示数据了。还有一些其他的程序也开始使用IEC的标准。

建议

推荐大家使用IEC制定的标准来表示2进制前缀,避免不必要的麻烦。使用的场景可以是程序,论文,科普文章等地方。不要为了省事,引起歧义。

IEC的制定的二进制前缀缩写有KiB、 MiB 、GiB 、TiB 、PiB 、EiB 、ZiB 、YiB 。希望大家多多使用。

参考资料

  1. Binary prefix http://en.wikipedia.org/wiki/Binary_prefix
  2. Prefixes for binary multiples http://physics.nist.gov/cuu/Units/binary.html

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 你真的知道字节的换算单位关系么? – https://www.chenyudong.com/archives/bianry-prefixs.html

分类: 实用技巧

word数学公式左对齐

用Word写数学公式或者左括号总结的时候,经常会向Word中插入公式。如果你是需要更专业的排版,你可以使用MathType、Latex来进行编写公式,但是如果你只是简单的时候公式或者左括号,那么Word自带的公式足够你用了。

Word自带的公式内部默认是居中对齐的,但是整个公式可以在文章的左侧,如下显示:

公式内部居中显示

公式内部居中显示,但是整个公式可以在文章的左侧。红色显示为距离左侧的空隙

我们如果要让公式左对齐,那么我们在想要左对齐的同一级的左侧输入shift + 7/&。如下图:

输入shift + & 可以左对齐

输入shift + & 可以左对齐

看到“图像法”三个字的左侧有个光标了吗?在这些地方输入shift + 7/&可以让公式坐对齐。其中7/&就是键盘Y、U上方的那个7的按键。

为什么这样可以让公式左对齐呢?因为&是Word公式中的制表符,类似于编程中的文本Tab键一样的效果,可以让代码、公式对齐。

后话,如果你只是使用Word公式中的左括号,那么我推荐你使用思维导图相关的软件,思维导图可以达到一个更好的效果,如下是一张思维导图:

网上找来的一张思维导图

网上找来的一张思维导图

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: word数学公式左对齐 – https://www.chenyudong.com/archives/word-math-formulas-left-align.html

分类: 实用技巧

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑