[分享] 开源一个 PHP 框架 Awheel

项目地址: Awheel
当前版本: v1.5.0
PHP要求: >=5.4.0

介绍

基本功能: 路由/中间件/控制器/控制台/组件/配置加载/输入&输出.

框架最初是为了满足公司业务需求一步步造出来的, 但是从一开始就很独立的没有柔任何业务代码进去, 只保留了基本功能, 除此以外的功能全部需要自行扩展, 因为我觉得框架提供的功能越多学习和推广的成本就越高, 出现 Bug 的几率也就越高, 反倒不如都拆分成组件, 而且 Composer 那么好用, 扩展起来分分钟的事.

所以没有自带模板引擎, 需要使用组件功能自行扩展, 只需要继承并实现 Component 接口的 getAccessorregister 方法就可以使用, 目前我提供了 Smarty, Blade, SPA 三种模板扩展.

也没有自带 ORM 组件, 但是这里提供一个扩展 medoo-model 这是一个轻量级的数据库访问封装, 不管是名字还是功能我都非常喜欢😍, 也可自行扩展 Eloquent ORMDoctrine ORM 稍后我会给出一个 Eloquent ORM的封装扩展给喜欢的人使用

- 阅读剩余部分 -

[分享] Alpine 真是个好东西

把 VPS 上的 Ngrok 用 Alpine 重新打包了一下, 体积小了很多

root@vultr:/opt/ngrok# docker images 
REPOSITORY          TAG             IMAGE ID        CREATED          SIZE
ngrokd.alpine       latest          d891322d86e4    2 minutes ago    14.03 MB
alpine              3.5             4a415e366388    11 days ago      3.987 MB
root@vultr:/opt/ngrok# du -sh ./bin/ngrokd
9.6M    ./bin/ngrokd
root@vultr:/opt/ngrok# ldd bin/ngrokd
    not a dynamic executable

因为依赖库的问题, ngrok 编译的时候需要增加 CGO_ENABLED=0 来指定静态编译, 所以生成的可执行文件会比较大.

例如: root@vultr:/opt/ngrok# CGO_ENABLED=0 make release-server.

感觉可以把其它东西也都挪到 docker 了

[分享] 关于 React Native 使用 Xcode 图片资源编译错误 Unable to resolve module image!nav from xxx

周末两天在家折腾 React Native 碰到的问题,被坑了很久。。。

问题还原:
首页在 XcodeImages.xcassets 里面明确的有这个图片。
React Native 导航的调用也没问题:

<TabBarIOS.Item
    title="列表"
    icon={require('image!nav')}
    onPress={() => {
    this.setState({
        selectedTab: 'homeTab'
    });
}}
>
</TabBarIOS.Item>

但是编译运行就报错: Unable to resolve module image!nav from xxx, 如果不编译,只是在模拟机里面 reload 也是一样的提示。

最后发现其实只要在 Xcode 里面添加图片资源,然后编译,运行,再在 React Native 代码里面调用,就不会再出错,而且下次编译也不会出错。

[转载]Git 忽略 chmod 更改

利用git来进行web开发的时候,通常涉及到文件权限的更改是不需要让git变更的。所以我们需要让git来排除chmod更改。

我们打开shell, cd到git根目录,执行命令: git config core.filemode false

然后我们再来执行git status就会发现少了很多需要变更的文件

建议设置到全局, 命令改为: git config --global core.filemode false

今天被一个同事一次提交近300个文件的更改(全部chmod...)吓到了, 提交前也不对比下, 不过 Gitlab 居然没有卡死.

参考: Git忽略chmod更改

[记录]Nginx 指令 Map 应用场景之: 统一 PHP 开发环境

在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.

大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.

这里尝试给出另外一个方案, 个人觉得可行性还是很大的.

本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7

思路

  1. 开发人员通过 Samba 共享代码
  2. 服务器分别挂载开发人员共享到服务器
  3. 服务器配置根据开发者 IP 使用不同的代码

- 阅读剩余部分 -

[记录] Brew install 命令补全总是有两个的解决办法

问题如下, 输入到 ins, 一按 tab 键... 真是够了!!

fengqi@fengqi-MacBookPro ~$ brew ins
instal   install  

instalinstall 的别名, 就是说允许少输入一个 l 也能用,
但是我想 输入 ins 然后按 tab 补全到 brew install xxx

治疗办法是:
打开 vi /usr/local/Library/Homebrew/global.rb, 找到如下部分

'ln' => 'link',
'instal' => 'install', # gem does the same
'rm' => 'uninstall',

删除 'instal' => 'install', 保存退出.

[原创] Yaf 使用 Eloquent ORM 做数据层

Yaf 默认是不提供数据层处理功能的, 需要自行扩展.

Eloquent ORMLaravel 的内置 ORM 功能非常强大, 而且已经独立成组建, 任何项目都可以选择使用它.

目前最新版是5.0.28, 主要版本是跟随 Laravel 更新的, 下一个版本是 5.1 LTS 版, 非常棒.

在进行集成前, 需要开启 Yaf 的 namespace, 确保 php.ini 有如下配置:

yaf.use_namespace=1

为了方便管理, 建议使用 Composer 管理扩展, 以下示例均使用 Composer.

安装 Eloquent ORM, 在项目根目录创建 composer.json, 内容如下:

{
    "require": {
        "illuminate/database": "5.0.*",
        "illuminate/events": "5.0.*",
        "symfony/debug": "2.6.*",
        "symfony/var-dumper": "2.6.*"
    }
}

然后运行 composer update 下载代码, 并在 index.php 引入 vendor 目录下的 autoload.php 速度不理想可尝试我共享的镜像 http://composer.fengqi.me.

<?php

// 程序启动时间
define('APP_START_TIME', microtime(true));

// 程序跟目录
define('ROOT_PATH', realpath(__DIR__.'/../'));

// 加载 Composer
require ROOT_PATH.'/vendor/autoload.php';

// 启动程序
$app  = new Yaf\Application(ROOT_PATH."/config/application.ini");
$app->bootstrap()->run();

配置数据库信息, application.ini 增加以下内容:

; database
database.driver     = mysql
database.host       = 127.0.0.1
database.database   = yaf
database.username   = root
database.password   = 123456
database.port       = 3306
database.charset    = utf8
database.collation  = utf8_unicode_ci
database.prefix     = ""

这里使用 MySQL 作为示例, Eloquent 支持 MySQL, Postgres, SQL Server, SQLite.

- 阅读剩余部分 -

[原创] 利用 IFTTT 和 FEED43 自动把把订阅丢到 Evernote,以知乎收藏夹为例。

平时玩手机除听歌看电子书外,更多的是刷知乎,碰到感兴趣的有意思的答案和问题会分享出去,后来觉得扰民就不再分享了,而是选择收藏起来。

在知乎客户端可以收藏到收藏夹,也可以直接导入到 Pocket、有道笔记、Evernote,我偏好 Evernote,主要的原因是他做的比较早,支持的 App 更多。

但是电脑上是不可以的,这里可以借助 IFTTT 和 在线 FEED 来自动收集,其实用浏览器剪藏插件也是可以的不过我想简化下操作:手机电脑都直接收藏就好。

另外就是适用面太窄,比如别人的公开收藏夹,比如你喜欢的一些博客更新了,不用挨个过去看是否更新,等邮件提醒就知道了,所以建议用好邮箱。

- 阅读剩余部分 -