作者归档:Kyle Wang

搜狗输入法输入希腊字母

右键 > 设置属性 > 高级 > 自定义短语设置 > 直接编辑配置文件,将如下内容保存,然后就可以输入希腊字母了。

alpha,4=α
alpha,5=Α
beta,4=β
beta,5=Β
gamma,4=γ
gamma,5=Γ
delta,4=δ
delta,5=Δ
epsilon,4=ε
epsilon,5=Ε
zeta,4=ζ
zeta,5=Ζ
eta,4=η
eta,5=Η
theta,4=θ
theta,5=Θ
iota,4=ι
iota,5=Ι
kappa,4=κ
kappa,5=Κ
lambda,4=λ
lambda,5=Λ
mu,4=μ
mu,5=Μ
nu,4=ν
nu,5=Ν
xi,4=ξ
xi,5=Ξ
omicron,4=ο
omicron,5=Ο
pi,4=π
pi,5=Π
rho,4=ρ
rho,5=Ρ
sigma,4=σ
sigma,5=Σ
tau,4=τ
tau,5=Τ
upsilon,4=υ
upsilon,5=Υ
phi,4=φ
phi,5=Φ
chi,4=χ
chi,5=Χ
psi,4=ψ
psi,5=Ψ
omega,4=ω
omega,5=Ω

WordPress中使用CSS高亮HTML的code标签

Markdown中的Code标签

