Category Archives: post

Setup Custom Outlook.com Email Account on iPAD

I host my own domain (minzhang.com) email account on outlook.com. While setting up account on my new iPAD Air, the build-in outlook.com option does not recognize my custom domain.

The workaround is to setup the account as an normal IMAP account, using the settings I found here:

For POP protocol, here are the settings:
Incoming mail server: pop3.live.com
Outgoing mail server (SMTP): smtp.live.com
Incoming server (POP3): port 995
Outgoing server (SMTP): port 587

And here are settings for IMAP:
Incoming mail server: imap-mail.outlook.com
Outgoing mail server (SMTP): smtp-mail.outlook.com
Incoming server (POP3): port 993
Outgoing server (SMTP): port 587

 

Update:

The custom Outlook.com account could be setup as a Microsoft Exchange account on iPad, as long as you specify the server address to m.hotmail.com 

FreeNAS上线

家里的备份用离线存储设备是一个跑着NexentaOS的机器,文件系统用了ZFS,两块2TB的硬盘组成了一个raid1。

机器的配置是一台史前Atom N330双核+2GB DDR2内存,实在是有点落伍了。尤其是内存偏小,对ZFS来说是一个限制,也容易导致稳定性方面的问题。加上NexentaOS也有点儿老旧,ZFS驱动又不是内核态的。

WP_001072

在虚拟机上评估了FreeNAS之后,决定把老机器退役了。需要注意的是,迁移之前要做zpool的export,命令是:

# zpool export -f pool_name

新的机器主板用Asrock H77-ITX,加上一块旧的Inte G530 CPU,内存配了8GB DDR3,对于2TB的容量来说应该足够了。由于CPU的限制,只能跑在1066上,有点浪费。等未来内存价格低一点后,可以考虑换成16GB的。

安装过程很简单,烧一个镜像在U盘上,启动后稍作设置(ip地址,import zpool)就可以顺利地跑起来了。

这次升级基本达到了期望的目的:

  • freenas+ZFS -> 提供足够的基本功能
  • 可靠而性能足够的硬件 -> 稳定不折腾

ZFS毕竟是个可靠的家伙,不是么 🙂

OS X Mavericks的节能技术

Mavericks中包含了几点新的节能技术,配合Intel的新CPU,可以达到很不错的电池续航能力。

基本原则

总的来说,Mavericks节能技术的基本原则是:

  1. 无需改动现有程序即可工作
  2. 尽可能让更多的处理器核心处于闲置状态
  3. 电池供电时,仅仅响应最重要的用户请求

App Nap

App Nap把程序置于一个特别的低能耗状态,以限制程序对CPU、网络和磁盘IO的请求。当程序不可见且没有播放音频时,系统就可以自动把程序至于此状态下。

在这个状态之下,系统对程序进行下列的限制以节省能耗:

  1. 定时器限制,降低程序触发定时器的频率。
  2. IO限制,赋予磁盘和网络I/O的最低优先级,可以到达节能和减少对前台程序的干扰。
  3. 优先级限制,降低程序的Unix进程优先级,以减少CPU时间片的分配。

定时器合并

把定时器自由执行改变为让多个定时器一起执行,减少系统定时器执行的次数,让CPU处于闲置状态的时间更长,被唤醒的次数更少。这样对整个系统来说,由于多个程序的定时器会同时执行,而两次执行的间隙会更长,CPU和系统可以更长时间处于节能状态。

引用

本文内容来自:OS X Mavericks Core Technologies Overview

这篇文章面对开发者,概述了Mavericks的技术特点,推荐阅读。

2000w数据的恢复

1. 先执行RESTORE FILELISTONLY FROM DISK = ‘C:\Users\min\Desktop\2000wbak\shifenzheng.bak’, 得到了备份中的数据文件和日志文件的逻辑名称,分别是linshi和linshi_log。

2. 创建一个新的数据库SFZ,记下新数据库的数据文件和日志文件的物理地址。

3. 然后运行下面的命令,把bak文件恢复到新建的数据库:
RESTORE DATABASE SFZ FROM DISK = ‘C:\Users\min\Desktop\2000wbak\shifenzheng.bak’ with replace, move ‘linshi’ to ‘C:\Users\min\AppData\Local\Microsoft\VisualStudio\SSDT\sfz.mdf’, move ‘linshi_log’ to ‘C:\Users\min\AppData\Local\Microsoft\VisualStudio\SSDT\sfz.ldf’

4. 在姓名和身份证上建立索引:
create index ix_ctfid on cdsgus (ctfid)
create index ix_name on cdsgus (name)

Fixing Windows 8.1 Boot by Create EFI System Partition Manually

I had made a mistake on my laptop OS configuration, which turned out wasted me 3 hours to research and fix the issue.

My laptop has a 256GB SSD disk on its SATA slot and has Windows 8 OS on it. I decided to install a separate copy of Windows 8.1 on a new 128GB MSATA disk and retire the 256GB SSD. And for make the migration easier, I installed the Windows 8.1 along with Windows 8 OS, which was a big mistake.

