解惑

解己之惑,解人之惑

作者:cherami (第17页共82页)

ZT:买房血的教训

经过了漫长的找房,和历时2个月的转按揭过程,终于在房管局完税,写着我的名字的房产证也要出来了。可以说基本上已经
曾尘埃落定了,所以是时候找个时间,把一些经验,心得给总结出来了。

先总结下签合同时,一定要在备注上加上去的几项:

1、贷款不到,合同作废,返还订金。
这点是最最重要的一点,任何买房合约,都要坚决加上去的。这点的好处,明里是为了防止自己没有贷到款而违反合
同,暗里是为了自己铺垫好后路。假如自己突然不想买了,可以通过一些措施来让自己贷款不到,这样就可以堂而皇
之地解除合约,呵呵。一箭双雕。

2、递件时留部分首期尾款,在交房时扣除应扣费用后再交付。
这样是保障自己的权益,比如说对方的银行按揭没有交最后几个月啊,没有迁户口的扣费啊等等。始终还有些钱在口
袋里面,自己的底气是要更足一点。

3、卖家在交房之前把户口迁出,逾期一日,扣房款千分一
户口问题很重要啊,买这个房子不就是为了户口嘛,sigh。

4、按揭公司可由买方自由选择。
这点是血的教训啊,千万不能找中介介绍的按揭公司。我这次找中介介绍的按揭公司,给砍了一半的钱。要知道中介
和按揭之间是对半分账的,亏死了。而且中介介绍的按揭公司一般人比较黑,比较烂。这次我办按揭的时候,那个按
揭公司的人居然没有出现过一次。就是叫小弟跑过2趟,而且连电话都没有主动打过一个,tmd。上次在我跟中介投诉
之后,才打过来一个电话,还要态度很差。这个按揭的懒人是x翰按揭的卫x美。大家以后要按揭的话就小心这个女人
了。据行内人介绍,中介介绍的按揭公司,中介和按揭是五五分帐的,等于中介又骗了你几千元!如果自己单独去找
按揭公司办,无论贷款多少,1K多绝对搞掂!

5、首期可选银行托管,买家自由选择
这点是为了自己资金保障,如果在势头不对的时候,为自己的十多万,几十万找个安全的地方放着。

6、房款包括所有费用,交房前不得再有其他费用
这点是稳妥起见,为自己做的保障。遇到赖皮的房东和中介,就能保障自己的权利了。

7、递件之后马上交首期,首期后下午交楼
对于房子空着的房东,要加上这点。这样能够保证自己尽快搬进房子。后面的手续无论多长,都没关系了。特别是对
于转按揭的卖家,反正银行要放款给他的不多了,收到首期就交房,也是很容易理解的。

8、递件完毕交中介费25%,过户完毕交中介费25%,交房完毕交剩下的50%中介费
要是遇上不好的中介,就只有靠这个条款保障自己的利益了。要不有些烂中介,你一签合同的时候就叫你交全款,收
钱之后爱理不理,到时你怎么办?这个世界,钱在谁的手里,谁就是大爷啊!!

阅读全文

一切皆有可能

应该说Java的设计会保证JRE的安全,但是我们还是遇到一个情况:安装搜狗输入法以后导致我们一个基于Java的系统无法启动,目前已经遇到两例,所以基本可以确认就是搜狗输入法的问题,因为卸载搜狗输入法后系统马上就好了。
开始的时候是我们老大遇到这个问题,折腾了很长时间也不知道什么原因,后来可能是IT帮着找到原因的,后来我的同桌也遇到一样的问题,刚好我记得我老大说过这个问题,所以问他用的什么输入法,他说搜狗,我说卸载再试试,卸载完果然就好了。

开始习惯MSDN格式的API文档了

最开始很不习惯MSDN格式的api文档,感觉很分散,原理性介绍、快速入门、API的说明以及常量定义都不知道怎么弄的。
经过对CDO的文档的摸索,发现这些东西都是存在的,只是和JAVA的那些习惯不一样,java的组件的文档一般比较全面,而且把这些东西组织得很好,开始就是quick start,然后是developement guide,最后就是API reference,链接也做得比较好。虽然MSDN的文档不缺少这些内容,在内容之间的引用做得似乎弱一些。

从CDO得到Mailbox的大小

前几天的方案都比较复杂一些,再来一个简单的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MAPI;

namespace ConsoleApplication3
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            Session session = new Session();
            session.Logon(null, null, false, true, 0, true, "exchange2007\nuser1");
            InfoStores infoStores = (InfoStores)session.InfoStores;
            for (int i = 0; i < (int)infoStores.Count; i++)
            {
                InfoStore infoStore = (InfoStore)infoStores.get_Item(i + 1);
                if (((string)infoStore.Name).IndexOf("Mailbox – ") >-1)
                {
                    Fields fields = (Fields)infoStore.Fields;
                    Field size = (Field)fields.get_Item(CdoPropTags.CdoPR_MESSAGE_SIZE, System.Reflection.Missing.Value);
                    Field count = (Field)fields.get_Item(CdoPropTags.CdoPR_CONTENT_COUNT, System.Reflection.Missing.Value);
                    Console.WriteLine(infoStore.Name + ": " + size.Value + "Bytes, messages:" + count.Value);
                }
            }
            session.Logoff();
            Console.ReadLine();
        }
    }
}

这个方案的问题是需要安装CDO,好在这个东东是微软的,而且很小,安装包才几百K,其实就是把MAPI的一些API包装成COM了,所以.net平台的那些语言都可以调。

历史遗留问题是微软的死穴

