目前已安装的插件

  1. CloudFlare | 1.3.24版本 | 由Ian Pye, Jerome Chen, James Greene, Simon Moore, David Fritsch, John Wineman (CloudFlare Team)创建

    我使用了CloudFlare的DNS加速服务,所以在WP里嵌入了这枚官方的插件。提供了一些可有可无的功能。
  2. CloudFlare Flexible SSL | 1.2.2版本 | 由iControlWP创建

    由于使用了CloudFlare的SSL,所以导致WP开始疯狂的重定向,所以使用这枚插件来解开重定向的死循环。
  3. Disable Google Fonts | 1.2版本 | 由Milan Dinić创建
    由于你懂的原因,google相关的域名都访问不了。好死不死的,WP的Core和主题都使用了google的字库。只能屏蔽之,否则页面会一直转圈到请求超时。
  4. SyntaxHighlighter Evolved< | 3.2.1版本 | 由Alex Mills (Viper007Bond)创建
    传说中的代码高亮,想贴代码的话就来一发吧。
  5. Autoptimize | 2.0.2版本 | 由Ian Pye, Jerome Chen, James Greene, Simon Moore, David Fritsch, John Wineman (CloudFlare Team)创建
    加速,加速,加速。
  6. WordPress Posts Timeline | 1.7版本 | 由Wylie Hobbs创建
    不实用,就是画一个时间轴,像Facebook里的一样,来显示文章的顺序。
  7. WP-PostViews | 1.73版本 | 由Lester ‘GaMerZ’ Chan创建
    能统计每篇文章都多少人看过,还有一个小边栏能列出人气榜。
  8. 你好多莉 | 1.6版本 | 由Matt Mullenweg创建
    WP自带的,能在后台显示一些台词。
  9. AMP | 0.4.2版本 | 由Automattic创建
    著名的AMP,优化移动页面,使你的移动设备访问速度飞起来。
  10. WP 统计 | 10.3版本 | 由Mostafa Soufi & Greg Ross创建
    用来统计访问数据的,可以看到国家浏览器访问的地址之类的。最好玩的是Chrome,我后台看起来。。。Chrome全家福简直不敢看。

Salesforce中简单的进行Callout的Scheduler

global class MyScheduler implements Schedulable{
    global void execute(SchedulableContext SC){
        CallOut.doCallout();
    }
}
public class CallOut{
    @future(callout=true)
    public static void doCallout(){
               HttpRequest req = new HttpRequest();
        HttpResponse res = new HttpResponse();
        Http http = new Http();
        req.setEndpoint(endPoint);
        req.setMethod('POST');
        req.setCompressed(false);
        req.setBody('');
        req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
        res = http.send(req);
        // do something with res.
        }
}

安装了代码高亮插件

终于找到了合适的插件,终于可以贴代码了。

随便贴一段表示庆祝。

<?php

require_once "functions.php";

 $userName = $_POST["name"];
 $passWord = $_POST["password"];
 $ssid = $_POST["ssid"];
 session_start();
 if(validateUser($userName,$passWord,$DB_CONFIG)){
 $_SESSION["auth"] = true;
 echo "set true";
 }

?>

<html>
 <body>
 <?php if($_SESSION["auth"] == true){echo "Authed" . "<br>";} else {echo "Unauth"."<br>";} ?>
 <?php echo $userName;?><br>
 <?php echo $passWord;?><br>
 <?php echo session_id()?><br>
 </body>
</html>

Task上的IsArchive字段

Salesforce中会对符合条件的SObject进行自动的Archive。就是压缩。

官方文档的描述中,主要的条件为Closed超过365天。系统会自动的进行Archive。

具体的体现在,Task上会有一个字段叫做isArchived。如果task被系统Archive,此字段便会设为True。同时,此条数据无法在report中进行显示。但可以用Query All的方式获取。

以上是背景资料。

继续调查了一下,发现就算是被Archive,仍然占据储存空间。那么,是否与正常的数据占用的空间大小一致呢?还有,系统会在什么时候进行标记工作呢?是不是与储存空间的使用情况相关呢?

我进行了如下试验:

在一个干净的Org里,开启了Createddate可写,然后插入了一定量的状态为Connect/Closed的Task。确定IsClosed已为True。之后等。

结果:等待一宿之后,IsArchived字段毫无变化,可确定频率不是每日。

To Be Continue…

// 2016-06-08 Update1

经过和Salesforce技术支持的各种撕逼深度沟通,目前可以确认的是:

  1. 在Salesforce环境中的Storage Usage页面看到的统计数据是所有未被删除数据(正常数据+被Archive掉的数据)。总结一下就是说,Archive掉了仍然和正常数据一样占用空间(然后在Report里还变的不可见了,不加Query all也检索不到了,Salesforce搞毛线?)
  2. 被Archive只是代表被更改了一个状态位,并不影响储存(与正常数据一样占用2KB)
  3. Archive只针对Task等有限的几张表,具体的实施时间点是在每周六大概,系统自动执行。

这样的话,我们在清理task数据的时候,一定要用query all,并加上条件isdeleted=false。才是全部的目标范围。

你的世界不是我的世界

你以为世界就是应该是这个样子。

可是,世界对我来说却是小了一号。

你用起来宽敞的桌子,舒适的椅子。我觉得好窄,好挤。

你悠然走过的大门。我要注意不要撞头,撞胳膊。

