一个网络访问故障的排查

故障描述:

一个Python程序,在我的Macbook Air上使用Gearman库访问Gearman服务器时始终报错:
Found no valid connections in list:
[<GearmanConnection 111.111.111.111:80 connected=True>]

问题排查过程:

  1. 我的另一台电脑的Linux系统下运行这个程序是正常的,所以证明Gearman服务器本身是好的,程序也是对的。
  2. 别人的Macbook Air/Macbook Pro上运行这个程序也是正常的,系统中的Python版本是一致的,证明这个程序在Mac OS X下并不存在兼容性问题。
  3. 111.111.111.111:80这个是一个从开发环境访问生产环境服务器的虚拟IP/端口,把Gearman服务安装到开发环境网络中222.222.222.222:4730,程序运行正常。
  4. 由于访问开发环境正常、访问生产环境异常,所以怀疑是网络原因。使用ping/traceroute命令访问111.111.111.111,都正常。用telnet 111.111.111.111 80尝试TCP连接,也正常。
  5. 在无线/有线之间切换网络物理连接方式,测试结果一样:本机与目标服务器之间网络通畅,TCP连接正常,但Gearman连接无法正常建立。并且同处于同一个网络中的其它电脑上运行一样程序都访问正常。
  6. 怀疑Gearman的Python库在某些特殊情况下有Bug,在里面加了很多print来打印日志,发现客户端在与服务器建立完连接后,在真正要通信时,连接又变成了断开状态。但由于不太了解Gearman库的实现细节,再要进一步Debug,存在一定困难,暂时放弃这个思路。
  7. 为了排查Gearman连接断开的原因,用Wireshark进行抓包。抓包的结果非常令人惊讶:在程序运行的整个过程中,没有抓到任何客户端与服务器之间通信的数据包。但是程序打印出来的日志却明明显示出连接是先建立再断开的。
  8. 至此,问题已经快要查清楚了:本机有个程序劫持了本机发起的网络通信,实施中间人攻击,造成Gearman连接异常。
  9. 用Python写socket程序尝试向不同目标发起各种TCP连接(后来意识到其实用telnet就可以了),同时用Wireshark抓包,发现本机发起的所有目标为80端口的连接都会被劫持。劫持的效果是如果通过80端口进行HTTP通信,劫持的程序就会充当一个代理服务器的功能,正常完成通信过程。但是一开始出问题的程序是在80端口跑Gearman的通信协议,所以这个劫持程序无法正确处理,造成了通信异常。
  10. 最后就是要找出是哪个程序实施了劫持,用了一个很土的方法:下载一个大文件,同时用netstat -na查出与服务器80端口通信的本地端口号(谁叫Mac OS X的netstat命令没有-p参数直接看是哪个进程的连接呢?),然后用sudo lsof -i :<local port>命令查出这个本地端口号的使用者。

真相大白:

Cisco AnyConnect Secure Mobility Client中自带了一个进程名为acwebsecagent的Web安全模块,这个安全模块不管VPN是否在使用,都会劫持本机所有的发往80端口的通信,具体它做了什么好事坏事就不得而知了。

找到了问题所在,网上搜一搜就能查到很多吐槽这个Web Security模块的贴子了,它会随着AnyConnect默认安装到你的电脑上(我的电脑系统是IT预装的,不然我装AnyConnect时肯定会手工把这个勾勾去掉)。解决问题的方法也很简单 ,一行命令卸载它:
sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

最好的简谱编辑排版软件JP-Word

本文是一则硬广告。

上大学时跟同学一起办过一份音乐小报,名为《白桦林》,虽然只办了一期就夭折了,不过在这期小报上试图排版朴树那首《白桦林》的简谱(附带吉他和弦)的经历让人难以忘怀。我那时坚信自己用Word排版复杂版面的水平已经到了出神入化的程度,但还是被这个简谱排版工作打败了。Word虽然是“所见即所得”,但是那排版好的谱子打印出来时,总是会有那么些对不齐或者走样。那时学校打印店打印一页A4纸的价格是1.5元,不舍得反复打印试验,最终还是通过剪刀胶水才把这个排版任务搞定的。