The boot loader for the new OS is still on the old 256GB disk. And it can make the dual boot perfectly, so I did not realized there is no boot loader on my new SSD. Then things broken up after I remove the 256GB disk as planned, as there was no boot loader on the 128GB disk and there was no EFI partition on it. The whole disk was assigned to a single primary partition with Windows 8.1 OS installed on it.

I have tried using Windows 8.1 installtion disk to make a auto-fix, but it failed. I guess the reason was simply because no EFI partition found on disk.

According to this article and this article, what I had missed were two special partitions, the System and MSR partition:

The solution came out for my problem is to shrink my Windows partition, create the two system partitions manually, then install EFI boot loader to the system partition.

Steps I have taken:

1. Boot with setup disk and enter rescue command prompt, run diskpart.exe, select disk then select my windows volume. Issue a shrink command as:

shrink desired=600

run ‘list disk’ again, now I can see I have 600MB free space on the disk.

2. Then create  and format the EFI partition:

create partition efi size=260
format quick fs=fat32 label="System"

create partition msr size = 128

3. Finally follow this post, run:

bootrec /fixboot
bcdboot c:\Windows /s b: /f ALL

to fix boot record.

4. Lastly for those who enabled hyper-v, run:

bcdedit /set {default} hypervisorlaunchtype Auto
bcdedit /set {default} nx OptIn

5. Reboot and my Windows 8.1 comes back.

Looking into my partition layout, the System partition (EFI boot partition) is on the tail of the disk. It looks wired but works.

System Partition  -Disk Management

 

To make further configuration to Recovery Image, see references below:

云编程平台nitrous.io

nitrous.io是一个云编程平台,是可以根据需要即时启动一个虚拟机,让用户可以通过console或者web ide编写程序,并编译执行的网络服务。

nitrous.io的编程用虚拟目前使用完全免费。虚拟机的配置由用户帐户拥有的N2O点数越来决定。N2O点数越多,可用的内存和硬盘就越多。N2O的点数越可以通过完成不同的推广任务来提高,另外介绍他人注册nitrous.io的服务也可以得到更多的N2O。

通过简单的界面截图来看看使用nitrous.io的过程吧。

1. 新建一个Box,可以选择Rails、Node.js、django和Go:

NewBox-Nitrous.IO

2. 指定Box的参数,内存和存储容量是需要消耗N2O的,我有230个点,可以创建一个640MB内存,750MB存储的box,再多就不行了:

N2O-Allocation-Nitrous.IO

3. N2O不够的话,可以去做任务充值,我已经都做掉了:

Earn-N2O-Nitrous.IO

4. 配置好Box后启动很快,几十秒到1分钟就可以进入web ide了。左边是文件浏览器;中间是编辑器;右边是多人协作的窗口,这个是nitrous.io的一个特点,可以让多个用户同时协作编辑同一个文件;下方是terminal窗口,可以执行命令:

Initial-WebIDE-Nitrous.IO

5. 写点go代码进去,保存后,文件就出现在左侧的文件浏览器里面了:

Go-Code-Nitrous.IO

6. 在下方terminal窗口里面敲个命令,看看执行结果:

go-run-Nitrous.IO

7.uname -a看看用的什么系统:

Terminal-Nitrous.IO

除了通过web ide访问nitrous.io的box以外,还可以ssh上去操作,基本上是一个免费的vps的感觉了。编写web程序常用的端口都是开放的,可以随时预览网站效果。

试试看nitrous.io,体验一下在网上快速开个虚拟机,随手码两行代码的感觉,点下面的图标注册,顺便帮我充点N2O吧:

Logo-Nitrous.IO

 

最后再提供几个类似的服务,供比较和参考:

https://www.pythonanywhere.com/

http://koding.com

VMWare Workstation 10界面失去响应

VMWare Workstation 10刚刚发布不久,版本号是10.0.0 build-1295980,我在Windows系统下安装试用。最近使用中发现启动软件后很快(10-20秒)界面就会失去响应,只能强行退出。

通过搜索发现了VMWare论坛中的一个post “Workstation 10 crashing”,从其中下载了一个测试工具conflict_test,经过测试发现在我的系统上VMWare Workstation 10和新版的Evernote有冲突:

Conflict Test VMWare Station 10按照PID在task manager中找到进程,并中止之:

Terminate Evernote.exe再重新启动VMWare Workstation 10,发现问题解决了。

从VMWare论坛中帖子里的情况看,多种不同的后台自动更新程序会与VMWare Workstation10冲突。VMWare官方已经了解了这个问题,但是没有披露何时会发布补丁或者更新版本。

Iptalbes Kernel Module Missing on DigitalOcean VPS

Kernel Module Missing

After I update kernel version from 3.8.4-1 (the stock version come from DO’s Archlinux template), I have found that iptables was not working because of kernel module missing.

# iptables -S
iptables v1.4.12: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)

The reason is DigitalOcean’s way of kernel management. You can only specify a kernel in DO Droplet control panel, not upgrading kernel in your own VPS. By using this way of kernel upgrading, the kernel module building process of Archlinux was bypassed; in result, no kernel module for my 3.9.4-1 kernel. That’s why iptables did not work.

