sphinx安装问题

领导给安排的任务是修改数据库的帮助手册。从仓库下载了代码以后就一直在倒腾环境的安装。生成文档的工具是Python
环境下的Sphinx。就是这个Sphinx,昨天倒腾了一天都没装上,郁闷。

一开始安装Python3,到是一路顺畅,没有什么问题。但是在使用Sphinx的时候就报错了。原因是之前文档的创建环境是
Python2,Python3与Python2是不兼容的,在编码问题上报错。

遂改之,卸载Python3,安装Python2.问题来了。

安装完Python2之后,使用 easy_install sphinx
指令来安装sphinx。可是死活装不上,换源和使用pip都不行,苦逼。报这样一个错误:

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 4-5: ordi al not in range(128)

意思就是Python执行环境的默认编码是ascii码,Python调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内
,就会抛出异常(ordinal not in range(128))。

看了一下报错的位置,都是在安装sphinx之前安装的所需的依赖出了问题,都是一堆
.py文件。某些函数读取字符流的时候出了问题。这可咋整。。。我也没法知道他读的流是啥啊。

后来想到了一个解决办法,那就是修改Python编码环境为UTF-8,问题可能就迎刃而解了。

首先所有修改的动作都是要创建一个叫 sitecustomize.py的文件,为什么要创建这个文件呢,是因为python在启动的时候会
去load的这个文件,所以你如果要修改一些启动的变量就可以把操作写在这个文件。

修改默认字符编码的代码很简单就2行:

1
2
3
4
5
# sitecustomize.py # this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('utf-8')

阅读全文 »

代码规范

最近写的代码提上去让领导评审,回来给我的建议都是逻辑虽然正确,但代码十分凌乱,命名不规范,看着很不舒服。
所以决定总结一些规范,以后写代码要注意了~

  • 命名

    • 变量,方法,类命名要表义,严格禁止使用 name1, name2 等命名

    • 避免使用数字,但可用 2 代替 to,用 4 代替 for 等,如 go2Clean

    1. 方法

      方法名第一个单词小写,以后每个单词首字母大写。

    2. 类、接口

      所有单词首字母都大写。使用能确切反应该类、接口含义、功能等的词。一般采用名词

    3. 字段、常量

      成员变量、局部变量第一个单词小写,如 userName, instance。

      常量全部大写,在词与词之前用下划线连接,如 MAX_NUMBER。

      代码中禁止使用硬编码,把一些数字或字符串定义成常用量。

  • 注释

    1. 成员变量注释

      1
      2
      3
      4
      5
      6
      7
      8
      /** 成员变量注释 */
      protected Object mObject0;
      /**
      * 对于注释多于一行的,采用这种方式来
      * 定义该变量
      */
      private Object mObject4;
    2. 方法描述

      1
      2
      3
      4
      5
      6
      7
      8
      /**
      * 方法描述...
      *
      * @param param1 参数1描述...
      * @param param2 参数2描述...
      * @param paramXX 参数XX描述... (注意:请将参数、描述都对齐)
      */
      public void doSomething(int param1, float param2, String paramXX) {}

    3.方法内部注释

    可以使用 /注释/ 进行注释,也可以使用 //注释 进行注释,最好所有代码保持一致。但多行连续注释不应该使用后者。

    1
    2
    3
    4
    if (a == 2) {
    return TRUE; /* special case */
    } else {
    return isprime(a); /* works only for odd a */}

阅读全文 »

常用快捷键总结

  • ECLIPSE:

    查看代码

    Ctrl+O 搜索当前类变量及方法

    Ctrl+H 打开搜索对话框

    Ctrl+Shift+G 搜索选中变量或方法的引用

    Ctrl+D 删除当前行

    Ctrl+Shift+F 格式化代码

    F4 查看当前类继承结构

    Ctrl+Shift+R 搜索类,文件等资源

    Ctrl+Shift+O 倒包

    Ctrl + 1 :快速修复

    Ctrl + Shift + /(小键盘) :收起左侧导航树或代码(依据当前焦点而定)

    Ctrl + *(小键盘) :展开代码

    Shift + Enter :在当前行下方插入一行空行

    Alt + 向上键 :当前行与上方行交换

    Alt + 向下键 :当前行与下方行交换

    Shift + Alt + R : 重命名

    Shift + Alt + L (表达式末尾):为表达式赋值为局部变量

    Shift + 向上键/向下键 : 选中此行

    Shift + Alt + M : 提取选中代码为一个方法

    Ctrl + . : 下一个错误

    阅读全文 »

Markdown

Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。

即:Markdown 就是一种类似于Html的标记语言,比Html更简单,通过转换之后使普通文本内容具有一定的格式。

常用语法

makedown 语法


代码

```
public void main(String args[]){
System.out.print(“Hello World”);
}
```

Use the `printf()` function.


阅读全文 »

notify 问题

今天遇到了这么个情况:
有线程若干,我需要他们按顺序执行。
代码大概长这样:

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
class SyncTag {
public int threadNO;
public SyncTag() {
threadNO = 0;
}
}
class ThreadA extend Thread{
SyncTag syncTag;
int scriptNO;
ThreadA(SyncTag syncTag,int scriptNO){
this.syncTag=syncTag;
this.scriptNO=scriptNO;
}
public void Run(){
synchronized (syncTag) {
if (syncTag.threadNO != scriptNO) {
try {
syncTag.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
dosomething();
syncTag.threadNO++;
syncTag.notifyAll();
}
}
}
public class Test{
public static void main(String args[]){
SyncTag syncTag=new SyncTag();
for(int i=0;i<10;++i){
ThreadA t=new ThreadA(syncTag,i);
t.start();
}
}
}

阅读全文 »

java同步锁锁什么

在今天的苦逼遍代码的过程中,有这样一个问题困扰了我半天:
情景是这样的:有N个线程ThreadTest,在类A中被创建。构造ThreadTest,向其传入A中的成员变量 Integer i;
ThreadTest中的成员变量 j 被赋值为 i
在 ThreadTest 的 run 方法中,我 加入了 synchronized块,对象锁正是 j ;
在synchronized块中,我改变了这个 j 的值。代码大概是这样的:

1
2
3
4
5
6
7
8
9
Integer j;
ThreadTest(Integer i){
j=i;
}
public void run() {
synchronized(j){
j++;
}
}

阅读全文 »