Rubik’s 360解法

去年去美国的时候给自己买了个玩具,LEGO的Mindstorm NXT 2.0机器人,可惜一年半时间下来发现自己的设计能力有点玩不转这种高科技的玩具。今年去美国时无意间在超市看到有正版的Rubik’s魔方卖,比国内便宜,没有买魔方,但它倒让我想起了另一个玩具--Rubik’s 360,最终在Amazon上找到了它,买了下来。Rubik’s 360在国内也有山寨版的卖,价格不到正版的1/10,品质如何不知道,不过正版的做工倒是确实很让我失望……

Rubik’s 360是魔方之父Ernő Rubik在发明魔方25年后发布的一个新玩具,它由三个透明的同心圆球组成,球与球之间以两根45度角相交的轴连接,最里面的球上有一个圆孔,中间的球上有两个圆孔,并且两个球上都各安装有一个重锤,在正常情况下保持圆孔朝上。玩具的目标就是把最里面的球中的六颗彩色珠子,通过两层球上的圆孔,移动到外层球表面上对应颜色的凸起中。在球体上还安装有两个控制钮,可以用来打开或关闭外层球上凸起的大门,这样就可以在把一个珠子移动到凸起中后,把门关上,防止珠子从里面再掉出来。

玩具的关键点在于:由于重锤的存在,圆孔总是朝上,所以就很难让珠子从圆孔中”掉出来“,到达外层球体。反倒是好不容易把珠子移到外层后,只要一不小心,就会重新从小孔中掉回内层球体中。

这个玩具有个很简单的解法,Shake-Shake,也就是把整个球乱摇,总有一定的可能性可以把珠子从内层球体摇到外面来。只不过这个解法就是完全靠运气了,就算你摇上20分钟,也没人能保证能不能成功摇出一个来。

其实Rubik’s 360跟Rubik’s Magic(魔板)很相似,只有一个步骤很关键,一旦学会了这个步骤,这个玩具就被破解了,也就不好玩了。这跟魔方很不一样,魔方的变化情况要多得多,对于每一个状态,都可以有很多不同解法。

所以,如果你对Rubik’s 360有兴趣,在往下看本文前,最好先自己玩一玩。下面的内容会把玩具的魅力破坏一大半,本文是为想立即知道这个玩具解法的人准备的。好,现在你已经被警告过了。

Rubik's Magic和Rubik's 360

Rubik's Magic和Rubik's 360

首先定义一些名词。从内到外三个球体分别叫作内球、中球和外球。外球上的拼接缝把外球分为两个半球,一个半球上是蓝白绿三色凸起,叫BUUG,另一个半球上是红橙黄三色凸起,叫ROY。我把两个控制旋钮处在一上一下的位置、它们连成的直线垂直于地面时的状态称为是竖着的,当这条直接平行于地面时,称为是横着的。

不难发现,当玩具是横着的时候,内球和中球的重锤会同时指向地心方向。当玩具是竖着的时候,内球的重锤通常会指向侧下方而中球的重锤会指向水平方向。

第一步:如果把球横过来,并让其中一个旋钮正朝向自己,慢慢把球朝外转动90度,就可以把球竖起来(朝向自己的旋钮朝上了)。请注意观察这个过程:内球和中球的重锤会分别朝两个方向离开地心方向的位置。

看清楚这一点后,重新再操作一次:先把球横过来,然后慢慢把它竖起来,到快接近竖直的时候(朝向自己的旋钮接近朝上,微微偏向自己一点,不完全朝上的原因是那时中球可能会带着内球开始乱转了),先静止一下,然后继续沿相同的方向流畅、稳定并迅速的转动180度。在这个过程中,需要确保两个重锤各自沿之前的运动方向继续向两边分离。当完成这次转动后,你就可以看到,内球的孔已经不再是朝上了,而是朝向了水平方向,与中球的重锤到达一样的位置。至此,最关键的一步就完成了。

第二步:适当转动Rubik’s 360,就可以让内球的孔基本朝下,这时就可以轻松的把内球中的某个珠子赶到内球与中球的夹层中了。到了这里,你需要牢记的一点是不可以再把Rubik’s 360完全横过来了,除非你希望珠子重新掉回内球去。

