• 从 Subclipse 到 Subversive: 第一印象

    部分翻译自:Switching from Subclipse to Subversive: First Impressions

    译者注:虽然是翻译的,但基本上和我现在的状态比较吻合。

    对于个人的项目,我已经彻底转换成用 Git 来做版本管理。而工作中我不得不继续使用 Subversion 以便团队的每个人都能共享。我不是说 Git 不好用,只是我的团队还没有准备好这种转换。

    我对采用 Git 作为 Subversion 的客户端使用的前景极其好奇——我知道这不是很难——然而我还没有在工作这么重要的场合尝试的勇气。我不能承受万一出什么问题。因此到目前为止我依然使用原生的 SVN 作为我的客户端。

    最近我决定尝试一下 Subversive 。我刚开始使用 Subversion 的时候是用的 TortoiseSVN 。后来我开始用 Eclipse 和 CFEclipse 进行开发,(经过少许调查发现)似乎很多人认为 Subclipse 是更好的客户端。所以近几年我一直在用这个。

    我本人和至少一个使用 Subclipse 的合作者碰到一些问题,我们认为是 Subclipse 特有的。我们经常将项目 checkout 到共享的目录里。有时候会出现顶层目录无法 commit 的状况,有时选择不同目录的若干个文件后也不行。这很令人恼火。命令行工具就没问题,如果IDE集成环境也能正常使用就好了。

    这就是我为何要尝试新的工具。不仅因为 Subversive 是 Eclipse 的官方子项目(这是很好的认可),而且我还听到不少人的称赞。我要弄清楚当初选择 Subclipse 是不是正确的决定。

    速度

    我的第一印象是 Subversive 好快。我没有做过并列对比,但主观上用它浏览很大的仓库的时候非常快。checkout 看上去也很快。

    管用吗

    这是我决定要不要转换的重要原因。回答简单而干脆:管用!目前我还没有碰到在 Subclipse 中出现的问题。

    快捷键

    Update? Ctrl+Alt+U
    Commit? Ctrl+Alt+C
    与仓库的最新版本比较? Ctrl+Alt+L

    有缺点吗

    实际上,有。从 Eclipse 的更新站点安装完客户端之后,还得再装另外一样东西的做法很是让人纳闷。似乎开始装的只是个框架,当我第一次使用的时候它提示要装个 connector ——而 Subclipse 一次安装就搞定了。

    这也许不是什么大问题。(译者:接下来是抱怨由此造成的 CFBuilder 和 Windows UAC 的苦恼。译者不感兴趣,略过。)

    我推荐它吗

    当然。有快捷键,速度又快。在我不能用 Git 地方就用 Subversive。

  • 实战给装了 VMWare ESXi 的 DELL PERC H700 添加硬盘

    缘由
    公司有台带有 PERC H700 RAID 控制器的 DELL 服务器,上面安装了 VMWare ESXi 4.1。
    由于业务扩张,硬盘空间不足,我们买了块新硬盘要加进去。
    原来是3块300G的硬盘构成了RAID5,现在要通过重新配置阵列加一块进去。

    步骤0 备份数据

    步骤1 扩展阵列

    在 LSI 的主页上下载 MegaRAID VMWare Release
    然后解开把文件通过 vSphare Client 上传到服务器上。然后在控制台上执行下面的命令:

    /tmp/MegaCLI # ./MegaCli -LDRecon start r5 [Add PhysDrv[32:3]] L0 -a0*
    
    Start Reconstruction of Virtual Drive Success.
    
    Exit Code: 0x00
    
    /tmp/MegaCLI # ./MegaCli -LDRecon ShowProg L0 -a0*      
    
    Reconstruction on VD #0 (target id #0) Completed 0% in 0 Minutes.
    
    Exit Code: 0x00

    第二个命令是查看进展的。我们这个300G的硬盘大约花了不到三个小时的时间。

    /tmp/MegaCLI # ./MegaCli -cfgdsply -aAll
    
    ==============================================================================
    Adapter: 0
    Product Name: PERC H700 Integrated
    Memory: 512MB
    BBU: Present
    Serial No: 11B05V7
    ==============================================================================
    Number of DISK GROUPS: 1
    
    DISK GROUP: 0
    Number of Spans: 1
    SPAN: 0
    Span Reference: 0x00
    Number of PDs: 4   << 从3变成4了。
    Number of VDs: 1
    Number of dedicated Hotspares: 0
    Virtual Drive Information:
    Virtual Drive: 0 (Target Id: 0)
    Name                :Virtual Disk 0
    RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3
    Size                : 836.625 GB  << 从557.75 GB变成836.625 GB了。
    State               : Optimal
    Strip Size          : 64 KB
    Number Of Drives    : 4
    Span Depth          : 1

    步骤2 扩展VMWare的存储区
    先调查好系统状况:

    ~ # esxcfg-scsidevs -l
    ...
    naa.6782bcb00f7de00014fe794f0593cfee
       Device Type: Direct-Access
       Size: 856704 MB
       Display Name: Local DELL Disk (naa.6782bcb00f7de00014fe794f0593cfee)
       Multipath Plugin: NMP
       Console Device: /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfee
       Devfs Path: /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfee
       Vendor: DELL      Model: PERC H700         Revis: 2.10
       SCSI Level: 5  Is Pseudo: false Status: on
       Is RDM Capable: false Is Removable: false
       Is Local: true
    ...
    
    ~ # fdisk -l
    
    Disk /dev/disks/naa.6782bcb00f7de00014fe794f0593cfee: 898.3 GB, 898319253504 bytes
    64 heads, 32 sectors/track, 856704 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    
                                               Device Boot      Start         End      Blocks  Id System
    /dev/disks/naa.6782bcb00f7de00014fe794f0593cfeep1             5       900    917504    5  Extended
    /dev/disks/naa.6782bcb00f7de00014fe794f0593cfeep2           901      4995   4193280    6  FAT16
    /dev/disks/naa.6782bcb00f7de00014fe794f0593cfeep3          4996    571136 579728384   fb  VMFS
    /dev/disks/naa.6782bcb00f7de00014fe794f0593cfeep4   *         1         4      4080    4  FAT16

    开始按照最下面的参考文献删除VMFS分区然后重建。

    ~ # fdisk /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfee
    
    The number of cylinders for this disk is set to 856704.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
       (e.g., DOS FDISK, OS/2 FDISK)
    
    Command (m for help): p
    
    Disk /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfee: 898.3 GB, 898319253504 bytes
    64 heads, 32 sectors/track, 856704 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    
                                                        Device Boot      Start         End      Blocks  Id System
    /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfeep1             5       900    917504    5  Extended
    /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfeep2           901      4995   4193280    6  FAT16
    /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfeep3          4996    571136 579728384   fb  VMFS
    /vmfs/devices/disks/naa.6782bcb00f7de00014fe794f0593cfeep4   *         1         4      4080    4  FAT16

    然后去 vSphere Client 看,可用空间已经增长了。

    最初的状态:

    加入硬盘后:

    改好分区表之后的最终结果:

    参考文献

    https://tinychen.com/20200902-megacli-command-introduction/
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
    # 查看所有阵列卡的所有阵列逻辑卷的所有信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -a0 | grep -i "Virtual Disk"
    # 查看第1张阵列卡上一共有多少个raid阵列组(默认从0开始计数)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -L0 -a0
    # 查看第1张阵列卡上的第0个raid阵列组的信息(默认从0开始计数)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDPdInfo -aAll
    # 查看所有阵列卡的所有阵列逻辑卷的所有信息(包括阵列逻辑卷对应的物理硬盘)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL
    # 显示所有阵列卡信息,可以查看机器上一共有多少张阵列卡以及每张卡的详细信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL
    # 查看所有阵列卡上的所有物理硬盘信息,包括型号、接口、SN码、部分SMART信息等
    
    /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r5 [32:2,32:3,32:4] WB Direct -Hsp[32:4] -a0
    # 在第1张阵列卡上创建一个 raid5 阵列,由物理盘 1,2,3 构成,该阵列的热备盘是物理盘 4
    # 注意这里的32:2指的是使用eID和slot ID对一个阵列卡下的硬盘进行定位(默认从0开始计数)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r5 [32:2,32:3,32:4] WB Direct -a0
    # 同上,创建一个 raid5 阵列,但是不指定热备盘
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDRecon -Start -r5 -Add -PhysDrv[32:5] -L1 -a0
    # 在线添加物理硬盘到某个阵列中
    
    /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdDel -L1 -a0
    # 删除第1张阵列卡上的第2个raid阵列(默认从0开始计数)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInit -ShowProg -LALL -aALL
    # 阵列创建完后,会有一个初始化同步块的过程,可以看看其进度
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInit -ProgDsply -LALL -aALL
    # 同上,但是以动态可视化文字界面显示进度信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDBI -ShowProg -LALL -aALL
    # 查看阵列后台初始化进度
    
    /opt/MegaRAID/MegaCli/MegaCli64 -LDBI -ProgDsply -LALL -aALL
    # 同上,以动态可视化文字界面显示
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set [-EnclAffinity] [-nonRevertible] -PhysDrv[32:7] -a0
    # 指定第1张阵列卡的第8块盘作为全局热备 (默认从0开始计数)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Set [-Dedicated [-Array1]] [-EnclAffinity] [-nonRevertible] -PhysDrv[32:7] -a0
    # 同上,指定为某个阵列的专用热备
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDHSP -Rmv -PhysDrv[32:7] -a0
    # 删除全局热备盘
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDOffline -PhysDrv [32:2] -a0
    # 将某块物理盘下线(offline)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDOnline -PhysDrv [32:2] -a0
    # 将某块物理盘下线(online)
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [32:2] -a0
    # 换盘后查看物理磁盘重建进度
    
    /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ProgDsply -PhysDrv [32:2] -a0
    # 以动态可视化界面查看物理磁盘重建进度
    
    /opt/MegaRAID/MegaCli/MegaCli64 -FwTermLog -Dsply -aALL
    # 查看raid卡日志,注意日志的输出量可能较大,阵列卡对应的组建阵列等操作的详细信息都可以在日志中查看
    
    /opt/MegaRAID/MegaCli/MegaCli64 -cfgdsply -aALL
    # 显示Raid卡型号,Raid设置,Disk相关信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -adpCount
    # 显示适配器个数,只能查看机器上一共有多少张阵列卡,不能查看详细信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpGetTime –aALL
    # 显示适配器时间
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -aAll
    # 查看BBU的详细信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus - aALL |grep 'Charger Status' 
    # 查看BBU电池的充电状态
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL
    # 显示BBU状态信息
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -aALL
    # 显示BBU容量信息
    
    /opt/MegaRAID/MegaCli/ MegaCli64 -AdpBbuCmd -GetBbuDesignInfo -aALL
    # 显示BBU设计参数
    
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -aALL
    # 显示当前BBU属性
    • https://blog.frehi.be/2011/09/12/megacli-useful-commands/
    • http://www.mysqlsupport.cn/megacli-study/
      MegaCli常用参数介绍
      MegaCli -adpCount 【显示适配器个数】
      MegaCli -AdpGetTime –aALL 【显示适配器时间】
      MegaCli -AdpAllInfo -aAll 【显示所有适配器信息】
      MegaCli -LDInfo -LALL -aAll 【显示所有逻辑磁盘组信息】
      MegaCli -PDList -aAll 【显示所有的物理信息】
      MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ 【查看充电状态】
      MegaCli -AdpBbuCmd -GetBbuStatus -aALL【显示BBU状态信息】
      MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL【显示BBU容量信息】
      MegaCli -AdpBbuCmd -GetBbuDesignInfo -aALL 【显示BBU设计参数】
      MegaCli -AdpBbuCmd -GetBbuProperties -aALL 【显示当前BBU属性】
      MegaCli -cfgdsply -aALL 【显示Raid卡型号,Raid设置,Disk相关信息】
      MegaCli -cfgdsply -aALL |grep Policy 【查看Cache 策略设置】
      MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Relative State of Charge’【查看充电进度百分比】
      磁带状态的变化,从拔盘,到插盘的过程中。
      Device |Normal|Damage|Rebuild|Normal
      Virtual Drive |Optimal|Degraded|Degraded|Optimal
      Physical Drive |Online|Failed –> Unconfigured|Rebuild|Online
      Use of LSI MegaCli tool in ESX 4
      http://communities.vmware.com/thread/228615

    PERC H700 Online Capacity Expansion or RAID Level Migration
    http://lists.us.dell.com/pipermail/linux-poweredge/2011-March/044451.html

    MegaCli -LDRecon {-Start -rX [{-Add | -Rmv} -Physdrv[E0:S0,…>}|-ShowProg|-ProgDsply -Lx -aN
    >

    I was able to successfully reconfigure the VD from a 3 drive RAID5 set
    to a 4 drive RAID5 set using the following command:
    *# /opt/MegaRAID/MegaCli/MegaCli64 -LDRecon start r5 [Add PhysDrv[32:3]]
    L0 -a0*
    Start Reconstruction of Virtual Drive Success.

    And could check the status using:
    *# /opt/MegaRAID/MegaCli/MegaCli64 -LDRecon ShowProg L0 -a0*
    Reconstruction on VD #0 (target id #0) Completed 76% in 200 Minutes.

    Four hours later I’ve gone from from:
    > Virtual Drive: 0 (Target Id: 0)
    > Name :
    > RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
    > Size : 837.25 GB
    > State : Optimal
    > Strip Size : 64 KB
    > Number Of Drives : 3
    To:
    > Virtual Drive: 0 (Target Id: 0)
    > Name :
    > RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
    > Size : 1.225 TB
    > State : Optimal
    > Strip Size : 64 KB
    > Number Of Drives : 4
    /opt/MegaRAID/MegaCli/MegaCli64 -getLdExpansionInfo
    >>> -Lall -aALL
    >>>
    >>>
    >>> Virtual Disk: 0 (Target Id: 0)
    >>> Expansion : Not
    >>> Possible
    >>>
    >>> Exit Code: 0x00

    使用MegaCli和Smartctl获取普通磁盘和SSD磁盘信息_1
    http://hi.baidu.com/stealth_space/blog/item/416e91acde14e8a4cb130c97.html

    Adding a VMFS Extent using vmkfstools
    http://www.zealkabi.com/2009/03/adding-vmfs-extent-using-vmkfstools.html

    Extending an Existing VMFS-3 Volume

    vmkfstools -Z –extendfs

    This option adds another extent to a previously created VMFS volume
    . You must specify the full path name, for example
    /vmfs/devices/disks/vmhba0:1:2:1, not just the short name vmhba0:1:2:1. Each
    time you use this option, you extend a VMFS-3 volume with a new extent so that the
    volume spans multiple partitions. At most, a logical VMFS-3 volume can have 32
    physical extents.

    Example for Extending a VMFS-3 Volume:

    vmkfstools -Z /vmfs/devices/disks/vmhba0:1:2:1 /vmfs/devices/disks/vmhba1:3:0:1

    This example extends the logical file system by allowing it to span to a new partition.
    The extended file system spans two partitions.vmhba1:3:0:1 and vmhba0:1:2:1. In
    this example, vmhba1:3:0:1 is the name of the head partition.

    Listing Attributes of a VMFS Volume

    vmkfstools -P –queryfs [-h –human-readable]

    When you use this option on any file or directory that resides on a VMFS volume, the
    option lists the attributes of the specified volume. The listed attributes include the
    VMFS version number (VMFS-2 or VMFS-3), the number of extents comprising the
    specified VMFS volume, the volume label if any, the UUID, and a listing of the device
    names where each extent resides.

    You can specify the -h suboption with the -P option. If you do so, vmkfstools lists the capacity of the volume in a
    more readable form, for example, 5k, 12.1M, or 2.1G.

    For example:

    # vmkfstools -P /vmfs/volumes/MSALUN12/AM_W2k3/AM_W2k3-flat.vmdk
    VMFS-3.31 file system spanning 1 partitions.
    File system label (if any): MSALUN12
    Mode: public
    Capacity 83214991360 (79360 file blocks * 1048576), 8964276224 (8549 blocks) avail
    UUID: 47669f06-beeb8164-ed10-000e7fb4371c
    Partitions spanned (on “lvm”):
    vmhba1:0:12:1
    (One or more partitions spanned by this volume may be offline)

    How to increase the size of a local datastore … on an ESXi4?

    fdisk /vmfs/devices/disks/mpx.vmhba1:C0:T0:L0

    As you can see on the picture, the local VMFS datastore is only 651MB. Also if you add up all the partitions you end up with a bit more than 1500MB. I’m definitely +500MB short.

    Press d then Enter 2 to delete /vmfs/devices/disks/mpx.vmhba1:C0:T0:L0p2
    Press n and Enter to start creating a new partition.
    Press p and Enter to identify that you are creating a primary partition.
    Press 2 and Enter to identify that you are creating a second partition. A primary partition already exists.
    Press Enter to accept the default ending value.
    Press t and Enter to identify that you want to change the type of a partition. We want to change partition# 2.
    Type fb and press Enter. This sets the volume to type VMFS.
    Press w and press Enter to save the changes and exit fdisk.

    Now that we have set properly the partition table, we need to grow the file system on it. The :2 in the command identifies that this operation is performed on the second partition. Run the following command:
    vmkfstools –growfs /vmfs/devices/disks/vml.0000000000766d686261313a303a30:2 /vmfs/devices/disks/vml.0000000000766d686261313a303a30:2
    Now in the Configuration tab of my ESXi4.0 host, I go to Storage, select the local datastore (datastore1), right click and select Refresh. Now the local VMFS datastore is 1120MB (1.12GB) and uses all remaining disk space.

    [UPDATE] In certain occasion, you cannot grow the VMFS disk because it doesn’t exist anymore. In that case you will have to create a VMFS datastore. By default it will take all space available. The command is: vmkfstools -C vmfs3 /vmfs/devices/disks/vml.0000000000766d686261313a303a30:2
    Note that you will have to add that new VMFS datastore to your host using the vCenter Client. You will be able to give it a name, for instance ‘datastore1′, and the set the block size (1MB by default).

    Growing a datastore from the Service Console in ESX 4.0

  • 给 MySQL 的 root 用户赋予或取消权限

    [HOWTO] Grant and Revoke Remote root Access to MySQL
    To grant root access from all hosts (except for localhost):

    GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'topsecret';
    

    To revoke root access from all hosts (except for localhost):

    DELETE FROM mysql.user WHERE User = 'root' AND Host = '%';
    FLUSH PRIVILEGES;
    

    To enable MySQL service to accept connections from all hosts change the following line in file mysql.conf:

    bind-address=127.0.0.1
    

    to

    bind-address=0.0.0.0
    

    or better just comment out:

    #bind-address=127.0.0.1
    

    and restart the MySQL service.

    Notes:
    *) The percent symbol (“%”) in the notation root@”%” means “any host”, but it doesn’t imply localhost. You need to repeat the commands above with root@localhost in order to grant/revoke permissions for localhost.

    来源:http://ptankov.wordpress.com/2008/04/09/howto-grant-and-revoke-remote-root-access-to-mysql/

  • 列出 Java 环境可用的所有字体名称

    import java.awt.GraphicsEnvironment;
    
    public class ListJavaFonts
    {
    
      public static void main(String[] args)
      {
        String fonts[] = 
          GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
    
        for ( int i = 0; i < fonts.length; i++ )
        {
          System.out.println(fonts[i]);
        }
      }
    
    }
    
  • getResource().getPath()返回的路径空格变成了 %20

    最近我们有一个 web 程序,为了取到配置文件的路径,采用了
    this.getClass().getResource(“/”).getPath()
    的方法来取得存放 class 的物理路径。本来测试的时候没问题,一发布崩溃掉了。究其原因是发布环境的 Tomcat 的安装目录带有空格,而 getPath 的返回值把空格给转换成了 “%20”。经过一番调查,原来是这是 Java 的一个历史悠久的 bug:

    Bug ID: 4466485 getClass( ).getResource( ).getFile( ) returns file name with %20

    此 bug 于 2001年6月被提出来,2002年11月最终关闭。
    没有修复的原因是这样做会导致兼容性问题。
    官方给出的解决方法是采用URI类再把它解码出来。

        URI uri = new URI(url.toString());
        FileInputStream fis = new FileInputStream(uri.getPath());

    而这个bug是当初为了修复另一个 bug 的时候引入的:
    Bug ID: 4359123 NoClassDefFoundError if ‘#’ anywhere in path

    我们最终决定不用这个拐弯抹角的方法,干脆采用下面几种办法直接取得 Stream。

        ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
        Class.getResourceAsStream ("/some/pkg/resource.properties");
        ResourceBundle.getBundle ("some.pkg.resource");
     
  • 朗逸的原厂导航地图

    朗逸的原厂导航地图是中国地图出版社出版的。 从中国地图出版社电子地图专栏可以查到最新的出版情况。目前还不知道到底是应该找4S还是找400问。现在最新的是:

    中国导航电子地图
    中国导航电子地图-上海大众汽车大众品牌专用版

    中国导航电子地图-上海大众汽车大众品牌专用版

    出版日期:2010年11月 GS(2010)1537号
    ISBN 978-7-900257-71-0/K.312

    顺藤摸瓜,在国家测绘局的地图审核结果公告里面可以查到更详细的信息。

    送审单位:中国地图出版社
    送审地图: 《中国导航电子地图(上海大众汽车大众品牌专用版)》(专用于上海大众RNS MidLine车载导航仪SK H10)
    用途: 公开出版
    审图号: GS(2010)555
    批准时间: 2010-05-11

    中国地图出版社
    《中国导航电子地图-上海大众汽车大众品牌专用版》专用于上海大众RNS MidLine 车载导航仪SK H10
    公开出版
    GS(2010)1537
    2010-12-15

    看来基本上每年会更新两次。5月快到了,索性在等等,等5月的版本出了再升级吧。升一次好像还挺贵的。

  • 补齐被意外砍短的 Oracle .DBF 文件

    客户一个建在 Linux 上的 Oracle 系统意外崩溃了。
    抢救出来的数据文件似乎被砍掉了一截,小于应有的尺寸。

    ORA-01122: database file 4 failed verification check
    ORA-01110: data file 4: 'xxx/users01.dbf'
    ORA-01200: actual file size of 1569280 is smaller than correct size of 1569281
    

    应急之下通过 Google 找到了一个临时的对付办法。

    1。先造一个大小合适填满零的补丁:

    $dd if=/dev/zero of=/tmp/patch0 count=1 bs=16k
    

    其中 bs 可以设成init.ora 里设置的 block_size。count 自然是设成 Oracle 抱怨少掉的块数。

    2。应用补丁

    $cat /tmp/path0 >> $ORACLE_BASE/oradata/$ORACLE_SID/users01.dbf
    

    3。恢复数据文件

    SQL>recover datafile 4;
    Media recovery complete.
    SQL>alter database datafile 4 online;
    

    上面的 4 是Oracle 抱怨出错的数据文件的编号,就不用再费劲输入长长的路径了。

    接下来就是祈祷重要的数据都还在了。

    附,备忘: 起动停止 Oracle 数据库

    SQL> conn / as sysdba
    Connected.
    SQL>
    SQL>
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL>
    SQL>
    SQL> startup mount
    ORACLE instance started.
    SQL> startup pfile='/path/to/init.ora'
    ORACLE instance started.
    

    另外Oracle的密码文件在 $ORACLE_HOME/dbs 里面。

  • 初次体验东航商务舱(顺道体验航班取消)

    2011年刚开始,从来都是乘经济舱的我意外体验了一次商务舱旅行。

    我因为工作需要从上海前往东京。本来预定的是达美的经济舱。然后我出发前一天的晚上试图从达美网站上自助办理登机手续的时候却发现航班被取消了。网站上建议改乘其它航班,但当天没有可选的航班。我赶紧打达美的400,结果人家根本没有人在值班,只有录音电话,除了知道该航班确实已经取消了之外没有任何别的功能。这服务⋯⋯ 我又通过公司的人找到了票务公司的负责人,卖票的告诉我没有取消,你直接去机场就行了。也没没办法了,只有到机场再说了。

    第二天一大早我到机场的时候,达美的柜台已经忙的一塌糊涂了。问了柜台的人,好像也没什么特别的理由,只是飞机坏了,周转不过来了。一开始我被告知可以选9点半的或者12点的航班。轮到我的时候又被告知9点半的航班满员了,只能选12点的东航。我跟半票的小姐说,没办法,先给我改了吧,免得一会儿连12点的都走不成了。赔偿啥的我不和你谈,你给我开个证明吧。柜员一脸茫然,似乎没有想到这种要求⋯⋯ 赶紧请示旁边的领导(不知到他这个叫什么职位,满里面最忙的似乎就是这个人了,手持对讲机一会儿疏导旅客,一会儿指挥柜员。碰到突发状况的时候最能体现人的工作能力了,跑题了)。这个领导开始跟我讲自己可以在网站打印。我说自己打印的谁信啊?你们的400不是一般的难打,网站怎么查证?后来跟对讲机的人说赶紧的打几张延误证明拿过来。然后我就等啊等啊,期间看到有抱怨的,有骂人的,但总体秩序还算好。通过工作人员的对话我能听出来,虽然他们不承认,其实9点多的航班应该还是有的,只是他们要先满足那些到东京去转机的。人家去美国的要是飞机赶不上损失可就大了。

    拿到延误证明后我本来还想问问我那 iPad 的事情,但问了一圈底下闲着的小兵都不知道怎么处理,必须得问那两个最忙的领导,但他们明显没功夫睬我,毕竟是在救火呵。我等了一阵子实在是累了,老耗着也每意义,于是动身前往东航柜台。

    (再说一点题外话,领导忙的要死的时候,底下空闲的人还是有的。看来不管啥行业都有这种状况吧。救火的时候总是领导最累,有的是人就是帮不上忙。)

    东航开了一个专门的柜台,我排在快最后面了,于是轮到我的时候,柜员告诉我没位置了,请回一号柜台听候发落(当然,柜员不是用的这个词)。

    我回一号柜台,然后就看到有人激动到冲进了柜台,柜台的人甚至叫来了警察。当然实际上没起什么冲突,他们只是试图在柜台里缠住这个负责人。不一会儿,东航决定给我们升成商务舱。一行人排着整齐的队伍前往商务舱柜台。带队的人数好了人数跟柜台人反复交代,“只收这10个人,达美的再来不收了”。于是我的首次商务舱体验开始了。

    首先商务舱半票柜台就和经济舱不一样:人少,不怎么排队;柜员比经济舱柜台的更有礼貌;柜台上有摆的糖。一开始柜员还不知到像我们这样的怎么处理,互相讨论了一阵子,最后收掉了达美给的一张类似登机牌的东西,换了一张东航登机牌,另外还给了一个贵宾室的使用证。托运的行李上比以前多贴了一张商务舱的蓝纸条。

    过了安检和海关后,就可以进“头等舱休息室”候机了。不知到为何给的不是最靠近登机口的那个贵宾室,也许东航就是那个,也许是我舱位不够高。航空公司的贵宾室比JCB金卡的贵宾室上了一个档次:杂志更像那么回事,有很多时尚杂志而不是以广告为主;饮料和小点心可选的种类更多,甚至还有各种面包。我从5点多起床,虽然吃了早饭,但还是很饿。我吃了一罐八宝粥,感觉好多了。然后又喝了一罐青岛啤酒,吃了点花生和闲趣。后来还喝了点可乐。“酒足饭饱”的时候正好服务员过来提醒可以登机了。

    登机口已经排起了长队,但与我无关,凭借商务舱的登机牌,除了几位带小孩的乘客之外没有人和我抢道。进入机舱,空姐马上接过我手中的外套,挂进壁柜。然后又递上拖鞋和热毛巾,感觉就像进入了星级酒店。商务舱的座位果然宽敞,而且本来我以为要坐满了,结果似乎基本上就只有我们这10来个达美转过来的。上座率低可以保证更好的乘客体验?商务舱的噪音也比较小一点,也许是因为离引擎比较远的缘故吧。等我回过神来的时候,空姐已经收走了用过的毛巾,并且送上了饮料。--商务舱的座位扶手很宽,上面放几个杯子是绰绰有余。经济舱他就是想在起飞前给饮料也没地方放呐。

    上完饮料之后,空姐送上了制作精美的菜单。即使短途旅行也有餐前开胃菜和餐后甜点。共有四种主菜可以选择(其实是三种,有一种没有)。起飞后,空姐会上前帮忙打开小桌板,铺上餐巾,并送上餐具。然后就开始上菜了。商务舱的餐点看上去确实是出自较有档次的酒店只手,虽然经过飞机上的加热之后口感大打折扣,卖相还是很好的的。刀叉是钢的,餐具都是瓷的,连喝饮料用的杯子都是玻璃的。(虽然感觉好,但我不禁要怀疑,真的有必要么,毕竟万一飞机摇晃的厉害了,被盘子砸的可是我自己啊⋯⋯)

    期间空姐的服务也和酒店一样好,只要看到你有盘子吃光了,马上就会过来帮你收走。中间会有多种面包可以选择。餐后点心有哈根达斯。饮料只要看到你杯子快空了就会主动过来加。

    商务舱的每个椅子前面都有一个小液晶电视,有几部比较老的电影可以点播。耳机可也以看得出比经济舱的好。我点了一部没看过的(不记得名字了),画质不咋地,接近VCD的品质吧。还没看完就开始降落了。空姐会帮你拿好外套放在旁边的座椅上。飞机挺稳后,我可以第一个走出机舱,不需要漫长的等待。

    而当我办好海关的手续的走到行李提取处的时候,我的托运行李早就在那里等着我了。(那张小纸条不是白帖的哈。)

    也许我以后旅行还是会选择经济舱,但商务舱的服务绝对是物有所值的。

    后记:这次办理回国登机手续的时候,达美的机器提示感谢我配合变更航班,让我到上海浦东机场领取一份“酬劳”。但我到浦东机场的时候已经是半夜,已经没有人在值班了。不知到会是什么呢?会不会值得我转成跑一趟机场呢?

  • VMware Player 和 Fusion 的兼容性

    Windows 下在 VMware Player 能够正常运行的虚拟机(本来不是在这个版本上装的),复制到 Mac 下可以毫无问题的运行。
    只是开始的时候提示是不是升级。原来硬件版本(virtualHW.version)是7,升级后为8。(不确定原来这个版本7的是不是因为原来是在低版本的VMware上安装造成的。)

    然后VMware Tools提示要升级,直接安装又说已经安装了最新版本,卸载之后可以正常安装。(不重装似乎也没啥问题,除了那个提示。)
    比较一下VMware Tools 的版本:
    VMware Player 3.1.3 build-324285 下载到的Tools版本是 8.4.5, build-324285
    VMware Fusion 3.1.2 (332101) 自带的Tools版本是 8.4.5, build-332101
    版本号一致,build编号稍有不同,想必应该没有啥不兼容的地方。

  • iPad 丢了

    昨天下飞机的时候同事帮忙拿了一下包,又给LP打了个电话,结果我思路一乱,把 iPad 落在飞机上了。一路上LP还说今天怎么我的包这么轻,我也没在意,只想这次是把伞和本子都放箱子里了。回家发现 iPad 不在了,一回想下机的流程,确定是忘在飞机上了。于是上达美航空的主页找寻关于失物的处理方法,最后找到一个失物申报表,填了一下,也没找到电话之类的。新想电话服务肯定也下班了,天亮再说吧(到家已经半夜12点半了)。

    今天到公司赶紧找失物招领电话,查到浦东机场的号码是
    T1电话:68346324
    T2电话:68340417
    打了第一个号码,结果他们说飞机上的不在他们这里管,让我找 96990 问航空公司的号码。然后我打 96990 得到了达美的三个电话:
    4008140081/68355493/68339150
    打第二个没人接,然后我打400。漫长的音乐,客服接了之后第一反应说应该找机场,给了个号码 021-68340323。我说我打过机场电话了,人家说飞机上的得找航空公司。客服问了我航班和丢失的东西之后,又是漫长的音乐。然后她说:我打了机场的电话,奇怪的是没有人接听。然后问了我姓名,通过他们系统查到了我会员信息的电话和地址,并核对之后说她现在也联系不上负责的人,会稍候再跟进。

    事后我打400给的68340323,结果是“您所拨打的用户线故障”,不知到是不是机场的人偷懒把线拔了⋯⋯
    更新:68340323打通了,一说是达美的他们说机场不管,是东航承包的,给了东航的电话:021-68339148。然后这个号码又是“您所拨打的用户线故障”。也许打的人太多了就这样?
    更新:下午68339148也打通了,他们又给了达美办公室的电话:68355031/32 这个号码照例也是无人接听。

    我申请过 Find My iPhone 服务,通过me.com 往ipad上发了信息。
    不过这条途径希望渺茫,因为我的ipad只是WIFI的,我开了飞行模式又设了开机密码,一般人没法用它上网了。

    但愿最终能找到吧。不管怎么说,以后还是要养成下飞机下车的时候检查一遍行李的习惯。
    哎⋯⋯ 以前我都注意的,不知怎么这次就大意了。