《白桦林》小报第三版。

《白桦林》小报第三版。由于Word版本和字体的原因,现在看到的跟当年排出来的效果有差别。

上大学时,经常玩一个叫HappyEO的电脑键盘模拟电子琴的软件——强势插入,再打个广告,HappyEO是用电脑键盘(也可以接MIDI键盘)模拟电子琴的最好的软件,没有之一。因为对这个软件的喜爱,我跟HappyEO的作者有着较多的交流,一路见证着HappyEO电子琴和后来的iDreamPiano模拟钢琴等软件的诞生。2003年时,他告诉我他做了一个简谱排版软件,叫JP-Word

实话说,1.0的JP-Word一点也不诱人,粗糙的界面、鸡肋的图片输出和打印功能、封闭专有的文件格式实在不能让我提起太大的兴趣。加上对于我来说,平时几乎没有简谱排版的需求,所以对这个软件并没有太高的热情。接下来两三年时间,JP-Word慢慢升级到了3.0,功能丰富了一些,但没有什么本质的变化。

一下过了十年,JP-Word的作者突然告诉我,JP-Word出了4.0的新版本。这个脱胎换骨的新版本,着实可以用“惊艳”来形容。

JP-Word 4.0界面预览

JP-Word 4.0界面预览

不像五线谱打谱有自由的Lilypond,还有Overture、Encore等强大的商业软件。市面上简谱音乐软件并不多,优秀打谱软件更是少之又少。之所以我敢在文章标题上把JP-Word说成是“最好的”,个人认为主要有以下几点:

  • 独创的的“切换音符时值组合”功能。常见音符的时值组合不用一个个手工调整,音符输入后按几下空格键就自动组合好了。
  • 强大的歌词编辑功能。支持歌词自动对位,谱打完,歌词一打上去就自动对齐到它该去的地方。
  • 支持矢量PDF的输出。而且排版结果不管是布局还是字体,都非常美观,放到专业环境下用也毫无压力。
  • 开放的JPW-ABC格式。一改以前用专有格式的方式,新版本用了开放的纯文本来描述乐谱,为二次开发提供了便利。

JP-Word简谱编辑软件不是完全免费的,免费的版本只提供了部分主要的功能集,但折腾党可以通过手工写JPW-ABC的方式实现几乎全部收费版本的功能。

缺点也是有的,比如目前不支持直接播放乐谱和MIDI导出。不过Thanks to开放的JPW-ABC格式,完全可以写个简单的脚本,把JPW-ABC文件转换为MIDI文件。我正在尝试写个简单Python脚本,把JPW-ABC转换为Lilypond格式,然后借助Lilypond,可以直接生成对应的五线谱和MIDI文件。有兴趣可以关注我的Github项目jpw2lilypond,不过目前上面还只有一个很垃圾的Prototype(对象建模建错了,虽然基本功能在,但已经没办法往下写了),而且现在每天的时间都不够用,开发进度一定不会很快。

JP-Word 4.0的功能介绍与使用说明:http://www.happyeo.com/intro_jpw.htm

下载JP-Word 4.0免费版的地址:http://www.happyeo.com/downloads_jpw.htm

注册JP-Word的方法:http://www.happyeo.com/register_jpw4.htm

实践个人网站迁移HTTPS与HTTP/2

赶个时髦,把自己的博客进行了全站HTTPS改造,并升级支持了HTTP/2,总结在此,当作备忘。

很惭愧,虽然曾经做过几年Web安全产品,其实我自己并没有非常深入的去理解和思考Web安全更多内在的东西,所以可能文中的部分描述并不完全准确。很多内容参考了Jerry Qu的博客上的内容,都以参考文献的方式列在文章中,我这里只写结论,技术细节可以参考他的原文。