第三步:保持一个适当的倾斜角度,轻轻晃动Rubik’s 360,就可以让内球和中球夹层中珠子在夹层里运动起来,并最终卡到中球与外球相连的孔中。这个过程中,如果你的角度选择不合适,或者珠子在夹层中运动速度过快,或者你不小心把整个玩具完全横过来了,都会导致珠子掉回内球,前功尽弃。

第四步:当珠子卡到外球与中球之间后,剩下的工作就比较简单了,让你希望珠子进入的凸起朝向斜上方(具体角度请自行摸索,不难,但讲不清),然后用旋钮开门,把珠子晃进凸起,关门。

还遗留最后一个问题,就是有关颜色的。蓝白绿三色的珠子只应该进入BUUG半球,红橙黄三色珠子则只应该进入ROY半球,不然最后它们就不能回到颜色与它们相符的凸起中。做完第二步后,基本上就决定了你正在操作的珠子会进入BUUG半球还是ROY半球,如果进错了半球,基本上就没有搞头了,只好它让掉回内球,重新操作。在我的Rubik’s 360上,做第三步时,珠子总是会倾向于往某一个方向运动(虽然我总觉得应该两个方向的概率是一样的),在这种情况下就很容易预测从内球中掉出来的珠子会进入到哪一个半球中,所以在把珠子从内球赶到中球夹层时,可以有意识的选择合适的颜色的珠子。或者当剩下的珠子只有某个半球的颜色时,就应该在第一步时就选择正确的半球朝向自己,才能保证后面珠子可以进入正确半球。这个也请大家自己摸索一下吧,反正只有两种可能性,规律很好找。

好吧,我想我已经尽力用文字去解说整个过程了,不知道能不能对不会玩的朋友有所帮助。大家也可以参考以下资料(包括一些视频)来研究这个玩具。中国大陆用户访问会有些困难,但我也没有办法……

Rubik’s官方指南,有视频解说和原理动画,个人认为完全看不懂:http://www.rubiks.com/solving-center/solve_rubiks_puzzles.php

一个第三方的博客介绍技巧的,有说明和视频,跟我的方法比较接近,可以参考一下:http://rubix360.blogspot.com

成功完成首次卫星通联试验

在今年的辞旧迎新博文《2011新年好》中,我提出了今年希望能完成的一个愿望,就是能够进行一次卫星通联试验。眼看一年时间过去大半,在计划就要搁浅的时候,向来瞬间执行力超强的好友BG4KKS以迅雷不急掩耳盗铃儿响叮当的速度购入了一根UV双段的八木天线,促成了这次试验。

2007年,南京三中的同学们曾经与国际空间站(ISS)的宇航员进行过一次十分钟的天地对话,这次活动前后花费了2年半的准备时间外加经费16万元,这无疑会让人觉得卫星通信试验是一件很高不攀的事情。实际上,除了ISS的官方的业余无线电活动(ARISS)外,还有不少给业余无线电爱好者使用的卫星一直在围绕着地球运转,在地面上使用一些简单的设备就有希望通过这些卫星上的中继器,把信息从一个地方传递到另一个地方。

2009年底,中国在太原卫星发射基地通过一箭双星的方式发射了我国第一颗业余通信卫星希望一号(HO-68),期望通过中国自己的业余通信卫星在太空中传递自己的声音成为我计划进行卫星通信试验的一个动因。遗憾的是,在准备这次通联试验时,我们才发现,希望一号从今年一月底开始就因为一些设备故障无法打开各转发器,仅存留一个等幅电报(CW)的发射器不断发出表示“我在这里”的信标。所以,通过希望一号传递信息已经变得不可能,只能尝试接收来自它的信标。作为替换方案,我们选择了另外两颗国外的卫星SO-50AO-27做为进行语音通信试验的目标。

