网络寻租

Programmer, Gamer, Hacker

GNS3介绍,安装和使用

| Comments

GNS3是一个虚拟网络的工具,用它可以学习如何配置局域网,以及在实际进行物理配置之前测试是否工作正常.

我为什么要研究这个工具呢? 因为现在我的家用网络有一些需求需要进行复杂的路由配置, 实际配置出现问题很浪费时间, 不如用一个虚拟工具来测试研究. 如果你对如何搭建局域网或者有类似建网需求, 可以考虑用这个工具.

文档在这里, 我就不重复写怎么安装了. 在安装之前, 我先讲一下原理, 知道了原理, 后面过程会顺利很多.

原理

GNS3的底层是Dynamips, 一个虚拟Cisco路由器的模拟器. GNS3同时它也支持其他的虚拟系统, 比如Vmware, Qemu, Virtualbox, docker等, 用这些虚拟化工具来模拟路由和主机.

Dynamips是基于Linux的, 所以在Windows和MacOS下面, 为了能够正常使用, 需要安装一个GNS的虚拟机(里面安装的是Ubuntu), 因为它里面需要跑虚拟化(虚拟路由设备或者主机), 所以会出现嵌套虚拟, 推荐使用Vmware来安装, 用VirtualBox性能会比较差. 如果你是Linux系统, 建议直接用GNS Server.

GNS Server是GNS的后端, 一个python写的管理系统, 它会根据前端的配置, 创建对应的虚拟化系统, 比如你创建了2个主机(VPCS), 一个路由(比如用Qemu虚拟的RouteOS), 它会创建两个VPCS进程, 用Dynamips虚拟化一个路由, 把他们连接起来.

实际执行的命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# qemu RouteOS
/usr/bin/qemu-system-x86_64 -name RouteOS-1 -m 128M -smp cpus=1 -enable-kvm -machine smm=off -boot order=c \
  -drive file=/home/halida/GNS3/projects/routeos_simple/project-files/qemu/f280f531-91cd-4290-a61b-98d3299a2bb7/hda_disk.qcow2,if=ide,index=0,media=disk \
  -serial telnet:127.0.0.1:5000,server,nowait \
  -monitor tcp:127.0.0.1:54263,server,nowait \
  -net none -device e1000,mac=00:8f:b6:2b:b7:00,netdev=gns3-0 \
  -netdev socket,id=gns3-0,udp=127.0.0.1:10002,localaddr=127.0.0.1:10001 \
  -device e1000,mac=00:8f:b6:2b:b7:01,netdev=gns3-1 \
  -netdev socket,id=gns3-1,udp=127.0.0.1:10003,localaddr=127.0.0.1:10000 \
  -device e1000,mac=00:8f:b6:2b:b7:02 \
  -device e1000,mac=00:8f:b6:2b:b7:03 \
  -nographic

# vpc
/usr/bin/vpcs -p 5001 -m 0 -i 1 -F -R -s 10002 -c 10001 -t 127.0.0.1 startup.vpc

参数里面会做几件事情: 创建虚拟的网口, 绑定在本地机器的特定端口上面, 然后各个进程会通过这些端口来进行通讯. 同时也会把管理端口用telnet暴露出来, 方便前端用Console命令连上去配置.

安装过程

因为GNS的工具链主要在Linux, 我倾向于用Linux来装这样的测试环境. 所以里面推荐的GNS VM我就没有去装了.

安装完毕之后, GNS是不自带路由器的镜像的, 它提供一些简单的虚拟设备, 比如VPCS, 它其实就是一个单独的进程, 模拟一个主机设备, 带有设置IP, Ping等简易网络工具. 你需要自己导入路由的设备.

如果你是要模拟Cisco的设备, 可以在这里下载, 我是用来测试RouteOS的环境的, 直接在官方网站下载ISO镜像, 本地用Qemu安装.

