我的Mac正版软件

使用盗版、使用正版是种态度
用了这么多年盗版,工作后也是时候支持一下正版了,当然还要感谢下琪老大的洗脑。动不动大几百上千的软件,还略略地有点肉疼,先从便宜的软件开始培养使用正版的习惯。赚更多的钱,买更多的正版软件,支持正版。

已购软件

  • Vitamin-R ($0.99 入手)
  • Timing ($9.99 入手)

预购软件

  • Dash
  • 1Password

php扩展分页类

Laravel 4.2官方默认提供的分页类,虽然对bootstrap添加了支持,但是很大的情况下不够用,这时候就需要对Laravel的Pagination进行简单的扩展了。
下面步骤中一、二、五、为关键的步骤,三、四可以参考官方文档
在新建的CodingInk目录下,其实就可以用来放扩展vender目录下的一些第三方库的方法,因为采用一、四、五的步骤后,它就被larave自动加载了。

一、app目录添加新目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
app/
├── CodingInk
│   └── Presenters
│       └── GeneralPresenter.php
├── commands
├── config
├── controllers
├── database
│   ├── migrations
│   └── seeds
├── filters.php
├── lang
├── models
├── routes.php
├── start
│   ├── artisan.php
│   ├── global.php
│   └── local.php
├── storage
│   ├── cache
│   ├── logs
│   ├── meta
│   ├── sessions
│   └── views
├── tests
└── views

这里的CodingInk目录可以自由定义

php 常用扩展安装

环境搭建多了,各种扩展的安装,每次都上网查一遍,想想以后有安装扩展的步骤都整理到这篇文章好了。
imagick 扩展

这玩意需要两个东西,一个命令行工具,一个PHP扩展,PHP扩展调用前者提供的API,原理就这么简单

  1. ImageImgick 源码包下载及解压

    1
    2
    
    wget http://www.imagemagick.org/download/ImageMagick.tar.gz 
    tar -zxvf ImageMagick.tar.gz
    
  2. 编译安装

    1
    2
    3
    4
    
    cd ImageMagick-6.8.9-10/
    sudo ./configure --prefix=/usr/local/imagemagick
    sudo make
    sudo make install
    
  3. imagick 扩展源码包下载,下载及解压
    PHP 扩展源码包均在此网站上下载

    1
    2
    
    wget wget http://pecl.php.net/get/imagick-3.2.0RC1.tgz
    tar -zxvf imagick-3.2.0RC1.tgz
    
  4. 编译安装

    1
    2
    3
    4
    5
    
    cd imagick-3.2.0RC1
    sudo phpize
    sudo ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick/
    sudo make
    sudo make install
    
  5. 在php.ini 中添加

    1
    
    extension=imagick.so
    
  6. 为了更好的使用Imagick扩展提供的API,分享两个东西
    其一、可以在 http://www.phpimagick.com/ 这个网站上测试所有函数的效果,真的真的非常方便
    其二、使用intervention/image,看过源码,真心觉得作者封装的真好,配合Laraval相当舒服

_mongodb 扩展

Mac key repeat 失效问题

key repeat 对应中文为 按键重复,此问题在最新的 10.10 Yosemite上会出现。主要是因为苹果修改了机制,关闭了按住一个按键自动重复此按键的特性。
可以使用下面的命令开启原先的效果:

1
2
3
4
5
开启按键重复
defaults write -g ApplePressAndHoldEnabled -bool false

关闭按键重复
defaults write -g ApplePressAndHoldEnabled -bool true

国内使用composer的正确姿势

前段时间写的一篇文章Laravel安装遇到的几个小坑, 提到了在国内composer极其的难用。

总结了下有下面几种解决方式
一、先在VPS用composer把Laravel给拖回来,本地你就别想用Composer正常下载Laravel回来了
二、使用全局代理,暂时木有折腾过在终端下怎么折腾,GUI可以使用proxifier将socks5代理转成全局代理
三、直接使用Laravel Homestead来开发,开发完,代码直接copy到线上运行
四、从Laravel-cn下载最新的完整包