通过卫星的调频(FM)转发器进行语音通信,其实跟在地面上通过中继台进行语音通信非常相似:无线电台把信号通过上行频率发送给中继台,中继台接收到信号后进行放大并重新在下行频率上发送出去。由于中继台的天线能力、高度和功率通常都会大于一般的移动电台,所以可以起到扩大通信范围的作用。卫星通信,就是让卫星充当中继台的角色,把地面发送给卫星的信号,重新转发回地面,以达到地面直接通信较难达到的更大的覆盖范围。

当然卫星通信与地面中继台通信也还是存在一些不同的地方:

1) 时间窗口:业余通信卫星很多为低轨道卫星,绕地周期很短,所以对于一个特定的地点来说,卫星每次经过上空的时间都很有限,只有几分钟到十多分钟时间。必须提前计算好卫星通过的时间和角度,并抓紧分分秒秒,才能完成一次通联。

2) 飞行轨迹:如果使用八木天线等定向性非常强的天线,必须在卫星飞行过程中不断调整天线的角度对准卫星,才能保证通信的正常进行,所以必须提前知道卫星飞过上空时的轨迹。同时,如果飞行轨迹的仰角过低(贴近地平线),而通信地点不是在高山上,则可能会由于建筑物的遮挡而导致通信比较困难。

3) 多普勒效应:由于卫星与地球间存在较高的相对速度,在卫星接近和飞离时都会出现多普勒效应,导致频率飘移,所以在通信过程中需要不断调整接收发射频率才能补偿多普勒效应,达到较好的通信效果。

4) 转发器工作状态:卫星上的转发器受到电力等各种因素的制约,有可能不是一直可用的,所以在进行卫星通联前需要预先了解卫星过顶时转发器是否正在工作。对于有些卫星(比如SO-50),还需要通过向它发送特定的亚音信号,才能在一个时间段内激活它的转发器。这些都是要在做准备工作时所关注的。

要获知卫星飞过所在地上空的时间和轨迹,需要进行对于普通人来说非常复杂的天文计算,好在有很多软件可以帮我们来完成这样的计算,GNOME Predict就是Linux下的这类软件。通过在软件中载入卫星轨道根数(开普勒参数)和所在地坐标,就可以算出卫星后面的经过时间和轨迹。在Windows下,可以使用Orbitron软件,功能更为强大。使用这类软件时,一定要确认把软件中的卫星轨道参数更新到最新的数据,不然就会得出错误的结果。也有一些网站会提供在线的跟踪和预测数据,临时需要查阅的时候也很方便。

Linux下的卫星跟踪软件,HO-68正在经过南京上空

Linux下的卫星跟踪软件,HO-68正在经过南京上空

我们所有的通信设备是仅仅是两个手持电台(俗称“对讲机”):YAESU FT-60R加上0.4米长的UV双段橡胶天线和Kenwood G71A加上新买的U段7单元V段4单元的八木天线,两个电台的最大发射功率都不到5W。另外,我们还用手机和GPS用来获得精确的时间、位置和角度信息。

Kenwood G71A和UV双段八木天线

Kenwood G71A和UV双段八木天线

星期六晚上在仙林某学校的教学楼楼顶进行了第一次试验,首先是尝试抄收希望一号HO-68的信标信号。首次试验免不了有点手忙脚乱,不过还是非常顺利的在两个电台上都抄收到了来自太空的信号:一阵“噗噗”的声音。因为希望一号的信标信号是不到200mW的CW信号,而我们没有用于抄收CW信号的设备,只能用调频设备去接收这个信号,CW信号经过调频设备“错误”的解调后,就只能得到一串“噗噗”的噪音,而不是一般人想象中的”嘀嘀“的电报声。这些“噗噗”声按Morse码解码后就得到了希望一号信标的内容,包含它的呼号BJ1SA,遥测信号起止符XW XW和相关遥测数据。

一段完整的希望一号HO-68信标录音(有剪辑):

继续尝试通过SO-50进行语音转发,虽然我们有两个电台,但由于只有一个“牛”天线,所以很难进行有效的通联。不过我还是抱着“侥幸”心理通过我的FT-60R加上橡胶天线进行了一次呼叫,G71A上抄收到了这个信号!虽然信号非常的微弱几乎被淹没在噪音中难以辨识,但是我们的声音的确是变成电波实实在在的去天空转了圈又回到了地球上,心情非常激动。不过这也就是我们这天在SO-50上的唯一收获了。