Take a look at /lib/modules, there are only 3.8.4-1 stuffs:

# ls /lib/modules
3.8.4-1-ARCH extramodules-3.8-ARCH

This article shows the same problem on DO’s VPS.

Build Kernel Module Manually

To resolve this issue, a manual building of kernel 3.9.4-1 is required. Check this for grabbing and build a specific version of Archlinux package.

On my particular case, from this page download the 3.9.4-1 linux package, extract and issue a “makepkg” command.

Makepkg Linux 3.9.4-1

Building had taken some time on my $5/m plan Digital Ocean droplet. When everything done, copy kernel modules to /lib/modules. Check /lib/modules to see if I have kernel modules for 3.9.4-1:

# ls /lib/modules
3.8.4-1-ARCH 3.9.4-1-ARCH extramodules-3.8-ARCH extramodules-3.9-ARCH

Finally try “modprobe” and “lsmod” to check if the issue had been fixed.

Try DigitalOcean

Interesting with VPS for devs? Click the logo below to have a try:DigitalOcean Ref Link

Digital Ocean VPS Linux Kernel版本错乱导致iptables不可用

缘起

上文中提到为了解决一个NodeJS的bug,我在DO Droplet控制台中更换了linux kernel版本,从原来的3.8.4-1改成了3.9.4-1。

问题

在我准备配置iptables的时候,发现了这个操作带来的一个新的问题。DO不允许虚拟机自行升级和使用kernel。vps可以使用的kernel必须是DO提供的,在控制台中指定,重启后生效。这样的kernel升级过程绕过了Archlinux编译对应版本的kernel module的步骤,因此在我的机器上虽然已经使用了3.9.4-1的kernel,但是/lib/modules下面只有3.8.4-1的kernel module。在执行# modprob iptable_filter时,找不到对应版本的iptables相关的kernel module,结果就是无法使用iptables。

检查iptables状态时可以看到:

# iptables -S
iptables v1.4.12: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)

查看kernel配置,可以确定相关功能没有编译到kernel中,而是配置成为module:

# zgrep IPTABLES /proc/config.gz
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m

检查/lib/modules/,发现只有3.8.4-1相关的module在:

# ls /lib/modules
3.8.4-1-ARCH extramodules-3.8-ARCH

同样的问题可以在jvc26的blog post中看到。

解决

弄清楚原因之后,解决的方法也就顺理成章了。需要做的事情是编译出3.9.4-1的kernel modules,并放置在/lib/modules下面。

参考Archlinux Wiki文章Downgrading Packages中的Downgrading the kernel一节,在这里找到3.9.4-1的pkg文件下载。下载、解压然后用makepkg命令build这个linux包。Makepkg Linux 3.9.4-1

经过几十分钟的工作后,过程完成,可以在pkg目录下面找到编译的结果。把/usr/lib/modules中的内容(3.9.4-1-ARCH和extramodules-3.9-ARCH)复制到/lib/modules下面。像这样:

# ls /lib/modules
3.8.4-1-ARCH 3.9.4-1-ARCH extramodules-3.8-ARCH extramodules-3.9-ARCH

有了合适版本的kernel module之后就可以再行modprobe iptable_filter了,之后再lsmod检查一下是否生效即可。

后记

DigitalOcean看来在想办法提供让客户自行选择kernel的功能,不过目前来说还不可用。具体情况可以参考下面的文章:

https://www.digitalocean.com/blog_posts/linux-kernel-management-part-1

https://www.digitalocean.com/community/questions/how-can-i-boot-my-compiled-kernel-image-on-gentoo

https://www.digitalocean.com/community/articles/pacman-syu-kernel-update-solved-how-to-ignore-arch-kernel-upgrades

 

更改DigitalOcean虚拟机Kernel版本

本着不折腾的原则,本来应该不去动kernel这个设置的。尤其是在vps里面,厂家往往会对kernel做一些定制,针对Archlinux这种rolling release更加会禁止kernel的升级。

不过这次在使用nodejs的时候,发现了一个问题,运行程序时会报错:


events.js:72
throw er; // Unhandled 'error' event
^
Error: bind Unknown system errno 92
at errnoException (dgram.js:454:11)
at dgram.js:207:28
at dns.js:72:18
at process._tickCallback (node.js:415:13)
at Function.Module.runMain (module.js:499:11)
at startup (node.js:119:16)
at node.js:901:3

经过搜索发现貌似是nodejs和kernel之间互相有点不服,导致了问题,可以通过升级kernel绕过。

升级前的版本是:

# uname -a
Linux 3.8.4-1-ARCH #1 SMP PREEMPT Wed Mar 20 22:10:25 CET 2013 x86_64 GNU/Linux

在DO的控制面板里面,选中需要的kernel版本,再点Change。之后把vps poweroff,再在控制面板里面启动就完成了升级过程。

DigitalOcean Control Panel Kernel Update

升级后的版本是:

# uname -a
Linux 3.9.4-1-ARCH #1 SMP PREEMPT Sat May 25 16:14:55 CEST 2013 x86_64 GNU/Linux

这个“bind Unknown system errno 92”的nodejs问题也随之解决了。