今天说另外两种方式
一、使用http_proxy
参考Composer Proxy,Doc里面说的http_proxy很明显了,就是需要一个Http 代理,可以在网上找一些免费的HTTP Proxy,但是这种一般极其不稳定,所以我自己使用Squid搭建了简单的代理,这里的代理指的是正向代理而非反向代理

  1. 安装代理工具Squid

    1
    
    yum install squid
    
  2. 修改配置文件

    1
    
    sudo vi /etc/squid/squid.conf
    
  3. 删除所有默认配置添加下面几行

    1
    2
    3
    
    http_port 8888
    acl all src all
    http_access allow all
    
  4. 开启Squid服务

    1
    
    sudo /etc/init.d/squid start
    
  5. 配置你本地linux的http_proxy
    编辑 ~/.bash_profile 文件,将正面文件加在文章结尾

1
2
3
4
http_proxy=http://ip_address:port
https_proxy=http://ip_address:port
export no_proxy=localhost,127.0.0.1
export http_proxy

接着使用source命令重新加载 .bash_profile 文件,使上面http_proxy的配置生效
1
source ~/.bash_profile

接着就可以快乐的使用composer了,没错很快乐

  1. 【注意】上文的squid配置极其不安全,请使用完composer后,立即使用以下命令停掉你VPS上面的squid服务,防止端口被扫
    1
    
    sudo /etc/init.d/squid stop
    

二、国内composer镜像

具体文档请参考这里Composer 中国镜像
不知道是不是因为我是长城宽带的原因,试用了这个中国镜像,还是经常出现各种包下载不回来、timeout、JSON无法下载的问题。所以相对比较靠谱的还是自己搭建个代理来的方便快捷。

phpstorm远程调试

记录下phpstorm远程调试下使用方法

一、Xdebug 安装

使用命令可看服务端php的安装信息,其实就是phpinfo了

1
php -i

复制上面命令输出的东西到Tailored Installation Instructions页面中的输入框中,然后下载推荐的Xdebug版本
搞定上面一步后,提示我安装2.2.5版本的。

接着安装命令搞起来
1
2
3
4
5
wget http://xdebug.org/files/xdebug-2.2.5.tgz
tar -xvzf xdebug-2.2.5.tgz
cd xdebug-2.2.5
sudo ./configure --with-php-config=/usr/local/php-5.2.17/bin/php-config
sudo cp xdebug.so /usr/local/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/

接着在php.ini中加入相关配置

1
2
[Xdebug]
zend_extension = /usr/local/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so

nginx缓存时间设置

来看一段nginx的配置

1
2
3
4
location ~ .*\.(js|css|png|jpg)?$
{
    expires      12h; # 设置缓存时间
}

主要作用就是起到告诉浏览器缓存图片的意思
接着来看Chrome请求的数据
浏览器请求头
Date与Expires刚好相差12个小时

再看Chrome显示的请求
请求数据

注意到Chrome显示的304 Not Modified 这个是nginx发回给Chrome的消息[只传了个header过来,不传body也就是图片数据],告诉此文件没有修改过,可以使用浏览器本地缓存过的图片。

Laravel安装遇到的几个小坑

一、代理问题
国内的网络环境对IT工作者来说,已经达到变态成度了,各种包无法下载,线路干扰,有几种方式来解决
一、先在VPS用composer把Laravel给拖回来,本地你就别想用Composer正常下载Laravel回来了
二、使用全局代理,暂时木有折腾过在终端下怎么折腾,GUI可以使用proxifier将socks5代理转成全局代理
三、直接使用Laravel Homestead来开发,开发完,代码直接copy到线上运行
四、从Laravel-cn下载最新的完整包