动因

HTTPS改造的好处当然是更安全。虽然对于一个博客网站来说,“安全”似乎并不是一个非常重要的因素,但是以国内现实的情况来说,使用HTTPS提供网站服务有一个好处就是可以避免网络运营商篡改网页内容(比如插入弹出广告)——其实吧,HTTPS以后,Chrome浏览器地址栏显示的绿色小锁才是吸引我迁移的真正原因,挺好看的。

HTTP/2从协议层面消除了传统HTTP的一些不足和缺陷,对我来说,直接的好处就是可以大幅度提高网页载入的速度。有关HTTP/2的前世今生,可以参考以下文章[1]。

HTTPS改造

证书

HTTPS改造的一个基本要素就是证书,在传统上有很多认证机构(CA)可以收费签发证书,比如大名鼎鼎的Verisign。现在也有很多公司可以提供免费或者廉价的证书,比如有名的StartSSL,以及最近很火的Let’s Encrypt

我先是尝试了StartSSL的免费证书,但是它只能签发有效期一年的免费证书,每年都得手动去更新证书是一件很让人头痛的事情。所以后来选定了使用Let’s Encrypt,虽然Let’s Encrypt的证书有效期只有三个月,但是可以方便的通过脚本来实现自动更新。

使用Let’s Encrypt的证书有两种方式,一种是使用他的提供的工具脚本,另一种是使用ACME协议。我目前使用的是ACME协议方式,参考[2]。如果用Let’s Encrypt的工具,参考[3]。我个人比较喜欢ACME协议方式,因为很轻量级,Let’s Encrypt自己的工具太过“全家桶”了,不够简洁明了。

主要的步骤如下:

  1. 生成一个帐号私钥
    $ openssl genrsa 4096 > account.key
  2. 生成一个域名私钥
    $ openssl genrsa 4096 > domain.key
  3. 生成证书签名请求CSR文件,通常至少包含祼域名和带www主机名的两个域名。
    $ openssl req -new -sha256 -key domain.key -subj "/"
        -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf
        "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) >
        domain.csr
  4. 在自己网站上配置一个可以从外部访问的目录,用来完成challenge。Let’s Encrypt会生成一个文件,你把它放在这个目录里,然后Let’s Encrypt如果能访问到这个文件,就证明了这个域名是属于你的。nginx配置类似于如下,配在80端口的Server里面:
    location ^~ /.well-known/acme-challenge/
    {
        alias /home/xxx/www/challenges/;
        try_files $uri =404;
    }
  5. 下载acme_tiny脚本,并运行,里面用到了帐号私钥(account.key)、域名私钥(domain.key)、CSR文件(domain.csr)和ACME challenge的路径,生成签发的证书(signed.crt)。
    $ wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
    $ python acme_tiny.py --account-key ./account.key --csr ./domain.csr
        --acme-dir /home/xxx/www/challenges/ > ./signed.crt
  6. 最后合并Let’s Encrypt的中间证书和我们自己的证书:
    $ wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem
        > intermediate.pem
    $ cat signed.crt intermediate.pem > chained.pem

Web服务器

我使用nginx作为Web服务器,启用HTTPS服务,只需要在原来的HTTP服务上加几行配置就可以了:

listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:
  EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:
  EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /home/user/path/to/your/chained.pem;
ssl_certificate_key /home/user/path/to/your/domain.key;
ssl_session_timeout 5m;

其中需要用到你自己网站的私钥domain.key,还有Let’s Encrypt给你签发并合并了中间证书的证书文件chained.pem。

SSL协议版本与加密算法

我上面的配置用的是CloudFlare推荐的配置,详细的讨论可以参考[4]。我这么配基本上放弃了对Windows XP + IE6的支持,但可以让Qualys SSL Labs给出的评分提高到A级。

WordPress

