豆瓣电台加心歌曲导出到网易云音乐

“豆瓣电台爬虫”是我11年(没错,5年前)的时候开发的Chrome 应用。最开始是为了方便用户下载豆瓣加心歌曲列表的(也可以配合E音乐会下载列表歌曲)。期间很多的用户给我发邮件报告Bug、提意见。甚至有两位开发者主动提交Patch。时隔多年,期间一直有人在用,虽然是一个很小众的产品。但因为功能单一,我也很少维护和关注这个App。距离上一次更新大约有一年之久了。

Chrome Store对这个豆瓣电台爬虫的统计数据
Chrome Store对这个豆瓣电台爬虫的统计数据

不过,上周收到一位叫做Junting的用户的邮件:
作者您好
我是您的豆瓣电台爬虫的用户,想给您提点建议
因为现在本人也在用网易云音乐,它是支持导入酷狗和酷我的音乐的歌单的
有没有什么方法,能让爬虫导出他们的格式呢?这样就能放入网易云音乐里面听了。那个E音乐盒似乎资源太旧了,很多歌都找不到呢。

Junting的建议给我提了醒,如果可以直接把加星列表下载并导入网易云音乐的确是一个很好的功能,瞬间提高了这个App的实用性。着手研究了下酷我音乐列表的格式。发下网易云其实仅利用了歌曲名和歌曲作者两个字段匹配歌曲的。于是... 在花了很少的时间之后,这个新功能便上线了!

豆瓣加星歌曲-->酷我音乐列表-->网易云音乐:
1. 在Chrome App Store中下载“豆瓣电台爬虫(加星歌曲列表导出)
2. 运行豆瓣电台爬虫(等待时间是和列表歌曲数量成正比)
3. 在结果页保存酷我音乐列表到本地
4. 网易云音乐客户端,点用户头像,找到导入歌单项,选择酷我音乐列表即可

希望它能为生活增添一些方便~

Online LaTeX Editor ShareLaTeX

一直以来是在Office电脑(Windows 7)编辑Latex,所以LATEX Suite在用CTEX。但是有的时候在宿舍会换用Mac air,面临选择是重新安装Editor,还是延续之前的做法(VPN + Remote Desktop到Office的电脑)。但是网速的原因,Remote的做法导致使用不是很顺畅。

近日发现了一个Online LaTeX Editor ShareLaTeX。尝试了把tex file upload,的确可以轻松编译,编译速度,跳转各方面也都不错,而且可以和Dropbox配合做Sync~

在我推广下,实验室很多同学都使用了/过这个服务。足以说明它的好了 :)

XEN 4.4 Source Code安装以及嵌套虚拟化

前言

为了方便对XEN的修改调试,我们打算先在一个VM里面安装XEN,最后再部署到Pyhiscal Host去做测试。

第一次,选择了VMWare。创建虚拟机,安装XEN,很顺利。但是Reboot之后进入不了Dom0,直接卡在启动界面。尝试了多次(包括更好Host Ubuntu版本,VMware Workstation版本)以及各种网上找到的方案后,放弃。

第二次,尝试Virtualbox。直接用apt-get install xen-hypervisor-4.4-amd64,reboot,一切顺利。

网上已经有一些帖子显示他们用VMWare嵌套虚拟化成功的例子,都是一些1-2年前的帖子,怀疑新版VMWare和Ubuntu 14.04或者XEN的兼容有问题,或者是VMWare故意做了一些限制?待考察。

正文

其中我们还在一台DELL 9020上面用编译Source Code的方式对XEN 4.4在Ubutnu 14.04上面做了安装。整个流程如下。

[Install dependency]
sudo apt-get install gcc make binutils zlib1g-dev python-dev libncurses5-dev libcurl4-openssl-dev libx11-dev uuid-dev libyajl-dev libaio-dev libglib2.0-dev libpixman-1-dev pkg-config bridge-utils iproute udev bison flex gettext bin86 bcc iasl ocaml-nox ocaml-findlib cmake markdown figlet git libc6-dev-i386 texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial
[Download code && Build && Install]
wget http://bits.xensource.com/oss-xen/release/4.4.0/xen-4.4.0.tar.gz
// 解压缩
tar -zxvf ./xen-4.4.0.tar.gz

sudo ./configure --libdir=/usr/lib

sudo make dist
sudo make install

// 在上面做make的时候会遇到一个Error,和编译器gcc的设定有关系
vim extras/mini-os/tpmback.c:350:4: error: format ‘%d’ expects argument of type ‘int *’, but argument 3 has type ‘enum xenbus_state *’ [-Werror=format=] 
// 解决办法很简单,直接在第3个参数前添加(int*)就好

sudo update-grub

// update grub之后会有一个warning,是关于xen.gz的,所以把它remove掉
sudo rm /boot/xen.gz