有了周六的基础,周日下午我、BG4KKS和BG4XPH一同再次试验SO-50和AO-27时就显得更加信心十足。成果也很不错,在SO-50上,我们抄收了若干日本业余电台的通联过程,不过由于信道很繁忙,我们没有机会插入呼叫。在AO-27上,我们成功完成了与泰国电台HS35NP的通联,信号55(语音清晰,信号强度中等),并联络上了沈阳的BG2TOS。

卫星飞得很快,每次有效通联试验的时间也非常短暂,前后准备和等待了一天多时间,实际能说上话的时间也就不足5分钟,颇是意犹味尽。在一个电话就能打遍全球的年代,业余无线电通信这种古老而又“高科技”技术显得很没有性价比。然而无线电运动的魅力也许也就在于每次你想说话时,不知道能不能说得成,也不知道会跟谁说上话。期待下次卫星通联试验。

除了完成了卫星通联试验,周日早上在栖霞山上还完成了数次UV段的远距离通信,这天的信号传播很给力,我们成功联络了南京、仪征、常州、无锡、芜湖、宜兴和南通等地的电台,收获颇丰。其中与南通的直频通信(不通过中继)直线距离达到了190公里,打破了我所参与过的通信试验中黄山到芜湖直频149公里的小小记录。

在即将结束一天活动前,我们在仙林的亚东城某高楼顶还第一次观测到了国际空间站(ISS)飞过南京上空的景象,它的亮度很高,所以用肉眼就可以轻松观测。唯一的重点是你得知道它会在这个时候飞过你的上空,并且最好知道经过的轨迹,这样才会比较容易在天空中找到它。怎么才能知道这些信息?请参考本文第十段……

魔术小游戏 – 猜车厢

整理硬盘时发现了这个2002年时写的已经被我自己都忘记到犄角旮旯里的小程序,虽然它从2002年8月起就一直在Internet上以一个几乎固定的URL存在,也曾经在CSDN软件中心发布过,但似乎所有的搜索引擎都没有发现它的存在。

这是一个魔术大师大卫·科波菲尔的观众互动魔术的翻版,某年春晚上李咏用过一个演化的版本表演过。最近看了一本不错的数学科普书:从惊讶到思考-数学的印迹,其中有一节介绍了一些电视互动魔术中如何通过概率学原理给人造成错觉。不过我这个魔术不是错觉,而是有简单而确定的数学原理在里面,想不明的TX可以到我的那篇有关二进制的文章里去寻求启发。

下载地址是:http://www.freemindworld.com/g34/csdn/Magic.zip

程序截图

程序截图

UI比较丑。用VC6写的,Windows用户应该没有鸭梨,Linux用户可以用wine,但预先要把Visual C++的运行库装上。从现在的眼光看,用原生应用程序来做这么简单的应用实在是自找麻烦,完全可以很简单的用JavaScript在网页上来实现。我在考虑是不是可以做一个在Bambook上运行的Widget呢?

劳动节到了,祝大家节日快乐!

折腾O2 Joggler

由于我的WD My Book World Edition在内存升级过程中遇难,好友给我介绍了一个新玩具:O2 Joggler电子相框,它是一个OpenPeak给O2 OEM的产品。

记得曾经某人在拿到作为T公司20周年纪念品的电子相框后,在第一时间把它大卸八块,然后失望的把它合起来——一个基于VCD芯片做的相框实在没有什么好折腾的。相比之下,O2 Joggler的硬件配置就很有折腾的余地:Intel Atom Z520 1.33 CPU, 512 RAM, 1G Flash, GMA500, 7寸800*480电容触摸屏, RT8169 1000M网卡, RA2870 802.11N无线网卡, 1 USB 2.0。而曾经在HiPDA论坛上的团购价格已经低至450元。

O2 Joggler,相机不在手头,就从网上找个图吧

O2 Joggler,相机不在手头,就从网上找个图吧