我的博客是用WordPress构建的,WordPress在很多地方都会把带协议的网站URL给存下来,造成无法透明的把HTTP改成HTTPS。暴力解决方法就是去它的数据库做全文替换[5]。

先把WordPress设置->常规中的两个URL设置改为https,然后去WordPress的数据库对已有的文章进行全局字符串替换:

UPDATE `<wordpress_prefix>_posts` SET post_content=
    (REPLACE (post_content, 'http://[domain name]',
    'https://[domain name]'));

其它页面嵌入内容

如果在HTTPS的页面上嵌入了非HTTPS的内容,比如跨站的HTTP图片,浏览器上的绿色小锁就会变成灰色了。如果是跨站的CSS或者JavaScript,在现代浏览器上可能会直接被禁止加载[6]。

解决的方案就是把src的协议去掉,直接写成//domain.com/path/to/image这样的形式,可以兼容HTTP和HTTPS。

但是有些源站根本就不支持HTTPS,或者虽然提供了HTTPS服务,但证书不合法,这么做就行不通了。比如我的页面右侧的饭否的图片,虽然饭否有HTTPS服务,但证书过期了,直接嵌入就会有问题。

我的解决方案也是简单粗暴的,直接在nginx里为这些网站相关URL做一个反向代理。比如,为了解决饭否图片的问题,我在我的nginx里加了以下配置,然后把饭否图片的域名换成我自己的域名:

location /u {
    proxy_pass http://b.fanfou.com;
    proxy_set_header Host b.fanfou.com;
    proxy_redirect off;
}

自动重定向HTTP请求

至此,HTTPS改造已经准备好了,重启nginx后就可以用HTTPS协议来访问网站,检查是否工作正常。主要检查证书是不是正常,另外还有看看有没有混杂非HTTPS资源造成页面加载不正常的。Chrome的Developer Tools可以帮助你排查这些问题。

如果一切正常,就可以考虑自动重定向所有的HTTP请求了,301跳转通常是最理想的方式。在nginx的80端口http服务器配置中添加以下的内容:

location / {
    return 301 https://$server_name$request_uri;
}

其它要考虑的问题

SNI:如果在nginx用server_name实现了单主机的多虚拟站点,那就会出现一个IP地址上对应多个域名的情况,这时服务器和客户端都需要支持SNI,才能在HTTPS的情况下正常工作。较新版本的nginx版本服务器都是支持SNI的,但IE6之类的老旧浏览器不支持。所以如果放弃老旧浏览器支持的话,SNI不是个问题。否则就只能保证在同一个IP上只启用一个域名的HTTPS网站,才能确保客户访问无障碍。

HSTS:虽然启用了HTTPS,但是用户在访问时如果没有显式输入https协议,现在的浏览器默认还是会先选用http协议,再由服务器进行301/302跳转,这时就有可能被劫持。目前的解决方案是在自己的网站上输出HSTS头,并把自己的域名加入HSTS Preload List列表里[6]。我没有启用HSTS,因为一但启用没办法撤销,万一以后不能提供HTTPS服务了,想降级为HTTP都没有机会了。

其它:对于个人小网站来说,也许前面的讨论基本够用。但对稍大的网站来说,要考虑的问题还有更多。比如:CDN支持、各子域名证书的管理模式、SHA1不安全证书与老版本浏览器兼容性、大量非HTTPS外部资源的处理、特殊客户端不支持302引流等等。

HTTP/2改造

新版的nginx已经内置了对HTTP/2协议的支持,所以完成HTTPS改造后,启用HTTP/2支持是一件相对来说比较简单的事情。

在nginx里HTTPS的listen配置中加入http2即可,当然不要忘记重新reload nginx:

listen 443 ssl http2;

在Chrome中可以安装一个HTTP/2 and SPDY indicator插件,这时打开HTTP/2网站时,地址栏右侧就会出现一个蓝色的闪电标记,证明这个网站已经支持了HTTP/2协议。