这个世界的一切东西对我来说都略微袖珍。

这个世界是为了你打造的。

所以我买不到合适的桌椅,买不到合身的衣服。

因为这个世界是为你打造的。

Javascript元素选择器的另一种选择

最近喜欢阅读代码,好的代码比好的文章还好看。

这次的起因是在看新的浏览器API叫做Push API,作用是作为服务器端可以向所有的订阅客户端推送消息。这个就厉害了,以前是没有方法进行主动推送的,都是在服务器端做轮询。不过还在起草阶段。其中有个Demo代码,我就下来看。

结果,发现了好东西querySelector()

以往我只会使用标准Js的getElementByXX与Jquery的$()。没想到新的Web API中居然自带了性能爆表的QuerySelector。语法与Jquery的选择器非常相似。

目前从官方文档看来,其他浏览器还好,IE系的话只支持IE8以上。下次决定试一下。

Salesforce与Trigger的故事续篇

Selseforce与Trigger又有新的故事发生了。
目前没有官方文档对此现象有相关描述。

具体现象是这样的。
假设有一个Object叫做ObjectA,上面有个字段A__c是Lookup字段,比如Lookup Contact。
还有一个字段B__c是公式字段,公式的内容是A__r.Account.Id。

问题出在我们在ObjectA的Before Insert Trigger上,做了A__c的赋值操作。
如果我们在触发Trigger的时候,所插入的数据并没有对A__c进行过任何操作,在Trigger里对A__c进行赋值的话,在Trigger里取B__c的值居然是为空的。

如果我们在触发Trigger的时候,对A__c进行赋值,那么在Trigger里再次对A__c进行赋值,在Trigger里取得B__c的值的话,呵呵呵呵呵呵,里面居然是在触发前设定的那个Contact关联的Account的ID。就是说,在Trigger里更改A的值,并没有对公式字段B造成影响。

推断如下,
因为公式字段的内容为__r,所以需要在后台进行一次查询,但是因为在Trigger里,本条数据虽然还没有插入数据库,但是还是被锁住了,导致无法及时的更新公式字段的值。

或者,只要是进入了Apex代码范围,所有公式字段皆无法进行实时更新。

// Update1

已证实,只要进入Apex范围公式就不会更新,但会保留进入之前的计算结果。

// Update2 2018-01-12

写这篇文章的时候,貌似sfdc刚刚release了recalculate formula的函数。所以当时傻乎乎的以为没办法。现在知道了,直接调用SObject.recalculateFormulas()方法就好了。不过需要注意的是,cross-object的formula并不会被重新计算。

关于MVC

MVC,一个既熟悉又陌生的名字。
MVC仿佛是一个咒语,所有的架构问题只要念一下这个咒语便会迎刃而解。
只要敢自称为框架,必然会屈服于MVC的山头之下。
每个刚入行的人都喜欢将其挂在嘴边,以示自己为行里人。

但,会使用工具,不代表懂得工具。

大部分我接触过的人都知道MVC各自代表Model,View与Controller(艰难的回忆着,并且伴随着不确定的语气,然后可怜巴巴的望着我)。
其中一半不到的人可以准确的说出Model,View与Controller的作用。
其中再不到一半的人知道MVC之间是怎么关联起来的。
其中再不到一半的人知道从客户端发送请求开始,到结果返回给客户端的整个周期里,MVC的具体位置。
事实就是这样。

新手只知道SSH三大框架整合,老手知道Spring是核心,高手知道Spring的原理与美妙,大神知道Spring只是一个实现的比较完善的框架。

对于一个新兴行业来讲,只追求会熟练使用工具,是件可悲的事情。

Controller是核心,无论什么MVC框架,请求最后都到到Controller里进行处理,之后Controller根据业务需求调用Model,最后将View需要的数据传给View进行渲染。That’s all

关于Trigger与Workflow的故事

Salesforce中,一个动作会触发一系列的处理。

在Salesforce官方文档里,有关于各个处理的处理顺序的描述。执行顺序的官方描述

其中有这么一种情况,如果有个Workflow的行为是更新字段的值,然后在此Object中有一个After Trigger,包括Insert与Update。

在官方文档的描述里,After Trigger是优先于Workflow的。

这样的话,会出现一种现象,当新建了一条符合workflow条件的数据的时候,Trigger中的Insert和Update会被先后执行。但是Trigger内部的话并不会出现这种情况,并且After Trigger是不允许更新本条数据的。

Workflow与Trigger的关系要捋清,要慎用。

// Update1 2016-06-08

Flow Chart

如何重装Mysql

我的Mysql因为放的太久落灰了,不能用了。症状是root密码明明是对的,就是不让进。

所以打算重装一下,结果还是一样。

所以从网上找了如下方法,打算试一下

(1)SQL Server服务停止。

(2)C:\Program Files\MySQL

SQL数据库数据存放文件(用户自己设定的路径)

C:\ocuments and Settings\Administrator\Applaction Data \MySQL

删除

(3)注册表

我的电脑->HKEY_LOCAL_MACHINE->SYSTEM->ControlSet001-> Services->Eventlog->Applacion->MySQL

我的电脑->HKEY_LOCAL_MACHINE->SYSTEM->ControlSet002-> Services->Eventlog->Applacion->MySQL

我的电脑->HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet-> Services->Eventlog->Applacion->MySQL