虽然配置不错,不过很快就会发现它做什么东西都有软肋:做下载机要外接硬盘,做平板电脑用的话它没有电池,做车载多媒体设备的话它没有GPS和3G模块,做高清播放盒吧它没有视频输出接口。我的目的还是用它做下载机,所以直接用硬盘底座外挂3.5寸硬盘,按着当年折腾My Book的方法折腾它。

操作系统选择:理论上任何可以通过EFI引导的x86操作系统都可以。出于驱动的原因,目前比较完善的还是基于Ubuntu的GNU/Linux发行版,尤其是适合于Netbook的REMIX或者Mint,Android 2.2的工作还在进行中。我还是选择了我最熟悉的Debian,虽然这也许不是个最好的选择。编译Linux Kernel需要的Patch在这里有个列表。Joggler自己有一个原生的定制过的GNU Linux操作系统,也可以用于实现各种应用,但各种前端应用都需要基于Flash来做。

操作系统安装:网上有不少已经装好的镜象,可以直接用。对于我来说,则是用debootstrap装一个干净的Debian才会比较合我口味,大部分的工作可以参考JogglerWiki上的这篇文章来完成。目前,标准安装一个Debian + XFCE的桌面,基本上可以把大小控制在1G以内,这样就可以把操作系统放到Joggler内置的Flash中。当然,在实验各种系统时,还是先放在U盘上外置引导会比较让人放心,因为这样完全不会动到原来的系统,就不致于把Joggler变成砖头。

应用软件:反正是个标准的x86的GNU Linux,其它应用软件您该怎么装怎么装吧……从这个角度来说,Joggler太像一台真正的电脑了,所以反而也没有太多可以折腾的地方。

目前Joggler相关的资料比较完整的地方是JogglerWiki,我在这里索引一下比较有用的一些信息。

1. 拆机视频:拆机可以把USB无线网卡拨掉换成个大U盘内置,可以接出更多USB口,可以换CPU散热片(目前相框的支架就是CPU的散热装置,最好别把它拆了),加装ZIF接口的PATA硬盘

2. Joggler的有线网卡没有MAC地址,必须用软件设置

3. 内置Flash跟外置的U盘一样可以引导系统,你可以用fdisk对它重新分区合并使用。但必须保持第一个分区是FAT的EFI的引导分区。这里有些资料可以参考。Joggler不是很容易变砖的,实在你很不幸的把它变砖以后,还可以通过热插拔EFI芯片解决。

4. 内置喇叭在闲置时可能会会轻微爆音,MS是由于CPU节能引起,解决方法有若干种,但好像不是每个人都说有效。

5. 在我这里外置USB硬盘有时会出现异常断开的问题,这个问题对于下载机来说会非常致命,尤其如果系统是装在USB设备上的话,会直接导致系统死掉。目前的线索是一个Ubuntu的一个BUG报告,不过我还没有试成功,而最近几天这个问题却似乎没再出现。

6. 很多人报告Joggler发热量太大,70度以上后自动降频后慢到无法使用。但我这里没有出现过,温度一般在35-41度左右,长期开Flash应用(比如豆瓣电台)会升到51度。如果屏幕长期打开会更热一些。

7. 在我的系统中,Google Chrome常常会导致系统完全死锁,不知道是不是跟这个有关,总之我直接换用Firefox绕过了这个问题。

8. Joggler还有一个很不起眼的设备,那就是它顶上的一个光线传感器,加载i2c的模块后,可以用程序读它的数据,通常可以用来调整屏幕亮度用。相关代码在这里

9. 理论上Joggler的硬件配置播放1080p的高清视频是没有问题的,当然你需要自己编译一个VAAPI的mplayer。不过我这里实测结果是720p的视频播放基本问题不大,但1080p还是基本没戏,我对此表示无鸭梨,难道我真的需要在这么小的屏幕上放这么高清的视频么?

目前我的Joggler在我这里是勤勤恳恳的运行rtorrent和amule-daemon做下载机,用cronjob打开豆瓣电台做闹钟。更多的应用就慢慢再开发了。

盛大Bambook锦书首发体验

虽然有段时间不太看好E Ink了,但上个月还是莫名其妙脑子发热预定了一个盛大的Bambook锦书。最近E Ink产品价格有很大松动,不过至少在一个月前,6寸屏的E Ink卖999的价格还是比较厚道的。