新版的curl也可以用来帮助检查HTTP/2是否工作正常,在curl网站URL时,加上–http2参数即可。别忘了,必须是用HTTPS协议才能支持HTTP/2哦。

说得这么轻巧,事实上很多系统中的nginx都不是可以支持HTTP/2的新版本,所以还需要手动编译新版的nginx。

nginx -V可以列出当前nginx编译时使用的configure参数,可以作为重新编译时的参考,在它列出的参数的基础上加上–with-http_v2_module参数,就可以启用HTTP/2功能了。

参考文献

[1] 凯文叔叔的网志 – HTTP/2

[2] Let’s Encrypt,免费好用的 HTTPS 证书

[3] Let’s Encrypt SSL证书配置

[4] 关于启用 HTTPS 的一些经验分享(二)

[5] 迁移 WordPress 博客至 HTTPS

[6] 关于启用 HTTPS 的一些经验分享(一)

2016新年好

2015年,我做了这些事:

– 写了3篇博客

博客空间总访问量66949 PageView(Google Analytics数据),出乎意料地比前一年上涨14.7%,但还是没有达到2013年时的水平。首页、在Linux下使用“360随身WiFi 2”calibre常见问题为Raspberry Pi 2编译内核模块这几个页面的PV占总PV的50%,2015年新写的文章中有一篇能排进前50% PV,也算欣慰。饭否发消息118条,包括照片19张。

– 自由软件相关

Richard Stallman的传记《Free as in Freedom》第一版中文版翻译工作在经历了各种坎坷和挫折后终于完成了,中文版正式命名为《若为自由故——自由软件之父理查德·斯托曼传》。这本书是与GNU中文翻译小组协调人邓楠共同翻译完成的,我负责部分的翻译质量我个人并不十分满意,一方面因为英文水平的原因,一方面也是因为后期做得确实太过仓促。

图书出版后,出版社投入了很多资源进行推广,包括通过哲思社区邀请到Stallman本人来中国演讲并签售,不过总体效果还是差强人意。计划出版第二版的事情,目前也因为各种原因暂时搁浅。出乎意料的事情倒是第一版的Kindle版本很顺利的上架了,虽然Stallman对此也许不太高兴,因为他说过,Kindle是Malware

值得一提的是,这本书是国内少有的依据GFDL许可证出版的图书,我很用力地推动出版社编辑去完成了这件几乎不可能的事情。当然,因为众所可以理解的原因,这件事做得非常低调,但是如果你仔细看这本书的版权页,除了能看到GFDL的声明外,还能看到一些很微妙的变化。

– 几个IT产品

Myo手势控制手环:其实是2014年买的,只不过一直跳票,直到2015年才到货。到手一天就解毒了,直接放到闲鱼上去转让给别人了。这真的只是个实验品,要实现它的官方Demo上那些很炫酷的功能,还有万里长征要走。

Raspberry Pi 2:跟一代相比,性能提升了很多。很多人批判树莓派系列产品的性能、性价比、实用性,我觉得都用力用错了方向。这东西原本的定位就是个电脑学习机,它的优势在于丰富的资源和强大的社区。如果需要更低的价格、更好的性能,完全可以选择其它的嵌入式设备。

联想newifi路由器:在最低69元的成交价格上,买到一个802.11AC的路由器,并且还能刷成华硕固件或者OpenWrt固件,而且运行还非常稳定,很值了。虽然它只有百兆的LAN口,虽然它5G信号很弱。当然,它的原生固件实在不忍吐槽。

华硕AC-66U路由器:曾经的高端路由器,今年最低打折到了不到500元,买回来几乎没有太折腾就扔到角落让它勤勤恳恳的工作去了。这才是一个合格路由器应该具有素质!当然,实际上我还是刷了一次机,改了很多脚本,为了可以顺畅使用Google搜索,还为了实现电信、移动双线接入和策略路由。