选择虚拟系统: 如果是Cisco的路由器, 没得说, 只能用Dynamips, Dynamips一定要设置Idle-PC, 减少CPU性能消耗. 如果是其他基于Linux的路由系统, 在Linux下面, 我觉得Qemu比VirtualBox和VMWare都好用, 它性能更好一些. 当然用Docker这种内核共用虚拟性能会更好, 不过我没有尝试.

GNS下安装RouteOS, 首先要去官方下载ISO镜像文件, 然后执行命令行:

1
2
3
4
# 创建镜像文件
/usr/local/bin/qemu-img create -f qcow2 routeros-6.15.img 200M
# 跑虚拟机, 安装系统
/usr/local/bin/qemu-system-i386 -m 512 -enable-kvm -boot d -cdrom mikrotik-6.15.iso routeros-6.15.img

安装好之后, 就可以用GNS导入这个镜像, 进行使用了. 官方下载的ISO, 可以免费使用一天, 用来测试问题不大.

模拟实验

我做了两个模拟实验, 用来学习GNS的使用.

第一个是简单的RouteOS连接两个主机, DHCP分配IP地址.

image

用Console连上RouteOS-1, 进行这样的配置:

1
2
3
4
5
6
7
8
9
10
# 创建一个bridge, 把端口都连接起来
/interface bridge add
/interface bridge port add interface=ether1 bridge=bridge1
/interface bridge port add interface=ether2 bridge=bridge1
# 创建 dhcp, 给大家分配IP地址
/ip address add address=192.168.10.1/24 network=192.168.10.0 interface=bridge1
/ip pool add name=dhcp-pool ranges=192.168.10.10-192.168.10.254
/ip dhcp add name=dhcp-main interface=bridge1 address-pool=dhcp-pool
/ip dhcp network add address=192.168.10.0/24 gateway=192.168.10.1 netmask=24
/ip dhcp enable 0

然后就可以进到两台机器的Console里面, 执行ip dhcp自动获取IP地址, 用ping去看是否可以连接到另外一台机器.

第二个是简单的多路由通讯方案:

image

三个路由分别管理一个网段, 然后每个网段都可以通过路由的设置, 联系到其他网段里面的机器.

这里只列出来RouteOS-1的配置, DHCP部分和上面重复, 就不写了:

1
2
3
4
5
6
# 设置连接到其他路由器端口的IP
/ip address add address=172.16.10.1/30 network=172.16.10.0 interface=ether1
/ip address add address=172.16.12.1/30 network=172.16.12.0 interface=ether2
# 增加路由, 对方网段从哪里走
/ip route add dst-address=192.168.20.0/24 gateway=172.16.10.2
/ip route add dst-address=192.168.30.0/24 gateway=172.16.12.2

在新笔记本上安装Kdeneon

| Comments

最近我2012年底买的rmbp电脑越来越不给力,于是打算换一台新的笔记本,操作系统选回Linux. 为什么要用Linux而不继续买苹果呢,因为看新的苹果笔记本没有什么大的改进,还有我慢慢不喜欢苹果的软件锁死策略了, Linux可选性更高也更适合开发工作.

新的笔记本我选择Precision 5520 4K屏幕版本.价格比较贵(2万多). 为什么选这个呢,因为是我的主打生产笔记本,期待能够长期使用就选商用版本, 屏幕好一些可以坚持比较久,也对自己眼睛好点.

具体笔记本长什么样

见图册.

笔记本到货之后检查外观,检查系统配置是否和自己买的一样,检查屏幕是否有坏点.

安装Linux

现在回到主题,笔记本拿回来还是要安装Linux的.我选择Kdeneon作为发行版. 因为我对debian系比较熟悉,同时也更喜欢KDE桌面.KDE官方网站推荐这个版本.

官方网站下载稳定版Kdeneon, 下载之后检查了一下checksum防止下载错误,然后用UNetbootin烧录到USB闪存上面准备安装.

第一个坑:无法进入Live系统.查了一下发现是开源的nouveau驱动不支持新版的Nvidia显卡驱动,需要在启动的时候关闭,设置方法: grub里面Linux那一行尾部加上 nomodeset,之后就可以进入Live系统了.

