0%

用vim写markdwon还是太原始了,有不少的可视化编辑器可用。

linux

linux平台推荐Remarkable,比ReText好用。

mac os x

mac平台上可能用mou的比较多,但还有一个MacDown也相当好用,还是free的呢!
而且支持brew安装

1
$ brew cask install macdown

online

在线编辑推荐Cmd,或者StackEdit,很不错的。

cross platform

还有一个跨平台的编辑器Haroopad

preview

Marboo可以与其他文本编辑器结合,比如vim,实时预览markdown文档。

References:
[1]Mac 下两款 Markdown 编辑器 Mou/MacDown 大 PK

===
[erq]

一条命令统计源代码行数

1
$ find . -name "*.java" -or -name "*.js" | xargs cat | wc -l 

去空行版:

1
$ find . -name "*.java" |  xargs grep -v "^$" | wc -l 

RandR(resize and rotate)是X11和Wayland的扩展协议,用于调整显示分辨率,屏幕旋转和扩展显示等特性。xrandr是官方的命令行配置程序,由freedesktop维护。

不带任何参数时,xrandr输出当前环境支持的显示模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ xrandr
Screen 0: minimum 320 x 200, current 1600 x 900, maximum 8192 x 8192
LVDS1 connected primary 1600x900+0+0 (normal left inverted right x axis y axis) 294mm x 166mm
1600x900 60.07*+
1440x900 59.89
1360x768 59.80 59.96
1152x864 60.00
1024x768 60.00
800x600 60.32 56.25
640x480 59.94
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

有+后缀的模式为最优化的模式,有*后缀的模式为当前的模式。

LVDS(Low-Voltage Differential Signaling)为LCD显示器的通用接口(信号传输模式)。
LVDS1即第一个LVDS接口的LCD显示设备。
VGA1为第一个VGA接口的显示设备(显示器/电视机/投影仪等)。
HDMI1为第一个HDMI接口的显示设备(显示器/电视机/投影仪等)。
DP1为第一个display port接口的显示设备(显示器/电视机/投影仪等)。

命令示例:

  • 设置分辨率
    1
    $ xrandr -s 1600x900
  • 打开外接HDMI显示设备,克隆LCD屏幕
    1
    $ xrandr --output HDMI1 --same-as LVDS1 --auto
  • 打开外接HDMI显示设备,克隆LCD屏幕,设置显示模式
    1
    $ xrandr --output HDMI1 --same-as LVDS1 --mode 1600x900
  • 打开外接HDMI接口显示设备,并设置为LCD的右侧扩展屏幕。鼠标会从LCD的右边缘进入HDMI设备的左边缘。
    1
    $ xrandr --output HDMI1 --right-of LVDS1 --auto
  • 打开外接HDMI接口显示设备,并设置为LCD的左侧扩展屏幕。鼠标会从LCD的左边缘进入HDMI设备的右边缘。
    1
    $ xrandr --output HDMI1 --left-of LVDS1 --auto
  • 打开外接HDMI显示设备,同时关闭LCD显示设备
    1
    $ xrandr --output HDMI1 --auto --output LVDS1 --off
  • 关闭HDMI显示设备,同时打开LCD显示设备
    1
    $ xrandr --output HDMI1 --off --output LVDS1 --auto
  • 关闭HDMI显示设备
    1
    $ xrandr --output HDMI1 --off

===
[erq]

u盘自动挂装后挂载到了/media/usb0,而不是通常的挂载点/media/user_name/volume_name,而且是以root权限挂载的,普通用户无法读写u盘。原来是/etc/fstab在作怪,使用u盘安装系统时,会自动在/etc/fstab中添加item,将u盘设备的分区挂载到了/media/usb0以及/media/usb1等目录下(如果有多个分区的话),而且是以root权限挂载的。删除相关的item后,重新插入U盘正常了。还有一个问题是,桌面环境下不要使用usbmount挂载U Disk。

访问控制列表ACL(Acess Control List)使用包过滤技术,在路由器、防火墙或交换机上读取第三层及第四层包头中的信息,如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。

其实只要是mplayer可以播放的音频或视频都可以转换到其他输出格式,下面这条bash语句可以批量转换当前目录下的所有wma文件为mp3格式文件:

1
2
3
for i in *.wma ; do mplayer -ao pcm $i && lame --preset cbr 32 audiodump.wav -o "\`basename "$i" .wma\`.mp3"; done

rm audiodump.wav

为了兼容性,使用CBR编码模式。如果参数中去掉cbr,而指定码率则会使用ABR编码模式,其他则会使用VRB编码模式。

===
[erq]

忽略未纳入版本管理的文件或文件夹

我们知道可以通过几种方法来配置git忽略对某些未跟踪文件的跟踪。

  1. .gitignore
    版本库中的每个目录层级都可以有一个.gitignore文件,这个文件每一行保存了一个匹配的规则,如:
    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
    # build生成文件
    build/
    root/WEB-INF/classes/
    *.class

    # lib文件和meta文件
    #root/WEB-INF/lib/
    root/META-INF/

    # vim交换文件
    *.swp

    # eclipse工程文件
    #.classpath
    #.project
    #.settings/

    # netbeans工程文件
    #build.xml
    #nbproject/

    #gradle
    .gradle

    #python cache folder
    __pycache__
    .gitignore文件本身是纳入版本库管理的。
  2. 全局ignore文件
    可以为自己配置一个全局的ignore文件,位于任何版本库之外:
    1
    $ git config --global core.excludesfile ~/.gitignoreglobal
    其语法与.gitignore一样
  3. exclude
    git还提供了另一种exclude方法来排除文件。.gitignore用来保存的是公共的需要排除的文件,
    而.git/info/exclude文件里设置的则是你自己本地需要排除的文件,他不会影响到其他人,也不会提交到版本库中去。

