贴心的PHP:内置常量

用各语言做网站的同学,经常遇到的一个问题就是在不同操作系统下路径格式不同。有的必须用“\”,有的必须用“\\”,用的得用“/”之类的。如果我们的开发机和生产环境不是同一种操作系统,总是会遇到麻烦。

但PHP居然贴心的准备了两个内置常量,DIRECTORY_SEPARATOR与PATH_SEPARATOR。

用法很简单。

<?php
$path = join(DIRECTORY_SEPARATOR, array('root', 'lib', 'file.php');
?>

或者

<?php
require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';
?>

之后PHP会自动的根据运行的系统将DIRECTORY_SEPARATOR替换成适当的符号。

但是有的同学说了,如果每次都要敲出这么长的一个常量好烦啊。那么我们可以这么做。Best Practice from CAKEPHP。

<?php
/**
 * Use the DS to separate the directories in other defines
 */
if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
?>

然后在地方就可以这样写了。

<?php
require 'webroot' . DS . 'index.php';
?>

Salesforce的Auto Number

在Salesforce中新建Object的时候,可以对Name选择Auto Number,即自动编号。如果没有仔细阅读说明的话,会有一个很容易让人迷惑的地方。

在选择时候,Salesforce提供的示例为 示例:  A-{0000}。

那么问题来了,假设我如示例一样设定了4个0,那么当我的数据编号已经到达了A-9999会怎么样呢?

真实情况是,什么都不会发生,A-10000会被正常创建,A-10001也会被正常创建。

原因是这样的,A-{0000}的意思,是至少要有4位数字,不足则补零。例如,第99条数据的Name为A-0099。就是说,这个格式只是用来标注补零的位数的。。。不是用来限制编号最大位的。。。

然后,在设定是还可以输入开始数字,假设我设定从99999开始呢? 还是没关系。但如果设定的开始数字为1,000,000,000以上,则会告诉你,不能大于这个数。

OK,那我设为999,999,999。接下来创建数据会怎样呢?

没错,A-1000000000会被正常创建,在建一条,A-1000000001也出来了。。。。。。

所以不用担心编号用光的事情了。200多位。。。我觉得有生之前都不一定用得没了。。

如何在Windows下安装Composer

首先,没有那么复杂。参考这里

0. 确保PHP安装正确。验证方式为在CMD里执行php -v,如果看到了版本信息,继续。

1.下载composer.phar,然后放到PHP的安装目录里。与php.exe平级即可。

2.在此路径下新建一个脚本文件,叫做composer.bat。内容为

@php "%~dp0composer.phar" %*

3.重新打开一个CMD,执行composer –version,如果看到版本信息,打完收工。

// Update 20160812

其实Windows下直接就有安装包。。。尴尬。

// Update 20160812 2

下面代码可以解决获取package龟速的问题。供应商官网


composer config -g repo.packagist composer https://packagist.phpcomposer.com

全宇宙最好用的IDE——的弟弟 VS Code

虽然VS已经开放社区版(免费版),但由于有限的内存和CPU,始终呆在Eclipse阵营。Eclipse也不负众望,胜任了我大部分的开发工作。

但是有的时候,还是觉得Eclipse太重了。转而去用文本编辑工具,比如Notepad++,又觉得太轻了。因为有多种编程语言的语法高亮,检查,提示和代码块插入的需求,尤其是Apex(Salesforce的开发语言,类似于Java),因为还是很小众,所以很难找到良好的第三方支持插件。而目前官方的Salesforce Eclipse插件的功能又是那么的不堪。我坚信Salesforce对于开发者是不重视的,甚至是有仇的。

VS Code刚诞生,版本只是0.1的时候就开始迫不及待的使用了。目前版本已经到达1.4,并且各路插件功能趋于稳定。活跃的插件社区保证了我对各种语言的需求。并且这个IDE在功能满足我所有需求的同时仍然保持足够的轻。

如果对目前使用的IDE感到重的喘不过气的话,不妨试一试吧。

 

Salesforce也有Explain了

Explain在各大数据库里,是调式SQL的利器。
虽然众所周知,Salesforce底层用的是Oracle。但从来没有开放过调用Explain的方法。

终于,有变化了!
目前作为一个beta特性,Salesforce将Explain放进了REST API
不过比较蛋疼的是,返回的是json,需要自己处理下。由于是beta特性,所以Salesforce不做任何技术支持。

<?php 
// Get your token via REST API 
$token = getToken(); 
$remote_server = "https://****your instance name****.salesforce.com/services/data/v37.0/query/?explain=*****your soql*****"; 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server); 
curl_setopt($ch, CURLOPT_POST, false); 
$header[] = "Authorization:Bearer " . $token; 
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$data = curl_exec($ch); 
curl_close($ch); 
echo $data; 
?>

// 2016-09-28 Update1

其实在Salesforce Developer Console中早就有这个功能了。。。但是对于分析SOQL的瓶颈还是很有帮助的。

目前已安装的插件

  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>

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

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

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

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

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

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

关于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