// 编辑grub
sudo vim /etc/default/grub
// 注释掉里面的 GRUB_HIDDEN_TIMEOUT=0

sudo update-grub

sudo update-rc.d xencommons defaults 19 18
sudo update-rc.d xendomains defaults 21 20
sudo update-rc.d xen-watchdog defaults 22 23

sudo reboot
// choose Ubuntu with XEN hypervisor to boot

[Install Xen Tools]
apt-get install xen-tools
// when encounter whether replace scripts, always choose "no"
edit /etc/xen-tools/xen-tools.conf and uncomment dir = /home/xen

[Network Configuration]
set up linux bridging in Xen
sudo apt-get install bridge-utils
Edit /etc/network/interfaces
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet dhcp
    bridge_ports eth0
auto eth0
iface eth0 inet manual
Restart networking to enable xenbr0 bridge:
sudo ifdown eth0 && sudo ifup xenbr0 && sudo ifup eth0

[Install XEN Guest with DHCP]
sudo xen-create-image --hostname=xen0 --dist=trusty --mirror=http://ftp.cuhk.edu.hk/pub/Linux/ubuntu --role=udev --pygrub --force --verbose --dhcp --memory=1024Mb


期间参考了如下文档:

Summary and Tips about Xen

PART 1 - XEN Scheduler Summary
There are 3 schedulers supported by Xen - Comparison of the three CPU schedulers in XEN

(In the latest version of Xen)

The Credit Scheduler

  • is the default scheduler 
  • The SEDF and BVT schedulers are still optional

Each domain (including Host OS) is assigned a weight and a cap.

  • Weight: A domain with a weight of 512 will get twice as much CPU as a domain with a weight of 256 on a contended host.  From 1 to 65535 and the default is 256.
  • Cap: optionally fixes the maximum amount of CPU a domain will be able to consume, even if the host system has idle CPU cycles. The cap is expressed in percentage of one physical CPU: 100 is 1 physical CPU, 50 is half a CPU, 400 is 4 CPUs, etc... The default, 0, means there is no upper cap.
  • SMP load balancing
    • automatically load balances guest VCPUs across all available physical CPUs on an SMP host.
  • Scheduling period
    • 30 ms (hard coded before  Xen 4.2, configurable in later version).
    • Non-preemptive

PART 2 - XEN Commands

[XEN Version]
sudo xm info

[Create Dom-U via DHCP]
sudo xen-create-image --hostname=xen.noise.2 --dist=precise --mirror=http://ftp.sjtu.edu.cn/ubuntu --role=udev --pygrub --force --verbose --dhcp

[Create Dom-U via Static IP]
sudo xen-create-image --hostname=xen.noise. --dist=precise --mirror=http://ftp.sjtu.edu.cn/ubuntu --role=udev --pygrub --force --verbose --gateway=10.50.2.1 --netmask=255.255.255.192 --ip=10.50.2.34 --memory=1024Mb

[Configuration]
sudo vim /etc/xen/xen.noise.6.cfg

vcpu='1'
memory='1024'
vif=['ip=10.50.2.30,mac=00:16:3E:54:92:7A']

[Launch VM]
sudo xm create /etc/xen/xen.noise.6.cfg

[List VMs]
sudo xm list

[Shutdown VM]
sudo xm shutdown [vm-id]

[Enter console]
sudo xm console xen.noise.2

[Check VCPU status]
sudo xm vcpu-list [vm-id]

[Set VCPU]
sudo xm vcpu-set [vm-id] vcpu-num
sudo xm vcpu-pin [vm-id] vcpu cpu

[Ubuntu mount: could not find any free loop device]
for i in $(seq 0 255); do
sudo mknod -m0660 /dev/loop$i b 7 $i
sudo chown root.disk /dev/loop$i
done

[Set memory]
xm mem-set [dom-ID] [megabytes]

关于下一代互联网架构

今天看了一些SDNNDN的学术八卦——是关于这两个技术以后发展的探讨。其中一位学术大牛很不看好SDN,说其类似于多年前的ATM一样会不久后消失。

当然这两者是用来解决不同的问题,本身没有太多可以比较的。仅仅就其发展来看,SND现在已经得到了工业界的很多支持,例如Google的B4 (SIGNCOMM'13)。而NDN大多还停留在学术界。

有的时候,这些大牛对于自己支持的技术/设计的推崇就像信仰一样,具有排他性。

不过最后我看到另外一个学者的言论,无论IP网络,SDN,NDN,它们的核心可以归结为3点:

  1. 大带宽
  2. 低延迟
  3. 高容错
我认为这个还是颇为有理。无论什么技术、设计,都是为了解决实际的问题,只不过各有优缺点,而被应用在不通的场景中。