忽略已纳入版本管理的文件或文件夹

以上这些方法对于尚未被git跟踪管理的文件是有效的,如果想忽略已经被git纳入版本库管理的文件的修改,则需要另外的方法。

告诉git忽略对已经纳入版本管理的文件.classpath的修改,git会一直忽略此文件直到重新告诉git可以再次跟踪此文件

1
$ git update-index --assume-unchanged .classpath

告诉git恢复跟踪.classpath

1
$ git update-index --no-assume-unchanged .classpath

查看当前被忽略的、已经纳入版本库管理的文件:

1
$ git ls-files -v grep -e "^\[hsmrck\]"

References:
[1]在 git 中忽略文件 gitignore 与 exclude

===
[erq]

集群中的某一node无法启动,nodetool status输出如下:

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
38
39
40
41
42
43
error: No nodes present in the cluster. Has this node finished starting up?
-- StackTrace --
java.lang.RuntimeException: No nodes present in the cluster. Has this node finished starting up?
at org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership(Murmur3Partitioner.java:129)
at org.apache.cassandra.service.StorageService.getOwnership(StorageService.java:3856)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83)
at com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:206)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1443)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:637)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$78(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/294183905.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

/var/log/cassandra/system.log有如下错误信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ERROR \[MemtableFlushWriter:3\] 2015-03-23 18:26:37,996 CassandraDaemon.java:153 - Exception in thread Thread\[MemtableFlushWriter:3,5,main\]
java.lang.RuntimeException: java.io.FileNotFoundException: /var/lib/cassandra/data/image/image-2a19ce908f1f11e481c2a9fac1d00bce/image-image-tmp-ka--> 2-Index.db (Permission denied)
at org.apache.cassandra.io.util.SequentialWriter.<init>(SequentialWriter.java:75) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:104) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:99) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.<init>(SSTableWriter.java:552) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:134) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.db.Memtable$FlushRunnable.createFlushWriter(Memtable.java:390) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:329) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.db.Memtable$FlushRunnable.runWith(Memtable.java:313) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) ~\[guava-16.0.jar:na\]
at org.apache.cassandra.db.ColumnFamilyStore$Flush.run(ColumnFamilyStore.java:1037) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~\[na:1.7.0_65\]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~\[na:1.7.0_65\]
at java.lang.Thread.run(Thread.java:745) ~\[na:1.7.0_65\]
Caused by: java.io.FileNotFoundException: /var/lib/cassandra/data/image/image-2a19ce908f1f11e481c2a9fac1d00bce/image-image-tmp-ka-2-Index.db -> (Permission denied)
at java.io.RandomAccessFile.open(Native Method) ~\[na:1.7.0_65\]
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241) ~\[na:1.7.0_65\]
at org.apache.cassandra.io.util.SequentialWriter.<init>(SequentialWriter.java:71) ~\[apache-cassandra-2.1.2.jar:2.1.2\]
... 14 common frames omitted

看错误信息为文件系统访问权限问题所致,查看/var/lib/cassandra/data/image,果然此目录的属主和组都成了root

1
# chown -R cassandra:cassandra /var/lib/cassandra/data/image

重新启动cassandra成功。

===
[erq]

1
2
3
4
5
deb http://ftp.tw.debian.org/debian/ jessie main contrib non-free 
deb http://ftp.tw.debian.org/debian/ jessie-updates main contrib non-free
deb http://ftp.tw.debian.org/debian/ jessie-backports main contrib non-free
deb http://ftp.tw.debian.org/debian/ jessie-proposed-updates main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free

debian官方源是ftp.debian.org,美国镜像是ftp.us.debian.org,台湾官方镜像是ftp.tw.debian.org,中国官方源镜像是ftp.cn.debian.org
日本是jp,韩国是kr,…

===
[erq]

  1. 使用配置文件
    在全局配置文件中添加如下格式的代理:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Acquire::http::Proxy "http://proxy_ip:8080";
    Acquire::ftp::proxy "ftp://proxy_ip:8000/";
    Acquire::https::proxy "https://proxy_ip:8000/";
    Acquire::socks::proxy "socks://proxy_ip:proxy_port/";
    # 如果ftp需要登陆
    Acquire::ftp
    {
    Proxy "ftp://proxy_ip:2121/";
    ProxyLogin
    {
    "USER $(SITE_USER)@$(SITE)";
    "PASS $(SITE_PASS)";
    }
    }
    或者在apt-get 命令行指定参数文件的位置:
    1
    # apt-get -c ~/apt_proxy.conf update
  2. 命令行参数
    1
    2
    # apt-get -o Acquire::http::proxy="http://proxy_ip:proxy_port/" update
    # apt-get -o Acquire::http::proxy="http://proxy_ip:proxy_port/" upgrade
  3. 全局环境变量
    1
    $ export http_proxy=http://proxy_ip:proxy_port
    不过貌似apt-get不是用全局代理配置了?

===
[erq]