在Markdown中,用一对`来表示html中的code标签。例如`this is a code`会被翻译成<code>this is a code</code>。而通过查看WordPress中的很多主题,发现很多主题把code标签取消了高亮显示。

解决

WordPress对应的版本是4.1,其他版本操作可能有出入,进入后台后:外观 > 编辑,然后在新出现的编辑窗口加入如下代码并保存,位置不限。设置好后,就会拥有和本站一样的代码高亮效果。需要注意的是,若以后对主题进行升级,还需要再次重复这些操作。

/*样式只对`class=entry-content`的`code`标签有效,即正文部分*/
.entry-content code {
border:1px solid #EAEAEA;
background-color:#F8F8F8;
padding:2px;
margin:2px;
/* 圆角效果 */
border-radius:4px;
/* 不自动换行 */
white-space:nowrap;
}

BOM文件在Java中的读取问题

BOM问题

最近在开发一个项目,需要导入文本文件。用Java在导入的过程中,使用了InputStreamReader(InputStream,'utf-8')来读取,没有问题。

但是,导入的数据,在用HashMap的时候出现了问题,即文件的第一行数据在HashMap中表现不正常。出现的问题是,明明文字看起来是一样的,但是在HashMap中却不能识别,即两个String,表面看起来一样,但.hashCode()返回的结果不同。这时候我想到了会不会BOM影响的,结果真的是。

具体表现为我用上面这种方法读取的的文本,第一行带有EF BB BF。那么好了,问题就到了如何正确的读取BOM文件。

EmEditor查看16进制

一直在用EmEditor,EmEditor查看2进制(即16进制)的方法是:File文件 > Reload重新载入 > Binary (Hex View)二进制(十六进制)视图

Java解决BOM问题

使用一个自定义的类UnicodeReader,这个类的来源是http://koti.mbnet.fi/akini/java/unicodereader/

FileInputStream fis = new FileInputStream(file);
UnicodeReader ur = new UnicodeReader(fis, "utf-8");
BufferedReader br = new BufferedReader(ur);

这个类的代码如下

/**
 * 
 * 
 version: 1.1 / 2007-01-25
 - changed BOM recognition ordering (longer boms first)

 Original pseudocode   : Thomas Weidenfeller
 Implementation tweaked: Aki Nieminen

 http://www.unicode.org/unicode/faq/utf_bom.html
 BOMs:
 00 00 FE FF    = UTF-32, big-endian
 FF FE 00 00    = UTF-32, little-endian
 EF BB BF       = UTF-8,
 FE FF          = UTF-16, big-endian
 FF FE          = UTF-16, little-endian

 Win2k Notepad:
 Unicode format = UTF-16LE
 ***/

import java.io.*;

/**
 * Generic unicode textreader, which will use BOM mark to identify the encoding
 * to be used. If BOM is not found then use a given default or system encoding.
 */
public class UnicodeReader extends Reader {
	PushbackInputStream internalIn;
	InputStreamReader internalIn2 = null;
	String defaultEnc;

	private static final int BOM_SIZE = 4;

	/**
	 * 
	 * @param in
	 *            inputstream to be read
	 * @param defaultEnc
	 *            default encoding if stream does not have BOM marker. Give NULL
	 *            to use system-level default.
	 */
	UnicodeReader(InputStream in, String defaultEnc) {
		internalIn = new PushbackInputStream(in, BOM_SIZE);
		this.defaultEnc = defaultEnc;
	}

	public String getDefaultEncoding() {
		return defaultEnc;
	}

	/**
	 * Get stream encoding or NULL if stream is uninitialized. Call init() or
	 * read() method to initialize it.
	 */
	public String getEncoding() {
		if (internalIn2 == null)
			return null;
		return internalIn2.getEncoding();
	}

	/**
	 * Read-ahead four bytes and check for BOM marks. Extra bytes are unread
	 * back to the stream, only BOM bytes are skipped.
	 */
	protected void init() throws IOException {
		if (internalIn2 != null)
			return;

		String encoding;
		byte bom[] = new byte[BOM_SIZE];
		int n, unread;
		n = internalIn.read(bom, 0, bom.length);

		if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00)
				&& (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) {
			encoding = "UTF-32BE";
			unread = n - 4;
		} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)
				&& (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) {
			encoding = "UTF-32LE";
			unread = n - 4;
		} else if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB)
				&& (bom[2] == (byte) 0xBF)) {
			encoding = "UTF-8";
			unread = n - 3;
		} else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {
			encoding = "UTF-16BE";
			unread = n - 2;
		} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {
			encoding = "UTF-16LE";
			unread = n - 2;
		} else {
			// Unicode BOM mark not found, unread all bytes
			encoding = defaultEnc;
			unread = n;
		}
		// System.out.println("read=" + n + ", unread=" + unread);

		if (unread > 0)
			internalIn.unread(bom, (n - unread), unread);

		// Use given encoding
		if (encoding == null) {
			internalIn2 = new InputStreamReader(internalIn);
		} else {
			internalIn2 = new InputStreamReader(internalIn, encoding);
		}
	}

	public void close() throws IOException {
		init();
		internalIn2.close();
	}

	public int read(char[] cbuf, int off, int len) throws IOException {
		init();
		return internalIn2.read(cbuf, off, len);
	}

}

Pajek中文乱码问题

最近一直在使用Sublime Text,但是处理好的数据导入Pajek后中文变成乱码。最后没有在Sublime Text上找到解决方案,而是通过如下方法解决的:
将Sublime Text中的文本复制,打开记事本(Ctrl+R然后输入notepad回车),粘贴文本并保存,在保存的时候编码选择ANSI。

影响因子怎么查?

The impact factor (IF) of an academic journal is a measure reflecting the average number of citations to recent articles published in that journal. It is frequently used as a proxy for the relative importance of a journal within its field, with journals with higher impact factors deemed to be more important than those with lower ones. The impact factor was devised by Eugene Garfield, the founder of the Institute for Scientific Information. Impact factors are calculated yearly starting from 1975 for those journals that are indexed in the Journal Citation Reports.

上面是维基百科对于影响因子这个词的解释。影响因子是由加菲尔德设计的一种测量指标。加菲尔德本人是美国科技信息研究所的创始人。每年的影响因子都会发表在Journal Citation Reports中,这个报告可以通过WebofKnowledge进行访问。

2014-12-14_234439

左侧可以设置具体要查看哪个引文体系中的JCR,这里包括Science Edition即SCI和Social Science Edition即SSCI。

右侧可以选择以什么方式进行浏览,默认是按照主题分类。

在接下来的页面中可以选择具体的主题和排序方式,比如情报学选择Information Science and Library Science。排序方式选择Impact Factor,这样就会按照影响因子从高到低进行排序。

2014-12-14_234749

Win7 64位 IIS7.5配置PHP和MYSQL出现的问题及解决方法

无法载入mysql扩展,即无法连接MySQL

  • 把PHP文件夹中的libmysql.dll和libmcrypt.dll复制到C:/windows目录下,请注意,很多教程写的都是复制到C:/windows/system32,但是那些都是针对32位系统,而非64位Windows 7

全都设置好出现如下错误HTTP 错误 404.17 – Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。

  • 解决方法:打开应用程序池,选中后点右键–高级设置,将“启动32位应用程序”改为“true”

Shell Sort希尔排序Java实现

/**	希尔排序Java实现
 * 	by puladiao
 * 	http://blog.verypod.com
 */
 
import java.util.Random;

class ShellSort {
	int[] arr;

	public ShellSort(int num) {
		arr = new int[num];
	}
	
	// 将arr数组初始化为随机数数组
	public void randomArray() {
		Random rd = new Random();
		for (int i = 0; i < arr.length; i++) {
			arr[i] = rd.nextInt(arr.length * 2);
		}
	}

	// 将arr数组初始化为倒序数组
	public void reverseArray() {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = arr.length - i;
		}
	}

	// 打印数组
	public void display() {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println("");
	}

	// 希尔排序
	public void shellSort() {
		int increment = 1;
		while (increment < arr.length) {
			increment = increment * 3 + 1;
		}
		increment = (increment - 1) / 3;
		while (increment >= 1) {
			for (int i = 0; i < increment; i++) {
				insertSort(i, increment);
			}
			display();
			increment = (increment - 1) / 3;
		}
	}
	
	// 插入排序,该方法会被希尔排序调用,该方法也可以直接使用,使用方法为 insertSort(0,1);
	// startIndex是排序起始索引,increment为增量,即元素之间的空间
	public void insertSort(int startIndex, int increment) {
		for (int i = startIndex + increment; i < arr.length; i += increment) {
			int j = i - increment;
			// System.out.println(i);
			int temp = arr[i];
			while (j >= startIndex && temp < arr[j]) {
				arr[j + increment] = arr[j];
				j -= increment;
			}
			arr[j + increment] = temp;
		}
	}
}

public class ShellSortApp {
	public static void main(String[] args) {
		ShellSort ss = new ShellSort(100);
		ss.reverseArray();
		ss.display();
		ss.shellSort();
		ss.display();
	}
}

Java数据结构和算法(第二版)第六章 编程作业

/**	Java数据结构和算法(第二版)第六章 编程作业
/**	Programming Projects in Chapter 6, Data Structure & Algorithms in Java 2nd Edition
 * 	by puladiao
 * 	http://blog.verypod.com
 */
// 6.3 递归解决N次方问题
public class Power {
	public static void main(String[] args) {
		System.out.println(doPower(2, 4));
	}

	public static long doPower(long base, long power) {
		long result = 1;
		if (power == 1) {
			result = base;
		} else {
			long factor = 1;
			if (power % 2 == 1) {
				factor = base;
			}
			power = power / 2;
			result = doPower(base, power) * doPower(base, power) * factor;
		}
		return result;
	}
}

// 6.4 递归解决背包问题
public class Knapsack {

	private static int[] arr = new int[] { 5, 6, 7, 8, 11 };

	public static void main(String[] args) {
		System.out.println(doKnapsack(arr.length-1, 20));
	}

	public static boolean doKnapsack(int n, int sum) {
		if (sum == 0) {
			return true;
		} 
		if (sum < 0 || (sum > 0 && n < 0)) {
			return false;
		} 
		if (doKnapsack(n - 1, sum - arr[n])) {
			System.out.println(arr[n]);
			return true;
		}
		System.out.printf("%d %d\n", arr[n],sum);
		return doKnapsack(n-1,sum);
	}
}

// 6.5 递归解决组合问题
public class Picker {
	static char[] arr = new char[] { 'A', 'B', 'C', 'D', 'E' };

	public static void main(String[] args) {
		Picker p = new Picker();
		p.pick(0, 5, 3, "");
	}

	// s为当前index,t为总数,n为组合数
	public void pick(int s,int t,int n,String str){
		if(n==1){
			for(int i=s;i<t+s;i++){
			System.out.println(str+arr[i]);
			}
		} else if(s<5) {
			//System.out.println(s);
			pick(s+1,t-1,n-1,str+arr[s]);
			pick(s+1,t-1,n,str);
		}
	}
}

Java解决Hanoi Tower(河内塔)问题

/**	Java解决Hanoi Tower(河内塔)问题
 * 	by puladiao
 * 	http://blog.verypod.com
 */
public class HanoiTower {

	public static void main(String[] args) {
		HanoiTower ht = new HanoiTower();
		ht.doMove(3, "a", "b", "c");
	}

	public void doMove(int number, String f, String i, String t) {
		if (number == 1) {
			System.out.printf("Move 1 from %s to %s\n", f, t);
		} else {
			doMove(number-1,f,t,i);
			System.out.printf("Move %d from %s to %s\n", number,f,t);
			doMove(number-1,i,f,t);
		}
	}
}