二、nginx配置
开发部署均是使用NG,外加Lnmp.org上面的集成环境,参考了Laravel Homestead上面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
server
    {
        #监听端口
        listen 80;

        #域名
        server_name meitubar.com;

        #默认访问的文件
        index index.html index.htm index.php;

        #代码根目录
        root  /home/wwwroot/meitubar/public;

        charset utf-8;

        #匹配站点内的所有链接
        # 将http://meitubar.com/users 这样的请求全部转发到index.php/users 上面去,其实就是rewrite了
        location / {
            try_files \$uri \$uri/ /index.php?$query_string;
        }

        # try_files 及$uri 的具体含义参考: [HttpCoreModule](http://nginx.org/en/docs/http/ngx_http_core_module.html)

        location = /favicon.ico { access_log off; log_not_found off; } # 匹配favicon.ico时,关闭日志
        location = /robots.txt  { access_log off; log_not_found off; } # 同上

        # 不知道为什么我的Laravel如果木有设置下面的缓存时间的话,会直接404返回回来
        location ~ .*\.(js|css|png|jpg)?$
        {
            expires      12h; # 设置缓存时间
        }

        access_log off; # 关闭访问日志
        error_log  /var/log/nginx/meitubar-error.log error; #设置错误日志的位置

        error_page 404 /index.php; # 定义出错页面,出错时,直接跳转到首页

        sendfile off; # 关闭sendfile选项

        # 配置解析php文件的方式
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

        location ~ /\.ht {
            deny all;
        }
    }

三、app/Storage目录权限问题
参考这条issuesFix blank-screen error on unwritable storage dir
在Mac需要在Mac端设置权限,然后在通过SSH连接上服务器进行权限的设置

四、proc_open函数的开启
注释php.ini中正面的这行

1
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket

当然有些函数在生产环境还是需要关的,开发环境就算了,一次性全部打开省不少事。

五、总结
以上4点都会导致Laravel空白页的问题,需要注意下, 如果发现空白页,还可以通过

1
php artisan tail

这条命令来查看哪里有出错

vagrant与parallels搞基

背景
因为一台电脑两个屏幕两套键鼠的实现方案,里面的实现在Mac下只有Parallels可以完美的实现一分二,
但是平时开发使用的都是vagrant+virtual box 这对好基友,但是有个很严重的问题是Parallels与Virtual Box不能同时开启,这个无解。所以想着干脆把开发
环境直接切换到Parallels下的虚拟机好了,IO神马的都上去了,一举多得。

parallels provider 安装

1
vagrant plugin install vagrant-parallels

添加新Box
此Box是针对Parallels的,不能在VB下使用,这点应该都能理解。

1
vagrant add parallels/centos-6.5

初始化与开机

1
2
vagrant init parallels/centos-6.5
vagrant up --provider=parallels

就此搞定,接着开搞Laravel + Composer…
细节的配置与Virtual Box对应的Vagrantfile不大一样,需要特殊指定。
具体参考文档参考: vagrant parallels provider

Vagrantfile配置样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
  VAGRANTFILE_API_VERSION = "2"
 
  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
     config.vm.box = "parallels/centos-6.5"
     config.vm.provider "parallels" do |v|
       v.name = "H1ac0k_Dev_Machine"
       v.memory = 1024
       v.cpus = 2
     end
 
     config.vm.provider "parallels" do |v, override|
       override.vm.synced_folder "/Users/machaismile/Documents/Dev", "/home/wwwroot", mount_options: ["share"]
     end
  end
 
  Vagrant.configure("2") do |config|
     config.vm.network "forwarded_port", guest: 80, host: 8080
  end

注意点
使用Parallels Desktop 10 可以支持端口转发,10以下的版本无法使用端口转发

Google Domains 试用

今天起床,早早的收到Google Domains发来的邀请码,果断用上。来上几张试用的图
我的域名列表
我的域名列表

域名转移
域名转移

订单管理
订单

域名搜索
域名搜索

购买域名之注册信息填写
注册信息填写

购买域名之付款
付款

略坑爹的是需要使用Google Wallet这玩意来付款。总体来说Google Wallet功能略简单,和其他大厂相比也木有什么特别的地方,价格也差不多。