保留/不保留匹配项

# -*- coding:utf8 -*-
__author__ = 'han-pc'
import re
#不保留匹配项
m = re.split('\d+' , '123abc321cba')
print m
print "\n"
#保留匹配项
m = re.split('(\d+)' , '123abc321cba')
print m
// 其结果为:
[”, ‘abc’, ‘cba’]

[”, ‘123’, ‘abc’, ‘321’, ‘cba’]

website
github

ubuntu 16.04

this is working

docker

SET UP THE REPOSITORY
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
should be response
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

INSTALL DOCKER CE
sudo apt-get update
sudo apt-get install docker-ce

verify docker installation
sudo docker run hello-world

// isntall ruby
sudo apt-get install ruby-full

// solve permission denied issue
sudo chmod a+rwx /var/run/docker.sock
sudo chmod a+rwx /var/run/docker.pid

git clone git://github.com/devrandom/gitian-builder.git
mkdir gitian-builder/inputs
cd gitian-builder/inputs
wget -O miniupnpc-1.6.tar.gz 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz'
wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'
# Inputs for Win32: (Linux has packages for these)
wget 'https://downloads.sourceforge.net/project/boost/boost/1.52.0/boost_1_52_0.tar.bz2'
wget 'http://www.openssl.org/source/openssl-1.0.1g.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'https://downloads.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz'
wget 'https://downloads.sourceforge.net/project/libpng/libpng15/older-releases/1.5.9/libpng-1.5.9.tar.gz'
wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.7.tar.gz'

need modify make-base-vm add linux 32bit support

if [ -n "$DOCKER_IMAGE_HASH" ]; then
base_image="$DISTRO@sha256:$DOCKER_IMAGE_HASH"
OUT=base-$DOCKER_IMAGE_HASH-$ARCH
else
if [ $ARCH = "i386" ]; then
base_image="i386/$DISTRO:$SUITE"
else
base_image="$DISTRO:$SUITE"
fi
fi

bin/make-base-vm --docker --arch amd64 --suite bionic
bin/make-base-vm --docker --arch i386 --suite bionic

export USE_DOCKER=1

// build linux approximately 30min mbp 2015
./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/gitian.yml

// build from github source.
./bin/gbuild -j4 --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/gitian_remote.yml

// build windows depends only need build once
./bin/gbuild -j3 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/boost-win64.yml
./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/deps-win64.yml
./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/qt-win64.yml

./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/boost-win32.yml
./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/deps-win32.yml
./bin/gbuild -j4 --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/qt-win32.yml

// if run in mac need modify gbuild line 147 date parameters is different with linux
author_date = `cd inputs/#{dir} && v2=$(git log --format=%at -1) && date -r $v2 +'%Y-%m-%d %H:%M:%S'`.strip

If you use local code build need modify code path in *.yml
./bin/gbuild --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/gitian-win64.yml

./bin/gbuild --commit primecoin=v0.1.4xpm ../primecoin/contrib/gitian-descriptors/gitian-win32.yml

debug build environment

PATH="libexec:$PATH"
start-target 64 bionic-amd64

this is not working due to network problem

sudo apt-get install lxc
after install need reboot, and check ifconfig should be
lxcbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.3.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:16:3e:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

then set environment variable
export USE_LXC=1
export LXC_BRIDGE=lxcbr0 <-- your interface name

Valid IP is only 10.0.2.2
sudo ifconfig lxcbr0 10.0.2.2

bin/make-base-vm --lxc --arch amd64 --suite bionic
bin/make-base-vm --lxc --arch i386 --suite bionic


I: Validating subversion 1.9.7-4ubuntu1
E: Couldn't download packages: tar libmpfr6 perl-modules-5.26 libgcc-7-dev shared-mime-info
tyler@ubuntu:~/Documents/gitian-builder$



mac

use LXC

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
brew install lxc