盛大对内测用户的不公对待和9月28日这样尴尬的发布日期(考虑到长假和物流速度)引发争议和失望无数,还好最后还是争了一口气(也要多亏那常常不争气的宅急送也争了口气),让一小半的预定用户在28日当天收到了Bambook,剩下的应该也有一大半可以在长假前收到。

谈谈到货后的第一体验。在快递员面前当面打开包装验机:包装没得说,内外两层都不错。Bambook自身的设计也算漂亮,做工精致,比某个号称做礼品级电纸书的厂商的产品要精美的多。开机速度则很让等着我验货快递员GG觉得不爽:大约需要90秒的时间,还好电子书很少需要关机。打开包装开机前屏幕上没有任何显示,其实如果像Kindle一样默认可以显示一个简单的使用说明也许会是个不错的设计。开机后有一个新用户向导,马马虎虎。

盛大Bambook锦书

盛大Bambook锦书

Bambook使用的是16级灰度的E Ink屏幕,指标上来看是不错的,不过如果只是看小说,也没有什么用处。我不看漫画,只能放张照片进去看看,确实比以前用的汉王N510的显示效果要好上很多。不过总体感觉上屏幕的底色比较重,“纸”不白,不知道是不是因为外壳太白的原因。

最值得一提的是翻页的速度,默认的情况下,翻页的速度已经非常快。比我见过的翰林V3、汉王N510和Kindle 2都要快上一大截。如果在设置中打开了“速度优先”模式,则翻页的速度更上一个台阶,几乎看不到翻页的闪屏过程了。不过这种模式下翻久了“纸”的底色会变得更加发灰。

Wi-Fi的功能基本可用,除非你的Wi-Fi配置用了证书之类的比较麻烦的东东。通过Wi-Fi使用“云中书城”的体验也还不错,尤其是同步RSS的功能,还是很方便的,只可惜现在还不支持自定义的RSS,只能同步官方提供的一些源。听书功能的TTS合成语音比想象中的要强,不过对于我来说,这个功能好像没什么用。

Bambook对于我来说的最大软肋就是不支持自有书的直接阅读,任何格式(包括TXT)都需要用盛大的“云梯”软件(Windows-Only)转换成盛大的私有格式SNB才能放入Bambook阅读。那个转换软件的能力实在是不能让人恭维。目前我的做法是先用calibre把文件都转成EPUB,然后再用盛大的软件转成SNB,勉强可用。PDF就算了,在不能横屏显示的6寸屏上,也不用对它指望什么了。

其它的缺点要列也是可以列出一大堆,鉴于目前国内电子书产品的整体现状,懒得写了,总之Bambook要做为一个盛大旗下的文学网站的专用阅读器,现在看起来是基本合格的。如果主要想用它看看别的自有书籍(尤其是非文学),还是要慎重。

最后说说可折腾性。Bambook的硬件配置总体来看还算不错,但如果想要把OpenInkpot这样的开源固件移植到Bambook上,目前来看还缺少太多的信息。虽然Bambook用了Android系统,目前也似乎还没有流传出任何有关如何折腾的信息。我试了一下,Bambook无论是用USB还是Wi-Fi,连接后都以是网络的形式与外界交换数据。默认情况下,USB连接电脑后,会以RNDIS/Ethernet Gadget的形式出现(Windows/Linux中都可以),默认配置了静态IP 192.168.250.2。如果用Wi-Fi,则是以DHCP的形式获取IP地址。用nmap工具扫描这两个地址,都只能看到它开放了一个5000号的TCP端口,设备与盛大“云梯”软件的数据交换都通过这个端口进行。所以目前唯一Hack出来的一点点东西就是可以通过修改“云梯”安装目录下的config.ini文件,把里面的IP地址由192.168.250.2改成Wi-Fi分配给Bambook的地址后,可以实现“云梯”与Bambook的无线互连。也有人在研究SNB的文件格式,目前来前只能算是有初步的进展。如果把它分析透了,也许以后可以给calibre写个插件直接生成SNB格式。