系统安装好之后也要改,修改文件/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT后面加上nouveau.modeset=0, 之后执行sudo update-grub.

系统安装好之后,可以自动识别一下显卡驱动,执行sudo ubuntu-drivers devices,然后根据提示,安装对应的驱动版本,比如:sudo apt install nvidia-375.

第二个坑:磁盘无法识别,系统安装过程中提示Ubi-partman failed with exit code 141,发现是因为硬盘选项SATA->RAID中,用到了Intel RST driver,现在开源系统还不能很好地处理,需要换成其他设置.

第三个坑:无法休眠,我已经习惯苹果笔记本的合起来休眠功能,但是系统装好之后,却发现只有Sleep,却没有Hibernate. 找了一下, 发现是需要关闭Secure boot,不然无法控制休眠.回到BIOS关闭之后,执行systemctl hibernate成功了.

但是在KDE下面还是没有办法使用Hiberrnate,我下载了KDE的电源控制UIPowerdevil,看到原理是ibus查询org.freedesktop.login1.Manager的CanHibernate,后端是logind.根据这篇文档,增加了logind允许使用Hibernate的配置就可以了.

第四个坑:中文输入法.系统安装好之后没有UI设置如何选输入法,以及什么中文输入法比较好,找来找去,还是用ibus-pinyin吧. 安装:sudo apt-get install ibus-qt4 ibus-gtk ibus-gtk3 ibus-pinyin,启动执行ibus-setup.

但是各个窗口都没有办法输入中文,怎么办?查了以下,设置了环境变量之后,窗口才会响应输入法,环境变量设置方法如下:

1
2
3
export XMODIFIERS="@im=ibus"
export GTK_IM_MODULE="ibus"
export QT_IM_MODULE="ibus"

其实不用自己手动选择,用im-config,它会修改~/.xinputrc,增加run_im ibus,在进入桌面环境的时候设置这些环境变量. 但是终端里面的环境变量还是要手动加到自己的shell初始化脚本里面.

第五个坑:4K屏幕分辨率,因为屏幕分辨率很高,窗口都会很小,在KDE下,可以通过设置Display->Scale解决. 不过还是有很多非KDE的程序,比如Steam,TeamViewer没有办法改,他们没有用到Qt的基础架构就没有办法scale了. 我现在暂时没有找到简单的解决方案,就放着吧.

第六个坑:PPTP客户端,设置好了之后,可以连接,但是连接之后本地的DNS死活解析不到,实在找不到原因,莫非是因为本地安装的dnsmasq的问题?现在只能用kcptun加ss解决问题.

好吧弄了那么久,终于可以正常使用系统了.

常用软件

这些是我常用的工具:

  • 基础支持: build-essential openssh-server default-jre curl
  • 常用软件: tmux zsh tree etherwake
  • 开发相关: emacs git-core ack-grep mysql-server redis-server

然后一些手动安装的工具:

  • Chrome: 官方下载
  • Steam: 记得安装源里面的,官方下载的安装有问题
  • proxychains-ng: github下载编译好的可执行文件
  • ss: 源里面就有
  • Dropbox: 官方下载
  • OverDrive: Google Drive linux客户端,需要购买

开发环境相关软件:

  • Virtualbox: 官方下载就好
  • oh-my-zsh: zsh配置环境
  • rvm: ruby环境
  • prax: linux下类似pow的工具,可以输入域名:app.dev,自动启动和访问本地的ruby项目.

研究如何给本地机器绑定域名

| Comments

我家里有一些机器,这些机器上跑了一堆虚拟机,虚拟机都直接桥接网卡, 这样每台机器都可以暴露出来给局域网访问。为了访问方便, 每个机器最好用名称访问,而不是用IP地址。 例如:两个虚拟机IP: 192.168.1.11,192.168.1.12,我希望可以用vps-sql,vps-dev的方式访问。

首先设置路由器的DHCP服务器,把这些机器的IP地址固定, 然后直接改自己电脑的/etc/hosts:

1
2
192.168.1.11 vps-sql
192.168.1.12 vps-dev

但是所有需要这个列表的机器都要改一遍,有什么更好的办法呢?

我的路由器是RouteOS,可以修改默认推送的DNS设置,以及增加DNS cache。 加了DNS cache之后,就可以直接访问了。

但是又有一个问题:我的工作用机器需要翻墙,翻墙了之后,就会用翻墙服务器的DNS,本地的DNS就取不到了。 万幸的是可以手动修改DNS采用本地的,不过用了本地的DNS,会被国内的GFW投毒, 获取一些国外网站域名信息的时候,DNS数据包会被劫持掉, 那么只有在本地搭建一个加密通讯的的DNS服务器。 话说回来为什么这么重要的基础服务居然还是明文的数据包传输?

我看了一下有dnscrypt,在本地的一台机器A上面装好, 把路由器的DNS设置为这个机器A就好了。 不过这样的解决方案不是很稳定,如果本地机器A挂掉,那么局域网就没有DNS服务,大家都不能上网了。

那么还有一个办法:就是注册一个短域名,把这些机器都绑定成子域名。 虽然这样会把本地网络的信息暴露给了全世界,但是想了一下也没有什么风险。

找了半天,买了一个便宜的llj.clicks域名,配置起来,总算完美地解决了这个问题。

长时API调用设计方案

| Comments

App B提供一个计算服务,App A需要访问这个服务。可以有两种模式:Pull和Push,各有优缺点。

App A请求App B之后,B返回Job ID, Pull模式下,A定时获取一下Job执行状况,当Job完成之后,A获得结果。 Push模式下,B完成请求之后调用A的Callback,发送结果给A。

Pull模式下网络通讯消耗更多资源,并且不能第一时间返回结果。Push模式需要AB端都提供接口,复杂度更高,并且callback有可能丢失请求。

伪代码如下:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Pull模式

# App A
result = HTTP.post "B/api/works", {type: 'square', value: "12"}
result == {job_id: 12, status: "init", percent: 0}
sleep 3
result = HTTP.post "B/api/jobs/12"
result == {status: "running", percent: 30}
sleep 3
result = HTTP.post "B/api/jobs/12"
result == {status: "done", percent: 100, result: 144}

# Push模式

# App A
result = HTTP.post "B/api/works", {type: 'square', value: "12", callback: 'A/api/check_job/:job_id'}
result == {job_id: 12, status: "init", percent: 0}

on 'api/check_job' do
  handle_result(params)
end


# App B

on 'api/works' do
  job = Job.create(params)
  Worker.perform_async(job.id)
end

on 'api/jobs' do
  Job = Job.find(params[:job_id])
  Job.as_json
end

class Job < Model
  def perform
    case self.type
    when 'square'
      self.percent = 10
      self.status = :running
      self.save

      sleep 3
      self.percent = 30
      self.save

      sleep 3
      self.result = self.value ** 2
      self.status = :done
    end
    if self.callback
      HTTP.post self.callback, self.as_json
    end
  end
end

class Worker
  def perform(job_id)
    job = Job.find(job_id)
    job.perform
  end
end

Ruby没有做到编程语言应该有的优化

| Comments

Ruby语言很慢。是的,这是一个设计缺陷。

我们知道Ruby语言的执行方式是,首先编译成虚拟机字节码,然后丢给Ruby虚拟机执行。 其它类似这样做的语言也很多,比如C#,java,python,但是为什么Ruby比他们慢很多?

首先,我们看合理的这种编译到字节码的语言应该如何优化。比如java。 首先是语法解析(parse),把文本转换成抽象语法树(AST),然后经过编译和适当的优化,变成字节码。 然后丢给语言虚拟机,用JIT机制转换成机器代码。

这样一套做下来,代码最后会变成机器语言的代码,执行速度从理论上,比传统的编译到机器代码的语言更优(因为机器代码是动态生成的,可以根据运行状况改动)。