sudo ln -s /usr/local/bin/gsha256sum /usr/local/bin/sha256sum
sudo ln -s /usr/local/bin/gsha512sum /usr/local/bin/sha512sum

./bin/gbuild ../primecoin/contrib/gitian-descriptors/boost-win32.yml
brew install ruby coreutils
export PATH=$PATH:/opt/local/libexec/gnubin

// 使用 docker 需要替换一下国内的源节点,不然太慢了
ENV DEBIAN_FRONTEND=noninteractive
# modify to custom china source
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

sudo apt-get install docker-ce

bin/make-base-vm --docker --arch amd64 --suite precise
bin/make-base-vm --docker --arch i386 --suite precise

bin/make-base-vm --docker --arch amd64 --suite bionic
bin/make-base-vm --docker --arch i386 --suite bionic



新建目录:
gitian-builder/inputs

export USE_DOCKER=1
./bin/gbuild ../primecoin/contrib/gitian-descriptors/boost-win64-new.yml
./bin/gbuild ../primecoin/contrib/gitian-descriptors/deps-win64-new.yml
./bin/gbuild ../primecoin/contrib/gitian-descriptors/qt-win64-new.yml

指定一个 commit id 用来 build
./bin/gbuild --commit primecoin=16fe6893cc29facaeb0d200e137fa1b1f43fa816 ../primecoin/contrib/gitian-descriptors/qt-win64-new.yml

ubuntu 16.04

./configure –prefix= –enable-static –disable-shared

QR_PREFIX=/home/tyler/Documents/primecoin/deps/qrencode-3.4.4/build_unix
./configure –prefix=/home/tyler/Documents/primecoin/deps/qrencode-3.4.4/build_unix –enable-static –disable-shared

qmake INCLUDEPATH=”/home/tyler/Documents/primecoin/deps/qrencode-3.4.4/build_unix/include” LIBS=”-L/home/tyler/Documents/primecoin/deps/qrencode-3.4.4/build_unix/lib”

注意-lssl -lcrypto要写在-ldl -lpthread前面,这四个必须要。

-lQtGui -lQtNetwork -lQtCore
/usr/bin/ld: /usr/lib/i386-linux-gnu/libcrypto.a(dso_dlfcn.o): undefined reference to symbol ‘dladdr@@GLIBC_2.0’
//lib/i386-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:310: recipe for target ‘primecoin-qt’ failed
make: *** [primecoin-qt] Error 1

Gitian is an open source software program that offers what is known as a “build environment.” A build environment is perhaps best described as a “computer within a computer,” but with a specific purpose: a virtual space to compile binaries, completely free of any variables. “Gitian Building,” the process of compiling binaries in Gitian, ensures that whatever computer is used, the binaries turn out exactly the same.

This, in turn, enables different developers to reliably cross check their binaries against each other. And, of course, it allows anyone else to verify whether the binaries match the source code as well.

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install ruby apache2 git apt-cacher-ng python-vm-builder qemu-kvm

- 安装 mingw-w64
use g++ to compile

sudo apt-get install mingw-w64
sudo apt-get install g++-mingw-w64-i686 mingw-w64-i686-dev g++-mingw-w64-x86-64 mingw-w64-x86-64-dev

安装完成后,mingw-gcc和mingw-g++默认使用的线程模型是win32的,但是我们需要使用posix的线程模型,因此分别执行以下命令,然后将工具链指向带-posix后缀的工具链

sudo update-alternatives –config x86_64-w64-mingw32-gcc
sudo update-alternatives –config x86_64-w64-mingw32-g++
sudo update-alternatives –config x86_64-w64-mingw32-gfortran
sudo update-alternatives –config x86_64-w64-mingw32-gnat

sudo update-alternatives –config i686-w64-mingw32-gcc
sudo update-alternatives –config i686-w64-mingw32-g++
sudo update-alternatives –config i686-w64-mingw32-gfortran
sudo update-alternatives –config i686-w64-mingw32-gnat