向后兼容性和历史上的诸多古老的解决方案对于微软阵营的开发者而言就是梦魇,它的多语言支持又是另外一个败笔。

我现在被迫从Java阵营临时到了微软阵营,但是遇到的问题多多。
现在有几个比较简单的任务:得到Exchange Server的邮件大小,Exchange本身没有API做这个事情,但是有一些其他的变通方式,例如得到所有的Mailbox然后统计每个Mailbox的大小,而Mailbox的大小也没有直接的API,需要统计所有的Folder的大小,虽然性能上不太好,但是总归是可以做到的。
目前发现的解决方案有这样几个:

  • 使用Exchange 2007的management shell带的Get-MailboxStatistics脚本,我们可以得到Exchange的某个Database的大小,但是缺点是需要在Exchange Server上运行,优点是可以很容易写出C#的代码。
  • 使用Exchange 2007的EWS,优点是可以写出C#代码,而且可以从其他机器运行,缺点是只支持2007版本
  • 使用MAPI32,问题是只能写c++代码,尝试使用DllImport直接使用MAPI32,但是到HrOpenExchangePrivateStore就出问题了,内存读写有问题,MAPIInitialize,MAPILogon,MAPILogoff等方法就没事。网上看到有人用c#封装了MAPI32,但是没有涉及到HrOpenExchangePrivateStore。

接下来只能尝试写COM组件把它包起来给c#用了。

从客户端得到Mailbox的Size

昨天已经搞定了从服务器端得到Mailbox的size,但是这样不是很方便,需要在Exchange服务器上发布代码,今天继续研究从客户端得到这个Size,历经磨难终于成功:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication1.exchange2007;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

namespace ConsoleApplication1
{
    class EWS
    {
        public static void Run()
        {
            ServicePointManager.ServerCertificateValidationCallback =
            delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            };
            ExchangeServiceBinding esb = new ExchangeServiceBinding();
            esb.RequestServerVersionValue = new RequestServerVersion();
            esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007;
            esb.Credentials = new NetworkCredential("Administrator", "password", "domain.com");
            esb.Url = "https://exchange2007/EWS/Exchange.asmx";

            Console.WriteLine("Administrator:" + GetMailboxSize(esb, "Administrator@domain.com"));
            Console.WriteLine("cherami:" + GetMailboxSize(esb, "cherami@domain.com"));
            Console.WriteLine("ES1Test1:" + GetMailboxSize(esb, "ES1Test1@domain.com"));

            Console.ReadLine();
        }

阅读全文

从Exchange2007得到Mailbox的大小

开始的时候觉得这个是一个很小的问题,肯定有API直接可以拿到的,不过看了一圈下来,给出的最多的建议是从MAPI得到Mailbox,然后遍历目录累加大小得到Mailbox的大小。可以参考微软的KB:
http://support.microsoft.com/kb/320071
http://support.microsoft.com/kb/200160/

不过感觉都很麻烦。Exchange 2007提供了Exchange Management Shell ,里面有个脚本命令Get-MailboxStatistics可以得到Mailbox的信息,其中就包括Mailbox的大小,然后可以用c#调用这个脚本:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;
using System.Collections.ObjectModel;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
            PSSnapInException snapInException = null;
            PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
            Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
            myRunSpace.Open();
            Pipeline pipeLine = myRunSpace.CreatePipeline();
            Command myCommand = new Command("Get-MailboxStatistics");
            pipeLine.Commands.Add(myCommand);
            CommandParameter databaseParam = new CommandParameter("database", "Main Database");
            myCommand.Parameters.Add(databaseParam);
            Collection<PSObject> commandResults = pipeLine.Invoke();
            foreach (PSObject cmdlet in commandResults)
            {
                Console.WriteLine(cmdlet.Properties["DisplayName"].Value + "\t" + cmdlet.Properties["TotalItemSize"].Value);
            }
        }
    }
}

唯一的问题是这个需要在exchange server上执行,而且也不排除这个脚本也是通过遍历目录得到的大小(执行的速度似乎也不快)。

又玩完一个游戏

这次是大航海时代4,PSP版的。
呵呵,说起来还是蛮有意思的,我是个闲不住的人,总得找点事情做。总是在下面的事情中轮回:

  • 看书,纸版的,什么书都可能看,科幻小说、杂志、历史、经济、励志等等
  • 打游戏,可能是PC的游戏,也可能是PSP的,玩得最少的就是网游,因为比较耗时间,自己不太容易控制进度。
  • 做事情,例如搞个网站、写点代码之类的

一段时间集中精神搞一个事情,搞完以后就换一下。

电信越来越恶心了

前段时间说电信拦截我的请求,播放他们的广告,这几天发现他们变本加厉了,原来还是会过大概10秒自动重定向到你请求的页面,但是现在他变成一直播放他的广告,你必须点击右上角一个像关闭广告一样的按钮才行,然后才会重定向到你请求的页面。
耐着性子打了10000号,到投诉建议的那个部分等待了5分钟才接通,留了电话号码,说两个工作日之类会和我联系。
看看最终会怎么样。

更新:
电信给我打了电话,说两个工作日内给我处理好。最开始她们还狡辩说每次连接最多出现一到两次提示,但是我这次10分钟之内连续遇到两次,而且没有断网的情况下。

更新:
貌似确实把广告关闭了,有段时间没有看到广告了。

VMWare收购Spring

JavaEye的Robin在Twitter上爆出这个新闻的时候着实吃了一惊,不过还是为这个消息小小的高兴下,因为VMWare是EMC旗下的公司,虽然是独立运营。换言之,Spring现在属于EMC了。
希望VMWare能够尽快推出一个基于Java的PAAS。

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