但是Ruby语言很多都没有做到。JIT这么难就不说了,语言的编译和优化,因为动态类型,很多优化也没有办法完成。最基本的AST缓存或者字节码缓存(python语言有做), Ruby也没有进行,可能是因为发现Ruby太动态了这方面优化不了吧。

同样的,内存上面的优化,Ruby也很难进行。这个算是所有动态语言的缺点。 静态语言的对象基本只要带属性,动态语言的对象还要带上方法表,函数和方法调用也要存名字,而不是直接引用地址,没有简单的办法优化。

虽然现在机器的性能很高,应用的瓶颈也往往不在CPU端和内存端,但是慢就是慢,本来应该有办法做好的地方做差了。

怎么弥补?首先要语言本身可以定义类型。但是这样Ruby就不是Ruby了。

Ruby需要一个静态类型验证系统

| Comments

越用Ruby,越觉得Ruby简陋。很多其它现代语言有的特性,Ruby都没有。其中一个就是静态类型验证系统。

Ruby语言里面,是不需要定义函数的参数,以及变量的类型的,这样带来的好处就是写程序更简便了,这个被大家称为是优点。 但是实际上,这是一个缺陷。为什么呢?

程序在执行的过程中,如果不知道一个变量的类型,只能动态去判断变量是什么,动态地查找处理变量的函数, 比如一个方法调用:a.run(b),就要去查找a的run方法,然后传入b参数。 这样造成每次函数调用,都会进行一次判断和查找,极大地降低程序执行速度。

另外一个问题就是,当传入的参数不正确(比如a没有run方法,或者run只接受一个参数),只有程序实际执行的时候,才会知道这点。 一方面要在函数和方法调用的时候来判断(更慢了),另外一方面本来能够静态识别出来的错误,留到了运行时。

更可怕的是,当传入的参数类型错误的时候,不能立刻就知道,而是要等到很久之后才会被发现, 这个时候你根本不知道这个参数是什么时候传进来的,Debug变得非常困难! 其它语言定义了类型,在编译的时候就可以发现这样的错误,但是动态类型语言,比如Ruby/Python就没有办法。

在实际进行Ruby编程的时候,我深刻地体会到了这几点。 尤其是项目变得很大的时候,执行速度不说,出现问题找Bug变得很困难, 程序可靠性没有办法通过编译阶段发现,而是只能留到执行时(testcase), 并且执行时也做不到其它静态语言级别的函数参数类型验证。

而在其它现代语言里面,类型定义不再向以前一样手动配置那么痛苦了。 比如在C#里面,我们可以定义函数参数的类型,以及所有变量的类型,也可以不定义(dynamic),做到和Ruby一样的效果。 但是还有更好的语法(var),程序语言自动给你做好类型定义,不用自己手写了,方便很多。

综上所述,静态类型验证系统是现代程序语言必备的一个功能,Ruby不应该缺少这样的功能。 Matz本人也说,下一阶段会进行这种系统的设计。 不过我觉得这么大的改动,只有在程序语言开始设计的时候才能做出,Ruby现在已经进入成熟阶段,再改就很难了。

如果不是Rails,我可能会考虑其它语言,但是谁让web开发框架里面,Rails生态圈最好最成熟呢。

Ansible介绍和服务器管理思考

| Comments

旧的服务器管理,基本上就是用ssh登录到服务器上面,进行一些操作。需要做的事情一般是:定期安全更新,新版本发布,新应用安装等。 这样有很多缺点:人工操作引发错误,服务器状态无法跟踪,人工操作繁琐耗时等。

我觉得好的服务器管理方式应该是这样的:

  • 能够定义服务器的功能,通过写程序或者配置的方式说明服务器到底是怎么样的
  • 通过这个定义,自动化地配置服务器
  • 可以手动或者自动修改定义,更新整体的架构
  • 整个过程不要引入太多的复杂度,更好地反映服务器管理的本质

以前我学习了一段时间的chef,整体架构偏复杂了。因为是server/agent架构,服务器上面要跑一个chef的监控程序, 这样对于大规模的服务器来说是性能更好,但是对于大多数小公司来说,没有agent的模式就足够用了。执行速度上也偏慢。