执行上面这一步后会让你选择,我们选择x86_64-w64-mingw32-g++-posix.

编译工具链所在的目录以及gcc文件前缀为:
/usr/bin/x86_64-w64-mingw32-

x86_64-w64-mingw32 64bit compile
i686-w64-mingw32 32bit compile


// 检查
sudo service apt-cacher-ng status # Should return apt-cacher-ng is running
ls -l /dev/kvm # Should show a /dev/kvm device

git clone git://github.com/devrandom/gitian-builder.git
mkdir gitian-builder/inputs
cd gitian-builder/inputs

# Inputs for Linux and Win32:
wget -O miniupnpc-1.6.tar.gz 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.9.20150206.tar.gz'

wget -O miniupnpc-1.6.tar.gz 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz'
wget 'https://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'

wget 'https://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz'

# Inputs for Win32: (Linux has packages for these)
wget 'https://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2'
wget 'http://www.openssl.org/source/openssl-1.0.1g.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'https://downloads.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz'
wget 'https://sourceforge.net/projects/libpng/files/libpng16/older-releases/1.6.16/libpng-1.6.16.tar.gz/download'
wget 'http://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz'
cd ../..

need install newly vmbuilder
https://github.com/newroco/vmbuilder
sudo python setup.py install

cd gitian-builder
bin/make-base-vm --arch amd64 --suite xenial
bin/make-base-vm --arch i386 --suite xenial

bin/make-base-vm --arch amd64 --suite precise
bin/make-base-vm --arch i386 --suite precise

./libexec/make-clean-vm --arch amd64 --suite xenial
./libexec/make-clean-vm --arch i386 --suite xenial

bin/make-base-vm --arch i386 --suite precise
bin/make-base-vm --arch amd64 --suite precise
cd ..

modify primecoin/contrib/gitian-descriptors/gitian*.yml

suites:
- "lucid"
改成
- "xenial"

修改里面的依赖文件的版本为实际的版本。

# Build Linux release:
cd bitcoin
git pull
cd ../gitian-builder
git pull
sudo ./bin/gbuild --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/gitian.yml

sudo ./bin/gbuild ../primecoin/contrib/gitian-descriptors/gitian.yml

# Build Win32 dependencies: (only needs to be done once, or when dependency versions change)
./bin/gbuild ../primecoin/contrib/gitian-descriptors/boost-win32.yml

./bin/gbuild --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/boost-win32.yml
./bin/gbuild --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/deps-win32.yml
./bin/gbuild --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/qt-win32.yml

# Build Win32 release:
./bin/gbuild --commit primecoin=HEAD ../primecoin/contrib/gitian-descriptors/gitian-win32.yml

辅助记忆的字体

Sans Forgetica is a downloadable font that is scientifically designed to help you remember your study notes.

very interesting idea, I will try it, looks fun.

3e40805c.png 1c6ea1fe.png

费曼学习法 Feynman Technique

7f7ead35.png

第1步:获取某个知识/某概念,并且去理解这些内容。
第2步:按照教程自己来讲解/复述你所获得的主要内容。
第3步:用自己的方式再次复述一下所学到的知识。

后面的步骤其实是循环的:不满意——纠错反馈;满意——尝试运用更简单精炼的语言概括。
图中还有一个没有提到的要点——反思。反思你在思考的时候在哪里卡了壳,着重这个地方,再次理解。这个过程也是至关重要!
费曼学习法可以考量自己对一个概念或知识是否理解,一个最直观的方法就是讲给别人听,如果能够用简洁清晰的语言让别人完全听懂你在说什么,就证明你完全了解所学的概念;反之则还需要再去认真学习。

这种方法在学习理论性,概念性较强的知识是非常实用的。学习一个新概念新知识,并且充分理解它,然后再用自己的语言,自己的方式去复述它,而不仅仅是死记硬背。这样获得的知识才能真正内化,进入你的大脑。

