浏览模式: 标准 | 列表

TF101 已经好久没有基于官方版本修改优化的新 ROM 了,现在的新 ROM 都是 4.4 或 5.0 的啦,都不是很稳定。所以我基于曾经最稳定的Android Revolution HD 3.6 版本,精简优化了这个版本,但是刷机包我不会做,所以这个包是用TWRP的备份功能备份出来的,所以刷这个需要用TWRP的还原功能来还原才行。

» 阅读全文

月初时,从妹夫那里借来一台 Mac Mini,之后就开始了对 Mac OS X 的折腾。经过了半个月的奋战,从 Mac Mini 到我原来用的台式机,以及老婆用的神舟笔记本,全都让我整成了 Mac OS X Yosemite。期间重装了好多次,也遇到了很多问题。老婆建议我记下了,以备以后查阅。于是就有了此文。

Mac Mini 的安装没什么好说的,从 Apple Store 下载 Yosemite 安装程序,然后,用磁盘工具从硬盘最后分出一个 8G 分区来,比如命名为 Install,然后在终端里输入:

sudo /Applications/InstallOSXYosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/Install --applicationpath /Applications/InstallOSXYosemite.app --no interaction

安装分区就制作好了。接下来重启,按住 option 键,选择安装盘分区,就可以全新安装系统了。

接下里是安装我原来用的台式机,之前这个机器用的是 Windows 8.1,多块硬盘,使用主板的 Raid 功能,用 3 块 1T 硬盘做了个 2T 的 Raid5,因为 Mac 不能识别通过主板功能实现的 Raid 磁盘,所以需要先把数据备份出来,然后把 Raid 分区解除。还好之前买了一个单块的 2T 硬盘,挂到机器上,用 GHOST 做磁盘对拷,用了 8 个小时,终于把数据备份完了。

在 PC 上安装 Mac OS X 有好多种方法,比如现在流行的有通过变色龙引导或通过四叶草来引导,我的机器比较老,主板是仅支持 BIOS 启动的,不支持 UEFI 方式启动,所以使用变色龙来引导安装比较快速方便。四叶草我也试过,在我的机器上开机速度比较慢(比使用变色龙那是慢太多了),另外在驱动方面我也搞不起那个出怎么配置,最后放弃了。最后使用的是这篇文章 UniBeast: Install OS X Yosemite on Any Supported Intel-based PC 中介绍的方法来安装的。

我的机器是自己配的,配件是按照 iMac 27 (12,2) 的配置来选的,因此在驱动上安装比较容易,我的主板是技嘉的 P67A-UD3R-B3,需要使用的 DSDT 文件可以直接从 tonymacx86 的 DSDT 数据库中下载。显卡驱动是从 HackintoshOSX 上找的。声卡,SSD Trim 补丁等这些直接使用的 MultiBeast 中的驱动。还有一部分好用的驱动和补丁(比如 SSDT.aml 文件的生成)来自:Hackintosh Vietnam

这是我最后变色龙的配置:

神舟笔记本的安装和配置跟我的台式机差不多,就不细写了。

本来想写一大篇的,没想到最后还是三言两语就完事了,看来真的是懒了。

图片附件(缩略图):
大小: 191.47 K
尺寸: 500 x 288
浏览: 1450 次
点击打开新窗口浏览全图

在某些情况下,我们需要判断一个标量是否为数字类型,而不仅仅是这个标量是否看上去像个数字,例如:

Perl代码
 
  1. my $val = 123;  
$val 是一个数字,而

Perl代码
 
  1. my $val = "123";  
这个 $val 只是像一个数字。

虽然大部分情况下我们不需要对它们区分的这么清楚,但是总会遇到不得不区分它们的情况,例如当你对它进行序列化操作时,如果只是按照像数字来进行判断,序列化之后的结果则不够准确。当然需要区分它们的情况还有很多,我们这里不做列举。我们下面重点来讲一下怎么区分它们。

在 Perl 5.14 之后的版本中,我们可以通过 & 运算符来做区分:

Perl代码
 
  1. sub isnumeric {  
  2.     my $val = shift;  
  3.     return lengthdo { no warnings "numeric"$val & "" } ) > 0;  
  4. }  
这段代码在 5.14 及其之后的版本上工作的很好,但是在 5.14 之前的版本上它返回的结果却是错误的。

经过各种尝试之后,我们最后终于找到了一种更加简单且在各个版本上都有效的测试方式:

Perl代码
 
  1. sub isnumeric {  
  2.     my $val = shift;  
  3.     ($val ^ $val) eq '0';  
  4. }  
原理是字符串做^运算,结果为空字符串,数字做^运算,结果为0。

因为C#中没有提供 Switch on Type 的功能,因此要判断类型通常会用一长串的if else,当然这种写法的问题是不够高效,且不够美观。因此 C# 中对常见类型提供了一组枚举值,也就是 TypeCode(这个枚举类型在.NET for Windows App Store 中居然被取消了,大概是因为DBNull这个类型本身也被取消了,这个值没有对应的类型了,干脆连TypeCode就一起取消了)。可以使用 Type.GetTypeCode 方法来得到类型对应的枚举值,之后对得到的枚举值进行switch操作。但需要注意这里有一组特殊的类型,那就是枚举类型,它的返回值是该枚举类型对应的数字类型,而不是Object类型。

因此如果你想区分枚举类型和数字类型的话,记住不要直接用这个方法,至少要先用 IsEnum 来判断一下。否则你可能会错把枚举了类型当成数字类型进行处理。

1月
03

C# 中 is 和数组的问题

在C#中,我们可以很方便的在object对象上使用is运算符来快速的判断对象的类型,is运算符还具有在子类对象上判断是否属于某个父类或者接口的能力,与之等价的判断是,使用GetType方法获得类型后,使用父类或接口上的IsAssignableFrom方法来判断。后者速度比使用 is 运算符要慢很多。所以通常我们在存在对象和已知要判断的类型时优先使用is运算符。

但是is运算符在判断数组类型时却有一个bug,当然这个bug也许是设计问题,但是它确实可能跟我们期望的行为不一致。

这个bug可以这样描述,当一个整数数组对象(byte[], sbyte[], short[], ushort[], int[], uint[], long[], unlong[]这八种)被赋值给一个object对象时,在这个object对象上使用is方法判断时,在等位长整数类型上判断的结果总为True,与类型是否有符号无关。例如:

C#代码
 
  1. int[] a = new int[] { -3, -2, -1, 0, 1, 2, 3 };  
  2. Console.WriteLine(a is int[]);  
  3. Console.WriteLine(a is uint[]);  
  4. object o = a;  
  5. Console.WriteLine(o is int[]);  
  6. Console.WriteLine(o is uint[]);  
的输出结果为:

True
False
True
True

前三个输出是我们期望的,但是最后一个输出的True却是出乎意料的。

这里如果把 int[] a 换成 uint[] a 也是一样,例如:

C#代码
 
  1. uint[] a2 = new uint[] { 0, 1, 2, 3 };  
  2. Console.WriteLine(a2 is int[]);  
  3. Console.WriteLine(a2 is uint[]);  
  4. o = a2;  
  5. Console.WriteLine(o is int[]);  
  6. Console.WriteLine(o is uint[]);  
的输出结果是:

False
True
True
True

第三个输出结果True是我们意料之外的。

同样byte[]和sbyte[]也存在这种关系,short[]和ushort[],long[]和ulong[]之间同样也存在这种关系。

所以使用is在这几种数组的object对象上做判断时,一定要注意这个问题,否则很容易掉进这个陷阱中去。