现在重新学习了解了ansible,觉得在复杂度和易用性上面平衡得很好。主要有几点:

  • 和host服务器的通讯采用ssh的方式,host不需要安装额外的软件,除了python-simplejson
  • module插件是传输一个python文件到host执行,参数命令行传入,简洁快速
  • 整体架构上面尽量减少了复杂度,概念上只有playbook – role – module,我觉得足够满足抽象了

用ansible这种服务器配置管理工具,我可以做到以下事情:

  • 设置翻墙/下载服务器,需要的时候可以快速创建
  • 定义公司的服务器架构,进行归一化配置,自动更新
  • 遇到性能瓶颈或者需要更新服务器的时候,快速创建应用服务器

以后小规模的服务器管理,就变得很简单了。

2016年度总结

| Comments

又到一年总结日。这一年各大城市房价暴涨,以前买不起房子的现在更买不起了。 国际形势变化快,欧洲沦陷,中东一团糟,美国缓慢增长, 中国没有现象中那么差了,甚至成为了相对更自由的国家。 当然这个只是表象,中国还在继续向左走,希望以后不要变得太差。

去年

2016年,我工作上面没有什么成果,慢慢做了一些小系统,工作的效率不是很高。 学习上,深入一些研究了Racket语言,但是并没有实际做一些项目。 因为有结余,开始研究理财,东看看西看看,大致了解了市面上的一些投资产品,也没有深入。 之后发现了水库论坛,开始了解房产的一些知识。

本年可以列出来的一些重要事情:

  • 过年给老婆的亲戚拜年,完成了任务。
  • 年初和老婆去日本旅游。可惜没看到樱花。
  • 年中终于搞定了装修,去年乐从买的沙发到货了,然后去杭州宜家买了剩下的家具。
  • 按照计划,老婆怀孕,明年生。
  • 考虑小孩出生要用车,研究了汽车,最后决定,还是滴滴打车方便。
  • 去杭州参加了一个旅游社区活动,去上海参加ruby聚会,去苏州上海考察了房价。
  • 买了自行车骑行。
  • 买了电脑

回顾

过去的一年生活节奏又放缓了,工作学习健康生活都没有提高效率,反而下降了。 去年的目标也没有完成,希望下一年从微观上做好。

下一年

  • 坚持运动。
  • 研究好理财,让财富可以积累(房产或者其它)。
  • 积累技术和业务设计:设计成熟网站,坚持打基础:弄通网络,linux系统,抽时间做业余项目。
  • 阅读太少,完成日常阅读。
  • 英语练好:能够无障碍和外国人交流。
  • 带小孩。

以上。

水库论坛告诉我什么是炒房

| Comments

我现在家庭和工作已经稳定,每个月会有一笔存下来的的工资收入,因此如何善用这部分的工资成为我现在的目标。

考察了理财产品,以及看了一些书籍,看了一些普通老百姓可以接触到的投资产品,比如中国股市,债券,黄金,美国股市等, 发现很专业的投资领域估计不适合我,因为时间的机会成本:投入在工作上会收益更大一些。 最后看了各方讨论,一般的结论是:对于非专业投资者,定投一个正收益的资产(比如美国股市ETF),长期收益率还是最高的。

但是后来不知道什么渠道看到了水库论坛,发现完全不是这样。 首先,非专业投资者的傻钱投资收益率一般是不会很高的,根本跑不过通货膨胀。 然后就是有一条康庄大道可以走,就是买房。房子每年涨价超过10%,加上房贷的资金杠杆,收益率远远超过其它的理财产品,风险又很低。 只要还有大量的看空人群,买房是普通人最好的投资方式。

好,下面开始给大家介绍水库论坛。

水库论坛概况

水库论坛包括一个公众号(Shuiku-net)和一个网站shuiku.net,后面维护的人是一个老的上海炒房客,叫欧成效,专职炒房。估计现在资产过5亿吧。