思维导图学习法 Mind Mapping

29b58c0c.png 思维导图学习法重点要素是:中心点、分支线、关键词以及个性标。这种方法对于学习者的逻辑性和全局性思维有很好的培养功能。

利用思维导图学习法进行学习,给小伙伴们推荐几个工具,这也是小编亲身体验过了,操作简便,画面简洁,手机app,思维导图,电脑端用Xmind或百度脑图。

西蒙学习法 Simon learning method

又名 “ 锥形学习法 ”,此法来源于诺贝尔经济学奖获得者西蒙教授提出的一个理论:“对于一个有一定基础的人来说,只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”为了形象地说明,可以将西蒙学习法比做一把锥子。就像居里夫人所说,“知识的专一性像锥尖,精力的集中好比是锥子的作用力,时间的连续性好比是不停顿地使锥子往前钻进。”

西蒙学习法之所以高效的原理是在于,连续的长时间学习本身包涵对之前学习内容的应用,这样就省去了大量的复习时间。

西蒙学习法的核心是:持续(连续性的时间投入)、专注(精神集中)、目标单一(以某一技能提升为目标),外语学习可以作为西蒙学习法的经典例子,持续加热一下子把水烧开,一天学习10h,集中单一课程,短期内突破。比刻意练习亦少了学习区的概念和即时反馈原则。

SQ3R 阅读法

SQ3R即S—Q—R—R—R这个阅读技巧的名字由五个单词的首字母组成,分别是Survey、Question、Read、Recite、Review

SQ3R 阅读法的步骤通常是这样的:

第1步,Survey浏览,浏览并不是简单的翻翻看看,在浏览的过程中是要注意书籍/文章的重要信息,包括书名,前言,目录,标题、图表,概要等等。

第2步,Question提问,浏览的过程中不仅仅是看,更要提出问题,从书名、标题上就可以开始提问题,包括各章节承上启下的内容,一边浏览一边提问是有利于激发学习兴趣。

第3步,Read阅读,这一次就是要精读细读,要对重要的、难解的部分反复阅读,并且自己要深刻理解,这一步一定是要仔细认真。

第4步,Recite复述,当你阅读完了之后,把书本/文章合上,回忆内容,并且用自己的语言复述内容/知识。这一步可以结合第二个步骤提问一起来进行,看看自己开始的提问有没有得到正确的回答,来检验自己是否读懂了。

第5步,Review 复习,任何知识都是需要复习的。SQ3R 阅读法建议复习一般在复述的后一两天进行。这样做的好处是,可以重温已有的知识,也可以温故知新,从旧的知识里生出新的感悟。

类静态成员变量存取出错 undefined reference to ‘xxx’

#define A_H
class A
{
static int num1; //这里只是声明,并没有定义
int num2;//声明,在实例化时分配内存
A();
}

#endif

#include "a.h"
int A::mun1;//定义,分配内存,以后A每一个对象(实例)的创建都不再分配内存
void A::A()
{
num2=1;//正确
num1=2;//没有上面的定义会报错
}

This isn’t surprising. Both true and false are keywords and as literals they have a type ( bool ). nullptr is a pointer literal of type std::nullptr_t, and it’s a prvalue (you cannot take the address of it using &).

4.10 about pointer conversion says that a prvalue of type std::nullptr_t is a null pointer constant, and that an integral null pointer constant can be converted to std::nullptr_t. The opposite direction is not allowed. This allows overloading a function for both pointers and integers, and passing nullptr to select the pointer version. Passing NULL or 0 would confusingly select the int version.

A cast of nullptr_t to an integral type needs a reinterpret_cast, and has the same semantics as a cast of (void*)0 to an integral type (mapping implementation defined). A reinterpret_cast cannot convert nullptr_t to any pointer type. Rely on the implicit conversion if possible or use static_cast.

The Standard requires that sizeof(nullptr_t) be sizeof(void*).