华为荣耀4X(二手,两台)/5X/7手机:今年年内居然买了4台华为手机,除了7以外还都是最低端的机器。实际使用体验还算不错,第一次发现Android手机不root也可以用的好好的。当然,低端就是低端,屏幕色彩很差,外放音质也很差,做工/手感也比较一般,不过日常使用并无大碍,电池续航能力也不错。

– 旅游

2015年0出游,铁路运转里程0。

– 其它

还有一件很重要的事情,不放在博客上说。

展望2016年:

2016年是挺多事的周年纪念的,比如初中毕业20周年、研究生毕业暨工作10周年等等,年纪越大越喜欢怀念过去。当然,怀念是为了总结,为了前进。

关注2016维也纳新年音乐会

曾经关注过的那些维也纳新年音乐会:关注维也纳新年音乐会,2016年将是我第21次收看维也纳新年音乐会的直播。

2016年维也纳新年音乐会将由拉脱维亚指挥家马里斯·杨松斯(Mariss Jansons)执棒,他2006年第一次登上维也纳新年音乐会的指挥台,史无前例的在一场新年音乐会中演绎了23首乐曲。而他在2012年的再次登台,又打破了这个纪录,达到了24首。

2016年新年音乐会曲目的单的正式消息来得特别晚,直到上周才在维也纳爱乐乐团的官居网上放出。总共21首。其实一个月前就有小道消息放出了这个曲目单,不过在这个谣言满天飞的时代,我还是等正式消息再来写这篇文章。

2016维也纳新年音乐会CD封面

2016维也纳新年音乐会CD封面

上半场:

  • 01 – Robert Stolz – UNO Marsch – 国际联合进行曲
  • 02 – Johann Strauss II – Schatzwalzer; op. 418 – 珍宝圆舞曲 (2003, 2009)
  • 03 – Johann Strauss II – Violetta-Polka française; op. 404 – 维奥列塔法兰西波尔卡
  • 04 – Johann Strauss II – Vergnügungszug; Polka schnell; op. 281 – 游览车快速波尔卡 (1970, 1982, 1987, 1992, 2001, 2005)
  • 05 – Carl Michael Ziehrer – Weana Madl’n; Walzer; op. 288 – 维也纳的少女圆舞曲
  • 06 – Eduard Strauss – Mit Extrapost; Polka schnell; op. 259 – 特快邮车快速波尔卡 (2000)

下半场:

  • 07 – Johann Strauss II – Ouverture zu Eine Nacht in Venedig – 威尼斯之夜序曲 (1994, 2001, 2009)
  • 08 – Eduard Strauss – Außer Rand und Band-Polka schnell; op.168 – 激动万分快速波尔卡
  • 09 – Josef Strauss – Sphärenklänge; Walzer; op. 235 – 天体乐声圆舞曲 (1954, 1964, 1979, 1980, 1983, 1987, 1992, 2004, 2009, 2013)
  • 10 – Johann Strauss II – Sängerlust-Polka française; op. 328 – 快乐的歌手法兰西波尔卡(维也纳童声合唱团)
  • 11 – Josef Strauss – Auf Ferienreisen; Polka; op. 133 – 假期旅行波尔卡(维也纳童声合唱团) (1988, 1995)
  • 12 – Johann Strauss II – Fürstin Ninetta – Entr’acte zwischen 2. und 3. Akt 轻歌剧《侯爵夫人尼奈塔》第三幕间奏曲
  • 13 – Emil Waldteufel – Valse-España; op. 236 – 西班牙圆舞曲
  • 14 – Joseph Hellmesberger/Vater – Ball-Szene 舞会场景
  • 15 – Johann Strauss I – Seufzer-Galopp; op. 9 – 叹息加洛普 (1991)
  • 16 – Josef Strauss – Die Libelle; Polka Mazur; op. 204 – 蜻蜓玛祖卡波尔卡 (1954, 1983, 1989, 2000, 2002, 2008)
  • 17 – Johann Strauss II – Kaiser Walzer, op.437 – 皇帝圆舞曲 (1975, 1982, 1987, 1991, 1996, 2003, 2008)
  • 18 – Johann Strauss II – Auf der Jagd; Polka schnell; op. 373 – 在猎场上快速波尔卡 (1954, 1979, 1988, 1993, 2005, 2010)

