Mavericks apache2 issue after Server 3 removed

After remove Server.app, my apache2 on Mac OS X 10.9.2 Mavericks couldn’t start normally while everything looks OK. After carefully studied the log file through Console.app and looked into the content of /usr/sbin/apachectl, I realized that the starting process of apache in OS X is quite different than that in Linux: it uses launchctl!

So, I searched the apache launchctl config file:/System/Library/LaunchDaemons/org.apache.httpd.plist. Aha! it said:

1
2
3
4
5
6
7
8
9
10
11
12
<key>SERVER_INSTALL_PATH_PREFIX</key>
<string>/Applications/Server.app/Contents/ServerRoot</string>
......
and
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
<string>-f</string>
<string>/Library/Server/Web/Config/apache2/httpd_server_app.conf</string>
</array>

The key SERVER_INSTALL_PATH_PREFIX and ProgramArguments were modified by Server.app aparently. Just recover them to /usr and /etc/apache2/http.conf, there, it works again!

testcode

C code rendered by system:

1
2
3
4
5
6
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello World");
}

C code rendered by vim:

/* Hello World program */
#include<stdio.h>
main()
{
     printf("Hello World");
}

Hexo建站并自定义步骤

前段时间稍微折腾了一下 Octopress,被其自由、强大的功能能所吸引,毅然决然地将博客搬到了 Octopress+Github 上。但随着博客数量的增多,其速度慢的弊端逐渐显现,这时候,基于nodejshexo闪电般地出现了,其速度简直是 blazingly fast。于是,不出所料地,又搬到了 hexo 上。

搭建 hexo 的博客也很简单,从 Octopress 的内容迁移也只需把当时 post 下面的 .md 文件移到 source/_post 下面即可。但功能上的完善还是需要一定的技巧的。

  • 安装 hexo

    首先,要有 node。Mac 可以 brew install node,Linux 则可以方便地 apt-get。安装好 node 以后,npm install hexo -g,搞定!

  • 创建并配置 hexo

    运行 hexo init myblog,然后修改其下的_config.yml 文件,自定义博客名等内容。

  • 启用 MathJax 支持数学公式编写

    1. 首先安装 hexo-math 插件
      npm install hexo-math --save
    2. 然后初始化
      hexo math install
    3. 编辑_config.yml:
1
2
plugins:
- hexo-math
  • 启用本地图片支持

    npm install hexo-local-image --save,然后添加到_config.yml。

  • 使用 Vim 高亮代码

    npm install vim-tag-vimhighlight,并添加到_config.yml。然后在代码前后加上前缀<hexoescape>0</hexoescape>. 效果如下:

;*****************************************************
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
;*****************************************************
begin
  gsn_define_colormap(wks,"rainbow")
  gsn_reverse_colormap(wks)
  type                      = "eps"
  type@wkColorModel         ="cmyk"
  wks                       = gsn_open_wks(type,"NPP")

  res@cnLevelSelectionMode  = "ExplicitLevels"
  res@cnLevelSelectionMode  = "ManualLevels"
  res@cnMinLevelValF        = 0.0001
  
  startd = 20110101
  ssdate = yyyymmdd_to_yyyyddd(startd)
  do idate = 0,180
    date = yyyyddd_to_yyyymmdd(ssdate+idate)
    print("Now idate and date:  "+ idate +" ; "+ date )
     do hr = 0,23
       shr = sprinti("%0.2i",hr)
       filename = date+shr+".nc"
       ... ...
  • 支持 RSS
    npm install hexo-generator-feed --save
    _config.yml plugins

  • 支持 SiteMap
    npm install hexo-generator-sitemap --save
    _config.yml plugins

  • 去掉 tag,只保留 tagcloud
    拷贝默认的 landscape 为 myls,编辑 themes/myls/_config.yml 去掉 其中的 tag,保留 tagcloud.

  • 修改默认模板,加入 categories
    为了生成 post 时默认生成 categories 配置项. 在 scaffolds/post.md 中,添加一行 categories:。并可在内容中添加任何想加入到模板中的内容,如{vimhl} 和{!--more--},同理可应用在 page.md 和 photo.md。

  • 修改模板图片 自行修改 themes/myls/source/css/images/banner.jpg,使题图和主题配合更好;同时可对应修改themes/myls/source/css/_variables.stylbanner-height,以更好地匹配。

  • 添加 icon 小图标 在themes/myls/layout/_partial/head.ejs里将 <link href="<%- config.root %>favicon.png" rel="icon">替换为<link href="<%- config.root %>favicon.ico" rel="icon" type="image/x-ico">。将 favicon.ico 图标文件放在 source 目录下。

  • 添加微博秀 到新浪微博开放平台 生成微博秀代码,将生成的代码保存为 weibo.ejs 到 themes/myls/layout/_widget 目录中,并在 themes/myls 目录下的_config.yml 中的 widget 栏添加 - weibo 即可。

  • 添加百度 share
    添加“百度分享”到百度分享获得代码,在 themes/myls/layout/_partial/article.ejs 中,将 &lt;%-partial(&#39;post/share&#39;)%&gt; 删掉,替换为 百度分享的代码

  • 添加多说和 disqus
    Disqus 和多说在国内外各有用处,因此最好都加上。修改 themes/myls/layout/_partial/article.ejs ,添加 一部分代码 即可

  • 安装百度统计

    1. 百度统计 获取统计代码

    2. 配置.

3.  add configuration. 
vim themes/myls/_config.yml
baidu_analytics: true

使用 Sweave 给 R 写文档的模板

以前一直傻傻的 用 \begin{verbatim} 或者 listing 的方式在文章中加 R 代码
然后再手工 include 结果的方式,现在知道了 Sweave,终于可以结束这段傻
不楞登的过程直接自动化了。

\documentclass[a4paper, 12pt]{article}
\begin{document}
\title{emacs \& Sweave}
\author{Wang Jun}
\maketitle

\section{Now begins R Sweave test}

First Save this file as example.Rnw

Then run Sweave("example") in R

Compile the generated tex file example.tex with pdflatex or xelatex (I prefer XeLeTeX)

Here you got the Sweaved R script

%%%%%%%%%%%%% Here begins the Main Content

This is just a simple example

<<>>=
library(maps)
library(mapdata)
###map("china")
x=rnorm(100)
y=rnorm(100)
lm(y~x)
@

Now that you have tried Sweave, how does it perform?

\end{document}

PS: 当然,现在流行的 R 文档写作方式应该是 knitr + LyX的方式,将另文描述了。

我的VIM 控制文件: vimrc

每次新装一个系统总是要到处找 VIMRC 的配置,现保存于此也好有个备份

set mouse=a "启用鼠标
"双引号开始的行为注释行,下同
"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
set backspace=indent,eol,start
set showcmd
"显示行号
set number
"检测文件的类型
filetype on
"记录历史的行数
set history=1000
"背景使用黑色
"set background=dark
"语法高亮度显示
syntax on
"下面两行在进行编写代码时,在格式对起上很有用;
"第一行,vim使用自动对齐,也就是把当前行的对起格式应用到下一行;
"第二行,依据上面的对起格式,智能的选择对齐方式,对于类似C语言编
"写上很有用
set autoindent
set smartindent
"第一行设置tab键为4个空格,第二行设置当行之间交错时使用2个空格
set expandtab ""# 使用space代替tab.
set tabstop=4 ""# 四个空格。
set shiftwidth=2 ""# 自动缩进的宽度。
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"去除vim的GUI版本中的toolbar
"set guioptions-=T
"当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set vb t_vb=
"在编辑过程中,在右下角显示光标位置的状态行
set ruler
"默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示
set nohls
"查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
"个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch
"修改一个文件后,自动进行备份,备份的文件名为原文件名加“~“后缀

"NCL的语法高亮等
    au BufRead,BufNewFile *.ncl set filetype=ncl
    auSyntax newlang source $VIM/ncl.vim
"Show autocomplete menus.
set complete-=k complete+=k " Add dictionary search (as per dictionary option)
set wildmode=list:full
set wildmenu
au BufRead,BufNewFile *.ncl set dictionary=~/.vim/dictionary/ncl.dic

 " When editing a file, always jump to the last known cursor position.
 " Don't do it when the position is invalid or when inside an event handler
 " (happens when dropping a file on gvim).
 " 记住上次的编辑位置
 autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

 " 打开文件时,按照 viminfo 保存的上次关闭时的光标位置重新设置光标
 au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

"中文的猜测顺序
set fileencodings=utf-8,gb2312,gbk,gb18030 
set termencoding=utf-8
"set encoding=prc

NCL批量处理数据及作图

科研中不免要与大量的数据打交道,NCL 中倒也内置了比较好用的 do 循环等,可以方便地批量处理数据,但 NCL 内置的循环批量画图就比较麻烦一些,毕竟涉及 workspace 的 open 与 close(当然,如果画图到 pdf 文件也无所谓,pdf 多页支持还是很好的)。

结合 shell 脚本与 NCL 的命令行参数接收变量赋值的特性,可以方便地批量画图。

例如,若要批量处理 2000 年到 2010 年十年的逐日资料并把每天的日均气温画出来,那么可以写一个如下的 NCL 脚本 [runwithargs.ncl] 以及相应的 Bash 脚本:

NCL:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

begin
   ;;date is a variable from command line args
   print("The current date is "+sdate)
   ;; Following is other code

end

其中,sdate 这个变量在 NCL 中并没有赋值,而是要在运行时指定。

上面的 NCL 脚本应配合以下的 shell 脚本 [runnclargs.sh] 运行:

#!/bin/bash
basedate="20000101"
for idate in `seq -w 1 3653`
do
    thedate=`date +%Y%m%d -d "$basedate + $idate"`
    ncl runwithargs.ncl "sdate=$thedate" |grep date
done

如此,只需通过运行 ./runnclargs.sh, 10 年的数据就处理完了。:-0

一个Fortran 读文件并带参数的模板

Fortran 作为科学计算常用语言,自然免不了各种文件读写的操作,以下是一个简单的模板

参见 gist bdb32fffcd08b9ab21ea:

或者,直接参见下面:

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
program gaugeselect
implicit none
character(len=80):: filename
character(len=80):: arg1 ,arg2
character(len=80):: buff
logical:: flag=.false.
!================================================================!
call getarg(1,arg1)
call getarg(2,arg2)
if (len_trim(arg1)==0 )then
print *,"please specify the argument of running file!!"
print *,"usage: ./gaugeselect filename"
stop
else
filename=trim(arg1)
inquire(file=trim(filename),exist=flag)
if(flag)then
open(5,file=trim(filename))
do while(.true.)
read(5,*,end=100)buff
enddo
100 close(5)
print *,'file:',trim(filename), "processed"
else
print *,"oops........"
print *,'can NOT open file:',trim(filename)
print *," "
endif
endif
end program gaugeselect

Ubuntu UFW Firewall

用一下几条命令安装并开启 ufw:

1
2
3
sudo apt-get install ufw
sudo ufw enable
sudo ufw default reject

这样就安装开启了 UFW 防火墙,并默认拒绝一切外来连接请求(reject),显示为未连接,为安全起见,最好将 reject 改为deny

为开启 SSH 和 WWW 服务,运行:

1
2
sudo ufw allow ssh/tcp
sudo ufw allow www/tcp

同时使用以下命令查询状态:

1
sudo ufw status

一切为了太阳系的荣耀--Xshell的Solarized配色

Xshell 是 Windows 里面为数不多的免费且好用的 SSH 客户端,不过默认的配色实在是太难看了,真的是太难看了,如果不改掉实在是不能用。而且和 Sublime Text、TextMate、Emacs、VIM 等编辑神器以及 iTerm2 等深受好评的软件不一样,网上现成的 XShell 配色也着实少的可怜。冇办法,只好自己动手了。

上面提到的编辑器,真的有很多经典的配色,如 Monokai、Dawn、Eiffel、Tommorow、Twilight 等,但是我最爱的,还是那经典的 Solarized。关于 Solarized,已经有很多 介绍 ,其官网在 这里 ,Github 的主页在 这里,上面有为很多软件如 Emacs、Gedit、iTerm2、Putty、VIM、TextWrangler 等写好的配色文件,可自行采撷。

最爱的 Solarized Dark 配色,写成 Xshell 能用的形式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Solarized Dark]
text(bold)=839496
magenta(bold)=6c71c4
text=839496
white(bold)=fdf6e3
green=859900
red(bold)=cb4b16
green(bold)=586e75
black(bold)=073642
red=dc322f
blue=268bd2
black=002b36
blue(bold)=839496
yellow(bold)=657b83
cyan(bold)=93a1a1
yellow=b58900
magenta=dd3682
background=042028
white=eee8d5
cyan=2aa198
[Names]
count=1
name0=Solarized Dark

只需把以上内容拷贝到 SolarizedDark.xcs,并在 Xshell 中导入这个配色文件,就可以享受程序猿专用的温暖的太阳系之光了。

效果如图

以下为更加温暖的亮色系配色文件,同理保存为 SolarizedLight.xcs 并导入 Xshell 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Solarized Light]
text(bold)=657b83
magenta(bold)=6c71c4
text=657b83
white(bold)=002b36
green=859900
red(bold)=cb4b16
green(bold)=93a1a1
black(bold)=eee8d5
red=dc322f
blue=268bd2
black=fdf6e3
blue(bold)=657b83
yellow(bold)=839496
cyan(bold)=586e75
yellow=b58900
magenta=dd3682
background=fdf6e3
white=073642
cyan=2aa198
[Names]
count=1
name0=Solarized Light

效果如图

ps: 后来仔细看了一下,已经有人 fork 了一个 Solarized 的代码库,并提交了 for Xshell 的 pull。参见
[这里](https://github.com/mayjabber/solarized/tree/master/xshell-colors-solarized) https://github.com/mayjabber/solarized/tree/master/xshell-colors-solarized