网站是他以前创建的一个用来讨论炒房的社区,社区的规则也是很有特色的,大家可以看看。

微信公众号是2015年创建的,里面整理和收集了水库论坛历年来他写的精华文章,比较成体系,这里是文章的目录。 强烈建议大家有时间就去看一遍。看两遍。

水库论坛讲了什么

微信里面的内容,分体用术,列出来以下内容:

首先是体。就是他思考的理论基础。主要是奥派经济学。以前有一个铅笔经济学社(现在不行了)在推这个。主要内容就是科普经济学的常识。 比如:交易带来价值,干扰交易减少价值,供需曲线等。这些我们应该都知道。 他文章重点就是:利用这些基本的经济学规律,粉碎我们既有的一些错误观念,比如: 实业兴国,以民为本,完善福利,抑制贫富分化,刺激经济,扶植国货,拉动内需,取消公路收费,少生孩子多养猪,义务教育,降低医疗费,加强监管,油气国营,提高产品质量,保护农民,严打囤地,鼓励自住,加税降房价,股票救市 算是脑子非常清楚的人了。

然后是用。就是如何用经济学知识赚钱。是他针对房地产市场的分析以及解释。内容包括: 房地产市场的细分,什么才是职业炒家,上海房地产市场的概况,以及土地出让金等等。 粉碎我们关于房地产领域的一堆错误观念:比如中国的房产比美国的房产更好,根本没有什么土地私有,土地出让金和房地产税其实是一回事。 然后是讲了很多我不知道的内容:比如房地产市场不是一个市场,而是好几个市场(本地人,外地人,外国人,一手房,二手房), 炒房的各种流派,流派最后为什么只有最后一种屯房流,上海的房子价格是如何涨起来的,香港楼市真正的崩溃历史,等等。

之后是术:具体实际操作的一些技巧。包括:

  • 财务部分:如何获得更多的金钱,如何利用信用卡,如何保证现金流,资金的分层,如何精算贷款等。
  • 房地产相关:如何破限购,如何构建房产资产包,如何挑房子之类。

还有一些零零散散的,包括军事,政治,人文的文章,也写得不错。都可以看。

精华

我当时看到这个微信公众号,忍不住一口气看完了,花费了大概一周的时间,后面又补看了一遍。主要是因为内容太精华了。 打破了我非常多的旧观念。我已经被他说服,理财的精力要放在买房上面。 同时虽然文章内容是关于房地产的,里面也可以抽出来一些共性的因素,切换到其它的市场使用。

强烈建议大家都去看看,全部看一遍,看两遍。

考虑买电脑

| Comments

我现在用的rmbp是2012年底买的,用起来越来越不舒服了。主要原因是当时为了省钱,没有买256G的版本,而是128G, 现在存储空间越来越不够,每个季度都要手动清除一遍内容。开始考虑替换笔记本。

新的rmbp出来,但是我已经不再想用苹果的笔记本了。一方面是其它厂商(比如dell,hp,华硕,联想)的高端笔记本已经追赶上来, 另一方面是苹果的锁定策略把用户绑定在设备上面:新版的rmbp用了touch bar,也是一个通过体验来锁死用户的方法。 虽然苹果的体验是最好的,但是使用上并不想根据苹果的方式来,就会千难万难。所以我考虑下一个笔记本安装linux。 我一直是kde的粉丝,现在有了针对kde的ubuntu定制版KDE neon,我会考虑使用它。

image

经过研究,现在主流笔记本对linux支持比较好的是联想和dell,原先我给爸爸买了海淘代购的联想thinkpad,但是感觉没有想象中的好。 只有考虑dell。dell的笔记本分民用商用XPS工作站,我考虑工作站precision系列以及高端机XPS。 发现现在主流笔记本一般15寸才会有4核CPU,缺点是体积大一些;不过dell xps采用微边框,体积其实还好。

image

继续研究配置,发现笔记本都会有功耗和散热问题,性能会比台式机缩水一些:CPU要么是低压,要么虽然是标压但是散热不良会有限制。 比较起来台式机的价格和性能有优势,因此很多人用便携本+台式机工作。我每天在家,这种工作方式应该适合我。