加演:

  • 19 – Johann Strauss II – Im Sturmschritt; Polka schnell; op. 348 – 飞奔快速波尔卡 (1990, 2004)
  • 20 – Johann Strauss II – An der schönen blauen Donau, Walzer, op. 314 – 蓝色多瑙河圆舞曲
  • 21 – Johann Strauss I – Radetzky-Marsch, op. 228 – 拉德茨基进行曲

每次看新一年的曲目单时,总会在脑中冒出两种想法:“又来”、“这是什么鬼”。这恰恰就是对每届新年音乐会不变的期待:期待看到经典曲目的全新演绎,也期待在这个舞台上见到更多新的作曲家、新的作品。

2016年新年音乐会引入了三位新的作曲家的作品:罗伯特·施托尔茨的《联合国进行曲》、埃米尔·瓦尔德退费尔的《西班牙圆舞曲》以及老约瑟夫·赫尔梅斯伯格的《维也纳的舞会场景》。约瑟夫·赫尔梅斯伯格的舞曲作品在历年的新年音乐会上已经多次出现,而他父亲老约瑟夫·赫尔梅斯伯格的作品还是第一次出现,不知道会带来何种耳目一新的感觉。除此之外,非施氏家族的曲目还选择了齐莱尔的《维也纳的少女圆舞曲》,这也是一个首次在新年音乐会上亮相的节目。

2016年是爱德华·施特劳斯逝世100周年,指挥和乐团特别选择了两首爱德华的波尔卡舞曲,纪念这位施特劳斯家族最小的成员。不过群众呼声很大希望能听到的爱德华的圆舞曲作品依然没有露面。

指挥杨松斯在2012年时请来了维也纳童声合唱团的小朋友们,这个拥有500多年历史的合唱团的小歌唱家们,在2016年的元旦将又一次用他们的天籁之声征服全世界的听众。

2016年的曲目中有几首耳熟能详的“又来”曲目,比如:《游览车》、《天体乐声》、《蜻蜓》、《皇帝》和《在猎场上》,当然这些就算是新年音乐会的经典作品了。看到名字与旋律一样优美的《天体乐声圆舞曲》,又不禁让我想起所谓“天体乐声大魔咒”了:在新年音乐会历史上,波斯科夫斯基、卡拉扬、克莱伯、穆蒂这几位大师在演完这个曲子以后就都没有再上过维也纳新年音乐会的指挥台了。只有马泽尔和巴伦博伊姆破解了这个“魔咒”,但是他们有一个共同点,就是在首次登台新年音乐会时就指挥演奏了这个曲目。扬松斯是我很喜欢的指挥家之一,我可真心希望他不要被这“魔咒”所困。

2016年是我收看维也纳新年音乐会直播的20周年,对1996年洛林·马泽尔在新年音乐会上第一次用中文“新年好”向全世界问好的场面仍然记忆尤新。十周年的2006年前后,我在QQ的“施特劳斯之声”群和一些论坛认识了Duckula、苏大米、JosefKitty、king_zhd、定定、蓝色多瑙河等很多有相同爱好的朋友,并且花了很多时间通过各种渠道尽可能收集了历年新年音乐会所有录音录像资料,估计是那时在网上可以找到的整理得最完整的一套录音资料了。2015年是维也纳新年音乐会创办的75周年纪念,两个月前SONY为此出版了一套维也纳新年音乐会75周年曲目全集CD, 收录所有在新年音乐会上演出过的曲目,还特地补录了所有早年没有录音时演出过的曲目。拿到这套CD,回想起以前一首首曲子的寻找的日子,颇为唏嘘。