再次迁移

原来是板瓦工上的OpenVZ虚拟机,性能堪忧,作为代理,看youtube都好难过。换个快点的,要迁移下wp,这次做个笔记吧.

wordpress的备份

mysqldump –add-drop-table -h localhost -u ‘user_name’ -p ‘database_name’ > ~/1.bak.sql

tar xfcv wp.tgz /var/www/wp/

lnmp安装 (https://lnmp.org/install.html)

注意把default下的东西清理掉。直接修改默认的nginx.conf

server
{
listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
server_name _;
index index.html index.htm index.php;
#root /home/wwwroot/default;
root /home/wwwroot/blog;

}

vhost配置

需要先去域名服务商那里改域名绑定

做反向代理也是挺方便的。

phpadmin

数据库恢复,可以在phpadmin里改db里的数据,比如密码。

纪念一下一年19刀的vps:

WNBR4300安装LEDE

摘要

在不改动电信光猫前提下,尽量少的配置以实现二级路由后面的设备可以自由访问互联网。 在实践过程中,看了很多文章和片段,尽量消化后,记录于此。

网络拓扑

互联网 <— 光猫 <—- WNBR4300(LEDE) <—-各种设备

配置

光猫默认是路由模式(route), ip是 192.168.1.1。 此设备在默认情况下是无法修改的,如果需要高级配置,比如把IPTV/VoIP等功能在二级路由之后使用起来,需要拿到光猫更高权限密码,先将光猫改为桥接模式(bridge),再作更多配置。暂时留个坑,以后填。

WNBR4300是二级路由,刷LEDE(类似OpenWRT),采用默认配置,即级联的路由器。只需将LAN的默认ip地址修改下,避免和光猫地址(192.168.1.1)冲突. WNBR4300的LAN IP地址是192.168.2.1.

为了能访问某些网站,二级路由里,最少的配置是开启shadowsocks和dnsmasq服务.

安装LEDE基本设置

安装

设备介绍和对应的lede固件在 https://lede-project.org/toh/hwdata/netgear/netgear_wndr4300_v1 可以找到。首次安装需要选择这个 https://downloads.lede-project.org/releases/17.01.3/targets/ar71xx/nand/lede-17.01.3-ar71xx-nand-wndr4300-ubi-factory.img

下载后,可以用netgear原生的图形界面里的更新系统按钮,把这个固件上传上去,之后便可自动安装。安装结束后,默认没有wifi,按一下设备上的wifi按键,即可开启wifi,接入点是“LEDE”,无密码。官方推荐是用网线直连,先配置好了再开启wifi。其实用wifi也可以,但最好尽快把安全选项配置好。

浏览器里输入192.168.1.1,显示lede的管理界面,登入进去后改root密码,并设置wifi连接和密码

建立wifi

用图形话界面也可以配置,可以省却用ssh登录的麻烦。或者ssh登录后命令行管理,下面是配无线网络的接入点名,协议和密码

uci set wireless.radio0.country='CN'
uci set wireless.default_radio0.network=lan
uci set wireless.default_radio0.encryption=psk-mixed
uci set wireless.default_radio0.key='我是密码'
uci set wireless.default_radio0.ssid=LEDE2G

uci set wireless.radio1.country='CN'
uci set wireless.default_radio1.network='lan'
uci set wireless.default_radio1.encryption='psk-mixed'
uci set wireless.default_radio1.key='我是密码'
uci set wireless.default_radio1.ssid=LEDE5G

修改LAN IP使能正常工作

uci set dhcp.lan.ra_management='1'
uci set network.lan.ipaddr='192.168.2.1'

至此,路由器已经可以作为二级路由正常工作,其他连接此路由的设备应该可以正常上网了。

配置源

LEDE是个完整的linux系统,所以配置好源,就可以顺利的安装软件了。

去掉签名检查 /etc/opkg.conf

#option check_signature 0

设置国内镜像 /etc/opkg/distfeeds.conf

src/gz reboot_core http://mirrors.ustc.edu.cn/lede/releases/17.01.3/targets/ar71xx/nand/packages
src/gz reboot_base http://mirrors.ustc.edu.cn/lede/releases/17.01.3/packages/mips_24kc/base
src/gz reboot_luci http://mirrors.ustc.edu.cn/lede/releases/17.01.3/packages/mips_24kc/luci
src/gz reboot_packages http://mirrors.ustc.edu.cn/lede/releases/17.01.3/packages/mips_24kc/packages
src/gz reboot_routing http://mirrors.ustc.edu.cn/lede/releases/17.01.3/packages/mips_24kc/routing
src/gz reboot_telephony http://mirrors.ustc.edu.cn/lede/releases/17.01.3/packages/mips_24kc/telephony

添加自定义的源 /etc/opkg/customfeeds.conf

安装shadowsocks并能工作

安装包

opkg update
opkg install iptables-mod-nat-extra iptables-mod-tproxy ipset
opkg install Shadowsocks-libev luci-app-shadowsocks

两点注意

  •  注意,选择正确的版本:

    [email protected]:/etc/init.d# opkg list | grep shadowsocks

     luci-app-shadowsocks - 1.8.1-1 - LuCI Support for shadowsocks-libev.
     shadowsocks-libev-server - 3.1.0-1 - Shadowsocks-libev is a lightweight secured socks5 proxy for embedded devices and low end boxes.
     luci-app-shadowsocks-without-ipset - 1.8.1-1 - LuCI Support for shadowsocks-libev.
     shadowsocks-libev - 3.1.0-1 - Shadowsocks-libev is a lightweight secured socks5 proxy for embedded devices and low end boxes.
  • 注意,此时可能会无法联入互联网,可以先关闭shawdowsocks服务(最好在界面里配置)

    [email protected]:/etc/opkg# uci changes

     -shadowsocks.cfg043a58.main_server
     shadowsocks.cfg043a58.main_server+='nil'
     -shadowsocks.cfg0615fe.server
     shadowsocks.cfg0615fe.server+='nil'
     -shadowsocks.cfg08b3be.server
     shadowsocks.cfg08b3be.server+='nil'
    

配置ss: /etc/config/shadowsocks

这一步可以在ui界面的service–>shadowsocks里配置,对应的文本内容如下

config general
        option startup_delay '0'

config transparent_proxy
        option mtu '1492'
        list main_server 'cfg0a4a8f'
        option udp_relay_server 'cfg0a4a8f'
        option local_port '1080'

config socks5_proxy
        option mtu '1492'
        list server 'cfg0a4a8f'
        option local_port '1081'

config port_forward
        option local_port '5353'
        option destination '8.8.8.8:53'
        option mtu '1492'
        list server 'cfg0a4a8f'

config servers
        option fast_open '0'
        option timeout '60'
        option encrypt_method 'rc4-md5'
        option alias 'bwh'
        option server '我是开了ss服务的vps的ip'
        option server_port '443'
        option password '我是ss服务密码'

config access_control
        option self_proxy '1'
        option wan_bp_list '/etc/ignore.list'
        option lan_target 'SS_SPEC_WAN_AC'

配置 /etc/ignore.list

这里的有两行,是设定一个不需要转发的ip列表,参考

shadowsocks.cfg0c4417.wan_bp_list='/etc/ignore.list'
shadowsocks.cfg0c4417.lan_target='SS_SPEC_WAN_AC'

参考文献里生产这个列表的核心代码是:

wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | \
    awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > \
    /tmp/ignore.list

mv /tmp/ignore.list /etc/

启动ss服务

  配置好后,ss就应该工作正常了.

配置自动更新

参考文献里的办法是建立自动更新脚本/root/update_ignore_list, 并用cron来定时调用

注: 并不建议频繁更新此列表

新建一个文件 /root/update_ignore_list 写入如下内容:

#!/bin/sh
set -e -o pipefail
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | \
    awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > \
    /tmp/ignore.list
mv /tmp/ignore.list /etc/
if pidof ss-redir>/dev/null; then
    /etc/init.d/shadowsocks rules
fi

使用 chmod +x /root/update_ignore_list 添加可执行权限

打开路由器管理页面 系统 - 计划任务 填写如下内容(每周日 04:30 执行):
30    4     *     *     0     /root/update_ignore_list>/dev/null 2>&1

更新安装的软件

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade 

原理

路由和桥接

VLAN

dnsmasq

安装dnsmasq

opkg remove dnsmasq && opkg install dnsmasq-full

dnsmasq配置

cache-size=65536 #设置缓存大小
log-queries #记录DNS查询事件,在openwrt上可以通过logread查看日志,便于观察工作状态
neg-ttl=3600 #如果上流DNS服务器没有返回TTL,则用这个代替
log-async #如果写日志时被阻塞,开启这个选项后可以保证dnsmasq的其它功能正常工作
server=114.114.114.114 #添加114.114.114.114作为备选上流DNS服务器
server=119.29.29.29 #添加DNSpod作为备选服务器
all-servers #向所有上流服务器发送查询,先返回的结果被采用。

dnsmasq 格式

* 使用不受污染的DNS解析该域名,可以将此IP改为自己使用的DNS服务器
server=/google.com/127.0.0.1#5353
* 将解析出来的IP保存到名为gfwlist的ipset表中
ipset=/google.com/gfwlist

配置dnsmasq表

可以设置两张表,一张白表,一张黑表。

gfwlist的制作

  • 黑表

    git clone https://github.com/cokebar/gfwlist2dnsmasq.git
    cd gfwlist2dns
    gfwlist2dnsmasq.sh -o dnsmasq_list.conf
    cp dnsmasq_list.conf /etc/dnsmasq.d/
    
  • 白表

    上面提到的ignore.list

配置路由

  • 创建名为gfwlist,格式为iphash的集合 ipset -N gfwlist iphash

  • 匹配gfwlist中ip的nat流量均被转发到shadowsocks端口 iptables -t nat -A PREROUTING -p tcp -m set –match-set gfwlist dst -j REDIRECT –to-port 1080

  • 匹配gfwlist中ip的本机流量均被转发到shadowsocks端口 iptables -t nat -A OUTPUT -p tcp -m set –match-set gfwlist dst -j REDIRECT –to-port 1080

ss服务脚本: /etc/init.d/Shadowsocks

理解下

#!/bin/sh /etc/rc.common
START=95
STOP=15
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
SERVICE_PID_FILE=/var/run/shadowsocks.pid
TUNNEL_PID_FILE=/var/run/ss-tunnel.pid
CONFIG=/etc/shadowsocks-libev/config.json
DNS=8.8.8.8:53
TUNNEL_PORT=5353
start() {
    # Proxy Mode
    service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
    # Tunnel
    service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -u -l $TUNNEL_PORT -L $DNS -f $TUNNEL_PID_FILE
}
stop() {
    # Proxy Mode
    service_stop /usr/bin/ss-redir
    # Tunnel
    service_stop /usr/bin/ss-tunnel
}

最新版本的ss中的ss-rule的作用

ss-rule的输入参数是ignore.list,他的作用就是建立iptable的rule。 用ipset list查看一下,大致就明白了。所以可以省去手工做这个事情了。

Name: ss_spec_src_ac
Type: hash:mac
Revision: 0
Header: hashsize 64 maxelem 65536
Size in memory: 64
References: 2
Members:

Name: ss_spec_src_bp
Type: hash:mac
Revision: 0
Header: hashsize 64 maxelem 65536
Size in memory: 64
References: 2
Members:

Name: ss_spec_src_fw
Type: hash:mac
Revision: 0
Header: hashsize 64 maxelem 65536
Size in memory: 64
References: 2
Members:

Name: ss_spec_dst_sp
Type: hash:net
Revision: 6
Header: family inet hashsize 64 maxelem 65536
Size in memory: 1216
References: 3
Members:
198.51.100.0/24
198.18.0.0/15

224.0.0.0/4
100.64.0.0/10
192.0.0.0/24
0.0.0.0/8
172.16.0.0/12
127.0.0.0/8
192.88.99.0/24
192.168.0.0/16
240.0.0.0/4
192.0.2.0/24


192.175.48.0/24
192.31.196.0/24
255.255.255.255
10.0.0.0/8
192.52.193.0/24

Name: ss_spec_dst_bp
Type: hash:net
Revision: 6
Header: family inet hashsize 2048 maxelem 65536
Size in memory: 136184
References: 2
Members:
103.34.72.0/22
103.46.116.0/22
45.122.92.0/22
103.45.56.0/22
163.53.188.0/22
60.204.0.0/16
202.14.127.0/24
202.38.2.0/23
202.116.96.0/19

参考

参考项目

浅尝docker

前言

一直听说docker很好,以前项目里也稀里糊涂的用过,但没搞明白。这两天要在CentOS里编译一套东西,觉着docker可以提供一套隔离的环境做这个事,于是就从头来过,做了一遍,也厘清了一些概念,比如:docker依赖于host上的kernel,所以不存在docker image升级kernel一说。

首先是在ubuntu上安装docker环境。难点在于代理和镜像。

代理分为host机器上访问docker的代理配置和docker启动时使用的代理和docker container里需要的代理。如果没有代理问题,基本上没有写下此笔记的必要。

安装

apt-get install docker-io
or
yum install docker-io

host是centos的配置

service docker start
chkconfig docker on
echo “OPTIONS=’–registry-mirror=https://docker.mirrors.ustc.edu.cn'” >> /etc/sysconfig/docker
systemctl daemon-reload
service docker restart
docker pull centos
docker images
docker run -it centos /bin/bash
* /etc/systemd/system/multi-user.target.wants/docker.service
[Service]
Type=notify
NotifyAccess=all
KillMode=process
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
Environment=FTP_PROXY=http:///
Environment=HTTPS_PROXY=http://
Environment=HTTP_PROXY=http:///
Environment=ftp_proxy=http:///
Environment=http_proxy=http:///
Environment=https_proxy=http:///
Environment=no_proxy=localhost,127.0.0.0/8,::1,localhost,127.0.0.1,127.0.0.0/8,172.16.0.0/20,192.168.0.0/16,10.0.0.0/8
ExecStart=/usr/bin/dockerd-current \
–add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
–default-runtime=docker-runc \
–exec-opt native.cgroupdriver=systemd \
–userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave

Host是Ubuntu下配置

* 配置docker代理

sudo mkdir /etc/systemd/system/docker.service.d
[email protected]:/etc/docker$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment=”FTP_PROXY=http://1/”
Environment=”HTTPS_PROXY=http://1/”
Environment=”HTTP_PROXY=http://11/”
Environment=”ftp_proxy=http://11/”
Environment=”http_proxy=http://11/”
Environment=”https_proxy=http://11/”
Environment=”no_proxy=localhost,127.0.0.0/8,::1,localhost,127.0.0.1,127.0.0.0/8,172.16.0.0/20,192.168.0.0/16,10.0.0.0/8″

* 配置dns

    host上的dns一定要配置好。否则,需要在docker里把dns改掉
    $ cat /etc/resolv.conf
    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    # DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 127.0.1.1
    nameserver
    nameserver
    nameserver
    search  xxx.com
* 设置docker库镜像
[email protected]:/etc/docker$ cat daemon.json
{
“registry-mirrors”: [“https://registry.docker-cn.com”]
}

Docker的使用

    1. 启动
        a. Docker run -it centos/5g /bin/bash
    2. 查看
        a. Docker ps -a
        b. Docker ps
        c. Docker images
    3. 保存
        a. Docker commit $ID centos/5g:v1
    4. 进入
        a. Docker exec -it $Id /bin/bash

CentOS下编译mpv

难点在一个不常用的CentOS,很多依赖包并不在内置的源里,另一个是代理的配置。

代理

/etc/yum.conf

proxy=http://xxx.xxx.com:111/

yum -y install epel-release –nogpgcheck
yum -y install epel-release && rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm

会生成如下

$ cat nux-dextop.repo
[nux-dextop]
name=Nux.Ro RPMs for general desktop use
baseurl=http://li.nux.ro/download/nux/dextop/el7/$basearch/ http://mirror.li.nux.ro/li.nux.ro/nux/dextop/el7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
protect=0
[nux-dextop-testing]
name=Nux.Ro RPMs for general desktop use – testing
baseurl=http://li.nux.ro/download/nux/dextop-testing/el7/$basearch/
enabled=0
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
protect=0

依赖

yum install -y yasm
yum install -y fribidi
yum install -y youtube-dl
yum install -y freetype-devel
yum install -y fribidi-devel
yum install -y fontconfig-devel
yum install -y harfbuzz-devel
yum install -y cmake
yum install -y mercurial
yum install -y nasm
yum install -y openssl-devel
yum install -y libX11-devel
yum install -y python-docutils
yum install -y luajit-devel
yum install -y libbluray-devel
yum install -y libdvdread-devel
yum install -y libcdio-paranoia-devel
yum install -y lcms2-devel
yum install -y pulseaudio-libs-devel
yum install -y jack-audio-connection-kit-devel
yum install -y alsa-lib-devel
yum install -y libdrm-devel
yum install -y libxkbcommon-devel
yum install -y libXScrnSaver-devel
yum install -y libXext-devel
yum install -y libXv-devel
yum install -y PyQt4-devel
yum install -y libvdpau-devel
yum install -y libva-devel
yum install -y gstreamer1-vaapi-devel
yum install -y libcaca-devel
yum install -y libass
yum install -y libass-devel
yum install -y fdk-aac-devel
yum install -y lame-devel
yum install -y x264-devel
yum install -y SDL2-devel gcc-c++ make yasm pkgconfig libXext-devel libXfixes-devel x264-devel zlib-devel
yum install -y libpciaccess-devel
yum install -y git

编译命令

git clone https://github.com/mpv-player/mpv-build

ffmpeg

./configure –enable-openssl –enable-nonfree –enable-vaapi –enable-libfdk-aac –prefix=/opt/yami/vaapi –enable-gpl –disable-stripping –enable-avresample –enable-avisynth –enable-libass –enable-libbluray –enable-libcaca –enable-libcdio –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libmp3lame –enable-opengl –enable-sdl2 –enable-shared && make -j && make install
mpv
./waf configure –prefix=/opt/yami/vaapi/ –enable-vaapi –enable-vaapi-x-egl –enable-vaapi-hwaccel –disable-build-date –enable-libmpv-shared –enable-sdl2 –enable-encoding && ./waf && ./waf install

参考

  1. https://www.uncleninja.com/uncategorized/2016-05-04/install-mpv-player-smplayer-centos-7/
  2. https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

2016

2016年算是休养生息的一年。公司业务调整,借着维护以及转型,在工作上,尝试了几个领域,以复习和学习为主,算是对过去的梳理,以及积极备战。

以下是2015定的计划,完成了一半吧。

1. 1000 English words (http://scb.dict.cn/)
2. 100 Q&A on graphics driver
3. golang
3.1 golang to build 1 android app
3.2 golang to build 1 service
4. skim and finish the ML course
5. 25-50 poems (http://wengu.tartarie.com/wg/wengu.php?l=Tangshi)

为四十不惑而努力!

在软件安全、机器学习、机器人、虚拟现实几个方面,都了解了下,顺带把java,python,c++11也过了下。软件安全坑太大,上完课程后即弃坑;读完了coursera上的机器学习课程,机缘巧合研读了深度学习框架Neon的代码并提了几个patch,感觉已不适合去从头研究方法工具,而用工具去解决问题,又需要场景和实践经验,这个只能待后续有机会再实践了;而机器人,机器视觉和虚拟现实,因为是项目缘故,得以可以名正言顺的去做。不想再碰rendering相关的东西,所以选了6DoF方向,略有心得,python+opencv,真是验证想法的利器。综上种种技能,都是后续项目中用得到的。

小朋友一天天长大,我也一天天变老,要不断加油充电,跟上变化的世界,努力,2017

ps:

2017已经过去近1/3,回顾并列出计划,尴尬,但没有计划的日子,是很容易滑过去的。

  1. 学习多视图几何
  2. 实现一个个人照片分类工具
  3. android应用编程
  4. python和图形图像学

git代理设置

网上找了一圈,还是自己珍藏的最好:

~/.bashrc

proxy2()
{
unset all_proxy
unset ALL_PROXY

_proxy=xxxx;
_sproxy=xxxx;

export no_proxy=”localhost,127.0.0.0/8,172.16.0.0/20,192.168. 0.0/16,10.0.0.0/8″
export http_proxy=$_proxy;
export ftp_proxy=$_proxy;
export https_proxy=$_sproxy;
}

noproxy()
{
unset HTTP_PROXY http_proxy https_proxy HTTPS_PROXY FTP_PROXY ftp_proxy GIT_ PROXY_COMMAND all_proxy ALL_PROXY socks_proxy
}

noproxy
proxy

 

~/bin/git-proxy

#!/bin/bash

# git config –global –add core.gitProxy git-proxy
PROXY=xxxxx
PORT=1080

case $1 in
# list internal git servers here that you do not want to use
# the proxy with, separated by a pipe character ‘|’ as below:
internalgit1.example.com|internalgit2.example.com)
METHOD=”-X connect”
;;
*)
METHOD=”-X 5 -x ${PROXY}:${PORT}”
;;
esac

/bin/nc $METHOD $*

 

c++ 11

最近看OSVR代码,发现看不懂c++了,见招拆招之余,发现文章(1),很好的一篇介绍c++ 11的feature的科普文,补完之后,看代码舒服多了。

补:最好的文档还是微软的(4)

参考:
1. http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer
2. https://isocpp.org/wiki/faq/cpp11#cpp11-approach
3. http://en.cppreference.com/w/cpp/language/lambda
4. https://msdn.microsoft.com/en-us/library/3bstk3k5.aspx

eclipse里调试neon

我的步骤:
1. 按guide在命令行编译好neon,并能正确运行
2. 安装eclipse和pydev
3. 在eclipse里新建一个pydev项目,并导入neon,目录是neon_dbg
4. 在neon_dbg目录下,依旧是命令行编译好
5. 在eclipse里配置python interpreter为 neon_dbg里使用的虚拟环境,如图所示。
6. 接下来可以运行了,选中需要的.py文件,配上合适的参数即可。
venv setting

运行效果
python examples/mnist_mlp.py

看了下Neon的代码,笔记在这里, 据说这个以后是前端,后端叫ngraph。使用起来还挺方便。

参考:
1. https://www.londonappdeveloper.com/virtualenv-with-eclipse-with-pydev-on-windows-10/
2. http://stackoverflow.com/questions/4806448/how-do-i-install-from-a-local-cache-with-pip#
3. https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/

恢复grub

同事的机器在进了下bios后,就莫名从硬盘进入Ubuntu,但usb启动盘还可以工作。于是热心的我应邀出手^_^

这个问题应该就是boot loader哪里出了问题,重装grub就好。年久失修,具体步骤是记不起来了,于是google之,参考 Boot repair after a Windows Upgrade on Ubuntu 14.04 (non-RAID) ,稍微改了下,即可。记录下来,以备后用。

  • Insert Ubuntu installation media (e.g. Ubuntu 14.04 LTS 64 bit DVD)
  • Ensure the bios boot order is set to read the media first (consult your motherboard/computer manual) and restart the computer
  • Select Ubuntu Live/Try mode (do not install)
  • Click on the purple Ubuntu search button – enter “gparted” and click on its icon
  • Determine the name of your linux partition (/dev/sdXY) – you should be able to identify it by recognising its format (most likely ext4) and size (number of GB)
  • Click on purple Ubuntu search button – enter “gnome-terminal” and click on its icon
  •  sudo mount /dev/sdXY /mnt [where sdXY has previously been identified using gparted]

  •  for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

  •  sudo chroot /mnt

  • mount  /dev/sda1 /boot/efi
  •  sudo grub-install /dev/sdX [note this is sdX not sdXY!]

  •  update-grub

  •  exit

  • restart PC and remove Ubuntu installation media

2015

可爱的小朋友的到来,让2015变成一个欢乐和丰硕的本命年。下半年的业余时间,基本都用来陪伴他了,祝愿孩子能健康快乐的长大,成为一个有用且有趣的人。

好奇心和学习精神依旧保持的不错。

六月端午节和随后的几个周末,几乎100%的精力放在了解control4系统上。自评学习能力还是不错的。如果不是硬件配置上的乌龙耽误了不少时间,那最后开发的OpenWebNet网关驱动和调光驱动,应该不会仅仅一个原型而已。因为精力有限,7月必须收尾,但也算是了解了智能家居行业,了解了做主机、做控制系统、做完整解决方案的思路。

也大致了解了下golang,这种系统级的语言,对我非常有用,可以作脚本语言,可以快速开发demo。目测在今后的智能设备领域,也会大有用场。

WD my cloud算是基本玩明白了,但目前64K page size的golang问题,没有解决。

工作上吗,唯一没有想到的是:产品中CPU竟然成了瓶颈。性能调优的经验值,又增加了一点。顺带的,了解了ASIC/FPGA的功用。做专用的SOC,应该是下一波设备研发的趋势。

做事还是有些慢,大多是由于做事不直截了当导致。就像在做主线任务时,经常会切去做支线任务。虽然支线任务能让最后的结局更完美,但一旦没有足够的时间和精力,连主线任务都完成不了。

软能力上欠缺的很多啊。这个是硬伤,很难补上,就算了吧。这把年纪,还是把有限的精力放在做擅长的事情上。

看了点书,发现了些有趣的人和新玩意。

2016,除了继续学习做合格的奶爸,还要踏实的做一点有意义的东西。
比如把这几年查的生词给总结一下,再学习学习古诗词,看看童话书,好给孩子讲故事。
继续做好本职工作,包括学习新知识;要把golang用起来,做点东西。

大致罗列如下,每季度来检查:

1. 1000 English words (http://scb.dict.cn/)
2. 100 Q&A on graphics driver
3. golang
3.1 golang to build 1 android app
3.2 golang to build 1 service
4. skim and finish the ML course
5. 25-50 poems (http://wengu.tartarie.com/wg/wengu.php?l=Tangshi)

为四十不惑而努力!