我好久没有研究台式机了,发现现在的接口标准变化了很多,还有各种器件的型号和厂商要再再研究研究。 最后得出适合我的机器:

  • CPU:i7-6700 编译不会慢,但是价格也不会太贵。我也没有超频的需求
  • 内存:16G一张,以后可以最多拓展到64G,现在16G对于开虚拟机也够用了
  • 显卡:主流稳定的显卡就可以,并不会追最新的游戏,而是等steam打折入

组装还是品牌机?组装机更便宜,但是要自己装,以及可能稳定性差一些。 品牌机的话有质保,厂商考虑应该比自己更专业,但是价格贵好多。 我考虑稳定和不折腾,还是看看品牌机。还是回到dell。为什么选择它呢?看官方网站上面的文档很细致, 以及公司背景(dell被创始人重新回购),比较起来联想偏商业,HP胡搅瞎搞,华硕台企, 感觉dell做事还是比较靠谱的,算是比较稳重的一个厂商。

台式机dell也有民用商用XPS工作站,民用商用普通电脑性能达不到我的要求, 工作站很多是图形方面或者高性能运算的,超出了我的需求(可以插1T内存的主板), 最后还是用XPS台式机8910。刚好双11打折,就买了(加了上门保修和无线鼠标键盘,7千出头)。 dell的模式是下单后生产,等了一个多星期才到货。

image

配置如下:

  • 处理器 第六代智能英特尔® 酷睿™i7-6700 处理器 (8M 缓存, 最高至 4.0 GHz)
  • 操作系统 Windows 10 家庭版 64位 简体中文
  • Microsoft 软件 Microsoft Office 家庭与学生版
  • 安全软件 McAfee Live Safe 12 个月 订阅
  • 戴尔服务: 硬件保修服务 3年 Premium Support: 上门服务 (消费者客户)
  • 光驱 托盘载入式 DVD光驱(读写 DVD/CD)
  • 键盘 Dell KM636 无线键盘&鼠标 黑色, 英文
  • FGA Module VMAX1705_135_R/CN/HK/TW/BTO
  • 基本系统 XPS 8910
  • 硬盘 2TB 7200 rpm硬盘 + 32GB M.2 SSD 缓存
  • 显卡 NVIDIA® GeForce® GTX750Ti 含 2GB GDDR5 显卡内存
  • 无线 英特尔® 3165 1x1 802.11ac Wi-Fi 无线 LAN 和蓝牙
  • 内存 16GB 单通道 DDR4 2133MHz (16GBx1)
  • 无线驱动程序 无线 3165 驱动器
  • Bundle XPS 8910-D18N8
  • 芯片组 H170

官方网站上面有完整拆装文档,看这个可以了解这个产品的结构。 里面通过电源横移来节省空间还是很有意思的。dell allenware台式机也用了这个设计。 内置无线网卡省得我拉线,多了一个用不到的光驱。

image

到货了之后检查状况良好之后使用。系统预装windows10,暂时我还是用这个系统,因为还有一些windows下的开发要做。 机器存储采用2T硬盘加32G SSD缓存,这种架构我是第一次见,采用了Intel的RST快速存储技术, 把SSD当作硬盘的缓存,同时兼顾大空间和快速读取的优势。实际用起来还是不错的,不需要另外再买大空间SSD。 然后下载了几个steam的去年主流游戏(Bioshock Infinite),跑起来还不错。

以后开发就在台式机上面跑linux虚拟机,rmbp连过去操作和在浏览器里面看效果。 我重新买了一个rmbp的256G的存储拓展卡解决空间问题,如果出门就拷贝虚拟机到笔记本里面临时用着。 等明年黑五rmbp差不多该退休的时候,再考虑换一台dell的15寸XPS。

现在还缺一个显示器没有买:我用惯了rmbp,最好还是要高清4K屏幕,等下次发现有打折再买吧。