2017/02/21

Add syntax highlight for your code in blogspot.com

There a lots of JavaScript syntax highlight library available, I chose highlight.js which is quite simple and straight forward in my view; and easy enough to put into your blogspot.com.
Here is the steps:
Edit your blog's template HTML by paste following codes before the </head>

    <link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/railscasts.min.css" rel="stylesheet"></link>
    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
    <script>hljs.initHighlightingOnLoad();</script>

For your blog poster, use

<pre><code class="lang">code in lang ...</code></pre>

This is using the default language packs of highlight.js which support most common languages:
  • Apache 
  • Bash 
  • C# 
  • C++ 
  • CSS 
  • CoffeeScript 
  • Diff 
  • HTML
  • XML 
  • HTTP 
  • Ini 
  • JSON 
  • Java 
  • JavaScript 
  • Makefile 
  • Markdown 
  • Nginx 
  • Objective-C 
  • PHP 
  • Perl 
  • Python 
  • Ruby 
  • SQL

and railscasts color scheme. you can goto https://highlighjs.org to find more language and color scheme.


It is pretty simple, isn't it?

$5 VPS 对比

英文原文:  https://joshtronic.com/2017/02/14/five-dollar-showdown-linode-vs-digitalocean-vs-lightsaild-vs-vultr/  
中文摘要:  http://www.appinn.com/compare-linode-vs-digitalocean-vs-lightsail-vs-vultr/

对比了四家大牌 VPS 服务商

这四家服务器分别是:
对比了8个方面的性能; 最后, 推荐度为 Linode > DigitalOcean / Vultr > Amazon Lightsail。 现在 buyvm 的VPS也用了好几年了,是不是要考虑换换呢?

补充

看了原文下面的评论, 提到了 https://www.ovh.com/us/vps/ OVH VPN 看起来也不错。

2017/02/13

微软的桌面版 Power BI 也是基于CEF开发的!
Windows统治客户端的年代 在Web大潮涌动近20年之后 几近结束。

2017/01/02

Perl script to convert to x Based String


#/usr/bin/perl

use strict;
use warnings;
use constant DIV => 24;


my $v = shift or die "Usage: $0 ";

my $d = 0;
my $str = '';

do {
    my $c = chr(ord('A') + ($v % DIV));
    $str = $c . $str;
    $v = int($v / DIV)
} while ($v > 0);

print $str;

0;

2015/12/19

Easy way to prevent from GFW DNS abusing

The easiest way to distinguish the GFW DNS abusing result from real DNS responses is using iptables to block the dummy DNS response by GFW

# iptables -t mangle -I PREROUTING -s 8.8.8.8/16 -m ttl --ttl-gt 63 -j DROP
# ip6tables -t mangle -I PREROUTING -s 2001:4860:4860::8844/112 -m hl --hl-gt 52 -j DROP

2013/01/26

PHP5 FastCGI init.d scriipt for Debian/Ubuntu

Recently, I am using Nginx + PHP5 FastCGI as the new web platform. I really need a init.d script for PHP5 FastCGI. It is not so difficult according to the skeleton.

First of all, make sure to install php5-cgi and spawn-fcgi.

sudo apt-get install php5-cgi spawn-fcgi
Second, create the /etc/init.d/php-fastcgi script, as below:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          php-fastcgi
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: PHP5 FastCGI mode
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

# Author: Yi Zhao

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="PHP5 FastCGI Service"
NAME=php5-cgi
FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi.sock
PHP5=/usr/bin/php5-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CHILDREN=2
DAEMON=/usr/bin/spawn-fcgi
DAEMON_ARGS="-s $SOCKET -C $CHILDREN -P $PIDFILE -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5"

# Exit if the package is not installed
[ -x "$DAEMON" -a -x "$PHP5" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
#. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --name $NAME
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac

:
Add php-fastcgi into the start list

sudo update-rc.d php-fastcgi default
this will start for init level 2,3,4,5

2012/04/12

Firefox 免插件 发 新浪 weibo 大法


Firefox 具有 Smart Keywords这个功能。她让我们可以 定义一个关键字 并用这个关键字来标示一个特定的网址。 利用这个功能,我们实际上可以做很多有趣的事情,比如发Sina围脖。 具体步骤如下:

  1. 使用 Firefox
  2. 打开 baidu.com 在搜索框上点右键
  3. 点 "Add Keyword for this Search..."
  4. 这时会弹出一个对话框, 在 "Name" 项输入 "sina weibo" 其实输入什么都可以, “keyword" 可以选 wb
  5. 然后保存
  6. 用 bookmark manager 打开这个新建的 Smart Keyword, 打开 properties 属性 对话框。然后在 “Location” 里面输入 下面的代码:
javascript:(function(){f='http://v.t.sina.com.cn/share/share.php?url='+encodeURIComponent(window.location.href)+'&title=%s';a=function(){if(!window.open(f,'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))location.href=f};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()

这就全部搞定了!  今后 在任何一个网页, 你只要切换到Address Bar。 可以用Ctrl+D/Ctrl+L 快速切换。 然后输入:  wb 任何你想输入的文字。 回车, 这就会打开一个新的窗口/tab 提示你 围脖的内容。Over!