不学习,如何肩负全面建设社会主义现代化任务。
Aklman 关注了用户 · 2019-01-15
七牛云存储(qiniu.com),CEO。前盛大资深研究员,前金山技术总监,WPS Office 2005首席架构师。
关注 201
Aklman 赞了文章 · 2018-04-25
转眼间,Vim 已用了十年。
从一开始的抵触、不解,到随之而来的习惯、喜欢,再到近几年编辑器层出不穷的盛况下对 Sublime Text 等短暂的尝试,以及最后即现在的回归,这是一个复杂的过程。
目前,我对 Vim 仍停留在配置和使用阶段,并没有为它开发过任何插件。希望接下来十年,能为它做一些贡献。
Vim 是一个难学难上手,即使熟悉了也会让你痛并快乐着的那种编辑器。要教别人用 Vim,就更是难上加难了。
从 如何评价GitHub准备推出下一代文本编辑器Xray? 一文,可以看到时下不少编辑器的尝试。软件行业发展到今天,编辑器远远没有达到一个完美的境界,包括 Vim,这本身就是一件很不可思议的事情。
最最基本的一些设置,位于 vimrc 的开头。
" 首先设置 mapleader,后面键盘映射随时要用
" 基本上所有自定义的快捷键都以这个字符打头,比如映射`,w`为`:w`
let mapleader = ","
let g:mapleader = ","
" 不兼容 Vi,最大限度使用新特性
set nocompatible
" 写入文件时,不做备份
set nobackup
set nowritebackup
" 不用交换文件
set noswapfile
" 保存文件的快捷键
nmap <leader>w :w!<CR>
" 移除 Windows 文件结尾的 `^M`
noremap <leader>m :%s/<C-V><C-M>//ge<CR>
" 重新打开文件时,恢复上一次游标位置
" 通过View可以记住很多设置,比如高亮当前行、折行等等,但是往往比较让人费解
set viewoptions=cursor " 只记住游标
au BufWinLeave ?* mkview
au VimEnter ?* silent loadview
" 检测文件编码时,优先考虑 UTF-8
set fileencodings=utf-8,ucs-bom,gbk,gb2312,big5,latin1
" 不同平台,设置不同的行尾符,即 EOL
" 注意:在 Mac 平台,也是 unix 优先;自 OS X 始,行尾符与 Unix 一致,
" 都是 `\n` 而不是 `\r`
if has("win32")
set fileformats=dos,unix,mac
else
set fileformats=unix,mac,dos
endif
" 在断行、合并(join)行时,针对多字节字符(比如中文)的优化处理
set formatoptions+=mM
目前主要使用 morhetz/gruvbox
,本文所有截图都是 gruvbox
的效果。
配色方案可以通过插件安装,这里先跳过,会有另一篇文章专门介绍插件。
set background=dark
syntax enable
colorscheme gruvbox
au BufEnter * :syntax sync fromstart
" 采用 C 风格的缩进,适用于大多数语言
" 细节调整见下面的 `cinoptions`
" 你也可以尝试 smartindent 和 autoindent
set cindent
" 细节调整,主要为了适应 Google C++ Style
" t0: 函数返回类型声明不缩进
" g0: C++ "public:" 等声明缩进一个字符
" h1: C++ "public:" 等声明后面的语句缩进一个字符
" N-s: C++ namespace 里不缩进
" j1: 合理的缩进 Java 或 C++ 的匿名函数,应该也适用于 JS
set cinoptions=t0,g1,h1,N-s,j1
让制表符智能一些。
set smarttab
对程序员来说,用制表符还是用空格,足以引发一场战争。
美剧《硅谷》中,Richard 因为不能接受女友用空格缩进而断然与之分手。
下面的设置并不优雅,各人需求不一样,需做相应调整。
" 先设置缺省情况,然后根据不同文件类型再次重新设置
set expandtab | set tabstop=4 | set shiftwidth=4 " Python, CSS, etc.
" 对 C/C++ 等,制表符和缩进都是两个空格
au FileType c,cpp,html,htmldjango,lua,javascript,nsis
\ set expandtab | set tabstop=2 | set shiftwidth=2
" Makefile 必须保留制表符,且习惯上占八个空格
" 不过,这年头谁还会写 Makefile?
au FileType make set noexpandtab | set tabstop=8 | set shiftwidth=8
除了缩进,另一个深具争议的话题就是 80列 限制。
虽然现在显示器大了很多,有些语言习惯上仍然遵守这一规则。
通过设置 textwidth
,Vim 可以帮我们在输入时或用gq
格式化时自动断行。
我发现,用 gq
格式化注释特别方便,超长的注释会自动重新排版,以保证不越过指定的长度。
目前,我仅对 C/C++/Python/Vim 做这种限制。
au FileType c,cpp,python,vim set textwidth=80
一般如果设定了宽度限制,最好能画一条竖线以警示。
设置 colorcolumn
即可。甚至可以设置为多列,比如 "81,101"。
我是所有文件类型都显示这么一条线。
set colorcolumn=81
通常代码不需折行,前面有些语言设置了宽度限制就更不需要了。
实际操作下来,纯文本、Markdown、XML 等比较需要折行,因为它们常常一行太长了。
au FileType text,markdown,html,xml set wrap
" 折行时,以单词为界,以免切断单词
set linebreak
" 折行后的后续行,使用与第一行相同的缩进
set breakindent
" 即使在终端,也尽量启用鼠标
if has("mouse") | set mouse=a | endif
" 显示输入中的命令,对 gqq/gcc 这种多个字符的命令特别有用
set showcmd
" 下面几个不解释,自行查看帮助
set scrolloff=7
set wildmenu
set wildmode="list:longest"
set ruler
" 命令行高度为两行
set cmdheight=2
" 永远显示行号
" 另有比较酷的相对行号(`relativenumber`),虽然我用不习惯
set number
set lazyredraw
" 切换缓存时不用保存
set hidden
" 输入模式下,退格键可以退一切字符
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
高亮不想要的空格,比如行尾。
" See [http://vim.wikia.com/wiki/Highlight_unwanted_spaces]
" - highlight trailing whitespace in red
" - have this highlighting not appear whilst you are typing in insert mode
" - have the highlighting of whitespace apply when you open new buffers
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches() " for performance
高亮当前行。
set cursorline
不过,我一般不用,因为闪烁的游标就已经很清楚了。
首先,搜索时忽略大小写(ignorecase
)。但是,如果搜索模式里有大写字母,就不再忽略大小写(smartcase
)。
set ignorecase
set smartcase
即时显示匹配结果(incsearch
),并高亮所有结果(hlsearch
)。
set incsearch
set hlsearch
map <silent> <leader><CR> :nohlsearch<CR>
替换时,缺省启用g
标志,即,同一行里的所有匹配都会被替换。
set gdefault
切换窗口的键盘映射:
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
以及,直接用方向键切换缓存的键盘映射:
map <right> :bn<CR>
map <left> :bp<CR>
map <up> :bf<CR>
map <down> :bl<CR>
当前日期、时间、文件名这些内容,用缩写来输入是再方便不过了。
当然,缩写本身的名字不能太常见,下面这些都以 x 打头,一般不会出现在正常的文本中。
iabbrev xname <YouName> " 改成你自己的名字
iabbrev xmail <YouEmail> " 改成你自己的电邮
iabbrev xfile <c-r>=expand("%:t")<CR>
if exists("*strftime")
iabbrev xdate <c-r>=strftime("%Y-%m-%d")<CR> " 当前日期
iabbrev xtime <c-r>=strftime("%H:%M:%S")<CR> " 当前时间
endif
前面用户界面一节已经提到如何高亮行尾空格,下面设置可以删除行尾空格。
# 这个函数通过替换命令删除行尾空格
func! DeleteTrailingWS()
exec "normal mz"
%s/\s\+$//ge
exec "normal `z"
endfunc
" 保存时自动删除行尾空格
au BufWrite * :call DeleteTrailingWS()
map <leader>W :call DeleteTrailingWS()<CR>
" 移除只包含空格的行里的空格(有点绕口)
" 貌似有了前面的函数,这个就没有什么必要了
map <F3> :%s/\s*$//g<CR>:noh<CR>''<CR>
配置是无穷无尽的,是乐趣也是包袱。
这篇文章,并不是我的 Vim 配置的全部,而我的 Vim 配置,也经常性的在变。
此外,我主要写 C++ 和 Python,可能并不适合你。但是道理是一样的,总是免不了折腾。
所以,没有现成适用于所有人的配置,都是在别人的基础上不断收集和改进而成。
为了避免文章太长,常用插件的介绍就另起一篇吧。
<全文完>
查看原文赞 9 收藏 18 评论 5
Aklman 关注了用户 · 2018-04-13
支持一下杭州本土网站。
SF | 有明的技术交流群,欢迎大家加入交流分布式、服务化、设计模式、算法、Laravel、Docker、Swoole。QQ 群:666093315,进群还有讲座优惠福利
关注 1310
Aklman 收藏了文章 · 2018-04-06
我们每年都会尝试深入了解不同版本的 PHP 和 HHVM 在各种平台的性能基准。 今年,我们全面对 20 种不同平台/配置中的四种不同的 PHP 引擎和 HHVM 进行了基准测试; 包括 WordPress,Drupal,Joomla!,Laravel,Symfony 等。 我们还测试了流行的电子商务解决方案,如 WooCommerce,Easy Digital Downloads,Magento 和 PrestaShop。
我们一直鼓励 WordPress 用户利用最新的 支持的 PHP 版本 版本。 它们不仅更安全,而且还提供了额外的性能改进。 当然,我们并不是在谈论 WordPress,这在大多数平台上都是如此。 今天我们将向您展示 PHP 7.2 如何战无不胜!?
今年的结果推翻了以往测试中 HHVM 的领先地位。 我们很高兴看到 PHP 7.2 在速度方面处于领先的引擎。 需要注意的是,WordPress 不再支持 HHVM ,后续会完全移除。 我们不再鼓励我们的客户迁移到 HHVM,并告知他们它对各平台支持不足的情况。
这对于开发人员和使用者来说都是好消息,因为这让他们精力转移到 PHP 上来,同时能够为每个人提供更快的网站和 web 服务。
每一次测试,我们都使用每个平台的最新版本,并用15个并发用户进行一分钟的主页测试。以下是我们测试环境的具体配置。
OPCache:WordPress、Joomla 和 Drupal 三个平台, 我们使用官方 docker 镜像。其他平台我们都使用开启 OPcache 的镜像并使用以下php.ini
配置文件。
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
这些测试由 WordPress 的贡献者和支持工程师 Threatq Firdaus 在 Kinsta 完成。他贡献了 WordPress 的核心代码和翻译了印尼版的 WordPress。
PHP : Hypertext Preprocessor(超文本处理器)。它是当今网络上最流行的脚本语言之一。据 W3Techs 称,所有服务器端编程语言的网站中,超过83%使用 PHP 。
由于 PHP 的性能问题,Facebook 的 PHP 团队开发了 HipHop 虚拟机(HHVM)。它是一个使用即时(JIT)编译技术将 PHP 代码转换为机器语言以在 PHP 代码和运行它的底层硬件之间建立协同作用的系统。
我们的测试包括以下20个平台/配置。 在某些平台下,由于缺乏对特定 PHP 版本的支持,我们不得不测试多个版本。 点击下面的标题直接跳到对应的测试记录和结果。 测试数据以每秒请求数来衡量。 当然请求数越多越好。
要测试是第一个平台当然是我们最喜欢的: WordPress (我们可能有点偏向于每天生存和呼吸着这个CMS
?)。 WordPress
核心是你可以用来创建漂亮的网站,博客,或者app的开源软件。 实际上, WordPress
支持着互联网上超过 全部网站29% 。 您访问的超过1/4的网站可能由 WordPress
提供支持。
针对 WordPress
基准测试, 我们使用免费的 Twenty Seventeen theme。 我们使用来自 wptest.io
的虚拟内容及模拟15个用户的并发来基准测试首页一分钟。
wptest.io
生成Docker Image
源自于 https://hub.docker.com/_/word...WordPress
基准测试
PHP 7.2
证明比 HHVM
稍快而获胜。 这与 2016 年 HHVM
明显获胜的基准测试有显著的变化。 PHP for WordPress
也更加稳定。 我们遇到了 HHVM
许多第一手问题。
WooCommerce 是一个为 WordPress
构建的完全可自定义的开源电子商务平台。这也是目前最流行的电子商务结局方案之一,为互联网上超过 42%的电商平台 提供支持。
针对下一个测试,我们将 WordPress
同 WooCommerce
一起安装。我们使用免费的 电商店面主题。
WordPress
+ WooCommerce
基准测试
WooCommerce
在 HHVM
中表现挣扎,同时 PHP 7.2
略微超过 PHP 7.1
。
Easy Digital Downloads (EDD), 由 Pippin Williamson 开发,是一款免费的 WordPress 电子商城插件,专注于帮助开发者销售网上商品。
看了 WooCommerce 的表现后,我们将 WordPress
和 EDD
一起安装。 我们采用的是免费的 EDD 入门主题。
WordPress + Easy Digital Downloads 基准测试
在 WordPress
和 EDD
的测试中, PHP 7.2
仍然胜出。
Drupal
是一个开源的 CMS
(Content Management System
,即"内容管理系统"),由于它的模块化系统和强大的开发者社区而流行。它在2000年推出, 据 W3Techs 报道,Drupal
在所有网站中占比 2.2% ,在 CMS
市场中占比 4.4% (详细调查) 。
对于 Drupal 的基准测试,我们采用 Bartik 8.4.4 主题。注意! Drupal 8.4.x
不兼容 PHP 7.2
(详细信息),因此,我们没有测试 PHP 7.2
。
Devel
模块生成)Drupal
基准测试
由于 Drupal
的最新版不支持 PHP 7.2
, HHVM
赢下了这局。 看 PHP 的前一个版本(7.1)的性能表现,我们可以大胆推测 PHP 7.2
将会更快!
Joomla! 是一个发布网页内容的免费而开源 CMS
,最初发布于2005年8月17日。 他建立于 model--view--controller
web 应用框架中,根据 W3Techs
他被互联网上 3.1%的所有网站 使用。
针对 Joomla!
基准测试, 我们使用免费的 Beez3 框架。
Joomla
帖子)Docker Image
源自于 https://hub.docker.com/_/joomla/Joomla!
基准测试
在 Joomla!
我们可以看到在各个版本的 PHP
中稳步的性能提升。 但 HHVM
仍然领先。
Magento 是用 PHP 编写的流行的开源电子商务平台,于2008年3月31日发布。 根据 W3Techs,它支持 所有互联网的1.2%。
对于 Magento 2 的基准测试,我们使用免费的 Luma 主题。我们使用了两个版本,因为 2.1.11 是唯一支持 PHP 5.6 的版本。 我们安装了样本数据和默认主题。对于其它的测试,我们使用 2.2.2 版本。Magento 2 目前还不支持 PHP 7.2 或者是最新版本的 HHVM。
Magento 2 基准测试
由于 PHP 7.2 和最新版本的 HHVM 都不支持 Magento 2,所以 PHP 7.1 是明显的赢家。通过每个版本都可以获得一致的性能提升,这一点令人印象深刻。
Grav 是一个简单易用但功能强大的开源 CMS ,不需要数据库,有时也被称为平面文件 CMS 。
对于 Grav CMS 的基准测试,我们使用了免费的 Clean Blog 框架。值得注意的是 Grav CMS 已经不再与 HHVM 编译器兼容,它已经从 Travis 中 删除了 HHVM 环境。
Grav CMS 基准测试
我们可以再次看到最新版本的 PHP (7.2) 在 Grav CMS 中是明显的赢家。
October CMS 是一个基于 Laravel 的免费、开源、自主托管的模块化 CMS 平台。它最初于2014年5月15日发布。
对于 October CMS 基准测试,我们使用了免费的 Clean Blog 主题。需要注意的是 October CMS 不再支持 PHP 5.6 和 HHVM。即使我们可以通过删除 PHP 检查来欺骗安装程序,但它在配置向导中出现了会报500错误导致安装失败。
October CMS 基准测试
即使不支持两个引擎,我们可以看到 PHP 7.2 再次获胜。
很高兴看到这些小众的内容管理系统不再支持旧版本的 PHP。尽管这不是一个很大的优势。因为当谈到 WordPress 和其他平台占有大部分市场份额时,由于其兼容性问题,发展得比较缓慢。
Laravel 是一个非常流行的用于开发Web应用程序的开源PHP框架。它由Taylor Otwell创建,并于2011年6月发布。
对于Laravel基准测试,我们使用了纯HTML主题。 测试运行多次并取平均值。 您可以在此电子表格中看到更多详细信息。
posts
表post_title
, post_content
, post_author
, created_at
, updated_at
composer dump-autoload --classmap-authoritative
, php artisan optimize --force
, php artisan config:cache
, php artisan route:cache
Laravel 5.4.36 基准测试
HHVM以较大优势获胜。
需要注意的是,Laravel 5.6与HHVM不兼容,并且需要PHP 7.1或更高版本。
Laravel 5.6 基准测试
如果您将Laravel 5.6 PHP 7.2基准测试结果与Laravel 5.4.36的基准测试结果进行比较,差异是惊人的! Laravel在最新版本的PHP中运行效率非常好。
Symfony 是一组可重用的 PHP 组件集合,同时也是一个用于创建 web、APIs、微服务和 web services 程序的 PHP 框架。它发布于2005年10月22日。
对于 Symfony 的基准测试,我们使用 Symfony Demo 和 MySQL (默认情况下使用的是SQLite)。测试被多次运行然后取结果的平均值。有一个重要的点需要注意,就是 HHVM 不能很好的工作并抛出了500错误。你可以在这个 表格 中查看更多的信息。
Symfony 3.3.6 基准测试
PHP 7.2 再次成为冠军!
请注意 Symfony 4.0.1 的运行环境需要 PHP 7.1或以上。同时,HHVM再次不能正常工作并抛出 500 错误。
Symfony 4.0.1 基准测试
这里没有惊喜,PHP 7.2 再次登顶。
PyroCMS 是一个开源同时本质上是允许你更快的在框架上构建网站和应用的 Laravel
扩展。
针对 PyroCMS
基准测试,我们使用免费的 Accelerant 主题 (默认 PyroCMS
主题)。 需要着重注意的是 PyroCMS
不能在 HHVM
中运行,可能是由于依赖 Laravel
。
PyroCMS
基准测试
PyroCMS
的测试结果非常相近, 但 PHP 7.2
再次表现的很好。
Pagekit 是一个由 YOOtheme 创建的开源模块化轻量 CMS。它是各种工具的集合,为创建更美好的网站服务。Pagekit 发布于 2016 年春。
在 Pagekit 基准测试中,我们使用的是免费的 One theme (Pagekit 默认主题).
Pagekit 基准测试
Pagekit 运行在 HHVM 时看起来有些捉急,而 PHP 7.2 显然再次领跑各测试引擎。
Bolt CMS
, 或者叫 Bolt,是一个开源的内容管理工具,他力求尽可能简单直白。 他基于 Silex
和 Symfony
组件,使用 Twig
以及 SQLite
, MySQL
或者 PostgreSQL
。
针对 Bolt CMS
基准测试, 我们使用免费的 Bolt Base 2016 主题。 着重注意的是 HHVM
不受支持 (#6921)。
Session
仍处于启用状态Bolt CMS
基准测试
我们可以在这里看到很不错的指标,每一次新发布的 PHP
, Bolt CMS
可以看到一致的性能提升。
Anchor 是一个超级简单,开源且轻量级的博客系统,可以使你专注于写作。
对于 Anchor CMS的基准测试,我们使用 Visual Idiot 编写的免费 默认主题
Anchor CMS 基准测试
PHP 7.1 和 PHP 7.2 的测试结果非常接近,但是 PHP 7.1 在我们的性能测试中表现更快一些
PrestaShop 是一个流行的并且快速增长的开源电子商务解决方案。它最初发布于2008年7月31日,同时根据 W3Techs的数据,它在互联网中的使用率是 0.6%
对于 PrestaShop 的基准测试,我们使用免费的 传统主题。请注意PrestaShop 不支持 HHVM
PrestaShop 基准测试
测试结果是不相伯仲的,但是 PHP 7.2 勉强的挤进去成为领导者。
Craft CMS 是面向开发人员,设计人员和Web专业人员的专注内容管理系统,为客户提供灵活性和易用性的强大功能。
对于 Craft CMS 基准测试,我们使用免费的 默认主题.
Craft CMS 基准测试
Craft CMS 在 HHVM 上表现的不好,但 PHP 7.2 又再一次是最快的。
Fork 是一个使用 Symfony 组件的易用的开源 CMS。对于 Fork CMS 的基准测试,我们使用免费的默认 Fork 主题。需要注意的是 Fork CMS 需要 PHP 7.1 或更高的环境并且它不支持 HHVM。
Fork CMS 基准测试
在性能方面,PHP 7.2 击败了 PHP 7.1。
如果上述结果还不能说服你,我们不知道还有什么了。一个善意的提醒,如果你使用的是 Kinsta 客户端我们在 2017 年 12 月发布了 PHP 7.2 。如果你想看到性能的提升,你可以在你的 MyKinsta 仪表盘中轻松切换到 PHP 7.2 。
在 Kinsta 中切换到 PHP 7.2
如果你担心它与第三方插件不兼容(这有可能发生),这就是为什么我们使用分段站点的原因。 ? 你可以尝试它而不需要担心破坏你的生产环境。
你可以清楚地从上面的测试中看到,纵观所有平台的性能时,php 7.2是领先的。?
我们对PHP 7.2感到非常兴奋,并希望你也是!我们很乐意听到你对我们基准测试的想法,甚至你曾经升级过的体验。可以在下方评论中告诉我们。
讨论请前往 —— https://laravel-china.org/top...查看原文
Aklman 收藏了文章 · 2018-03-23
PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。和其它脚本语言相比,例如Python和Ruby,Web开发者有很多不错的理由皮偏爱PHP。
对于PHP开发者,在互联网上有很多可用的开发工具,但是找到一个合适的PHP开发工具是很难的,需要花费很多努力和时间。今天,就为开发者介绍45个方便的PHP工具。
Plates是一个简单易用的PHP模板系统。Plates是为那些喜欢使用本地模板而不是编译模板的人设计的。
Laravel是一个有着优雅表达语言的开源框架。
一个Laravel的Parsedown包装器,能够将markdown编译成HTML。Parsedown运行很快,并支持GitHub flavored markdown.
Guzzle是一个PHP版的HTTP客户端,让PHP很容易的和HTTP/1.1协议一起使用,并能减少Web服务带来的痛苦。
Hoa是一组PHP库,它创建了工业和研究之间的桥梁。
PHP-CPP是一个C++写的PHP扩展库。它提供了一个良好的文档记录和易于使用的类的集合,可以使用和扩展构建本地PHP扩展。
Twig是一个快速、安全和稳定的PHP模板引擎。
Requests是用PHP写的HTTP库。
Prettifier为一些编程语言,如CSS/HTMl/XML/PHP/SQL/Perl等,提供了一个在线编辑、格式和语言高亮的平台。
Geocoder是一个构建geo应用很好的库,为geocoding操作提供了一个抽象层。
Slim Starter由Xsanisty创建,是创建高级Web应用的解决方案。
Mink是一个PHP库,可以让你以交互的方式在浏览器中测试Web APP,它移除了两种浏览器模拟器之间的API差异,为你提供一个更准确的测试环境。
Forp是用C写的PHP分析器。Forp是轻量级的PHP扩展,它提供了一个简单的PHP数组或JSON输出,其包含了完整的脚本调用堆栈和CPU和内存使用情况。forp是非侵入性,并提供PHP注释来完成工作。
对PHP开发者来说,Belt是一个非常有用的工具,它提供了超过60个有用的函数。
Icon Generator允许你生成基于彩色背景的Icon图标,这和Gmail的类似。
Rainloop是一个免费开源的PHP Web邮件应用,它有现代的用户接口,支持SMTP + IMAP。
Pattern Lab不仅是一个前端框架,也是一个PHP驱动的静态网站生成器、项目模式库和前端风格指南。
Composer是一个独立的PHP管理插件,在你项目的根目录创建一个组合器文件,再运行一个命令,则你所有的依赖都可以下载使用了。
Directus是用Backbone.js创建的免费开源的、客户端友好的数据库GUI,它提供了丰富的功能用户快速开发和自定义数据库解决方案管理。
Debug可以很容易的集成到任何项目中,并能显示来自应用任何部分的分析数据。它来自于PHP内置数据收集器的特性和受欢迎的项目。
Phalcon PHP是C扩展的一个Web框架,提供了高性能和低资源消耗。
Pinboard是一个MySQL存储引擎,为PHP的MYSQL使用情况提供了实时监控/统计数据服务的只读接口。
Casebox是一个开源的PHP/MYSQL驱动的Web应用,用于存储和管理记录、任务和文件。它有一个类似桌面的界面,我们可以创建一个unlimited-level目录用于优先存储结构化的东西。
Munee是一个一体化库,开源处理很多与Web资源优化和操作相关的事情。Munee也有很强大的缓存功能,可以在服务器和客户端缓存资源。
ImageWorkshop是一个基于GD库的开源类,可以帮助你用PHP管理图像。这个类很像PS、GIMP一类的图像编辑软件:你可以添加许多层或层组,每一层都有一个背景图像。
Sylius为PHP而设计的免费开源的电子商务解决方案(基于Symfony2),它能够管理任何规模的商店和复杂的产品类别。
Pico是一个开源的CMS应用,没有多余的东西,这才是最重要的。它使用平面文件作为数据库,用PHP构建。简单的说,不用设置什么,这个APP就能运行。
PHP MyFAQ是一个稳定开源的PHP F.A.Q. 应用,为构建一个很好的F.A.Q.系统提供了很多功能,并提供了强大的管理界面来管理类别、条目、用户和查看统计数据。A###PHP Documentor
PHP Documentor能读取代码的结构,文件系统结构、类、函数和介于两者之间的,并生成文档。
CakePHP是一个开源的Web应用框架,遵循MVC模式,并有PHP编写。它仿照Ruby on Rails的概念,在MIT许可下发布的。
CodeIgniter是一个强大的、开源的PHP框架。
Monsta FTP是一个PHP云件,并能将FTP文件管理放置在Web浏览器中,你可以在浏览器中进行文件的拖放。
XAMPP是一个免费和开源的跨平台web服务器解决方案,主要包括Apache HTTP服务器、MySQL数据库、PHP和Perl编写的脚本解释器。
NetBeans是开源的,并允许你使用Java, HTML5, PHP, C/C++等快速开发桌面、移动和Web应用。
Aura为PHP5.4+提供了独立的库包。这些包可以单独使用,具有一致性、也能自我组合成一个完整的框架。
PHPCheckstyle是一个开源功能,能帮助PHP程序员保持一致的编码风格。该工具检查输入PHP源代码和报告任何违反给定的标准。
PHP Mess Detector易于配置,前端用户友好。它能检查代码中的潜在问题,包括可能的错误,次优的代码,未使用的参数,等等。
Kohana一个基于PHP5的优雅的、开源和面向对象HMVC框架,由一群志愿者维护和开发。它的目标是迅速,安全,和轻量。
用PHP编写的一个CSS文件解析器。Sabberworm允许提取CSS文件到一个数据结构,操纵结构和输出(优化的)CSS。
Nette框架是一个PHPweb开发的工具。它被设计成尽可能友好、易用。它侧重于安全性和性能,绝对是最安全的PHP开发框架之一。
这是一个库包,包含了PHP Markdown解析器和额外的功能扩展。Markdown是一个text-to-html的转换工具。
Yii 2完整重写它的先前版本1.1,Yii也是最流行的PHP开发框架之一。Yii是一个高性能的PHP框架,最适合开发Web 2.0应用程序。
PHP Sandbox利用PHPParser来防止沙箱运行不安全的代码。它利用FunctionParser分解传递到沙箱的调用,这样,即使没有转换成字符串,PHP调用也可以在沙箱中运行。
译文出处:http://www.ido321.com/1546.html
英文原文:40+ tools for writing better PHP
查看原文Aklman 收藏了文章 · 2018-03-23
面试时可能问到的公司情况:包括公司的地址,什么时候创建的,公司的规模(小公司、中型公司、大公司),公司的人员(主要讲开发团队,包括项目经理,项目主管,开发人员、测试人员)、项目周期:
需求分析
1.相关系统分析员向用户初步了解需求,然后用word列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
2.系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。
3.系统分析员向用户再次确认需求。
概要设计
首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
详细设计
在概要设计的基础上,开发者需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。
编码
在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!
测试
测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。软件测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会有不可预料的问题存在。完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,直到这个软件被彻底淘汰为止。
软件交付
在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
《用户安装手册》应详细介绍安装软件对运行环境的要求、安装软件的定义和内容、在客户端、服务器端及中间件的具体安装步骤、安装后的系统配置。
《用户使用指南》应包括软件各项功能的使用流程、操作步骤、相应业务介绍、特殊提示和注意事项等方面的内容,在需要时还应举例说明。
验收
用户验收。
维护
根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改
软件开发的时间:小型项目,团队人员6人左右,6个月;
中型项目,团队人员10人左右,12个月
示范如下:
我以前所在的深圳神柯软件开发公司在深圳龙岗区百花楼2层104,公司有员工100左右,该公司的主要业务是开发在线教育产品,如中小学1对1互助学习系统。我在公司进行了XXX在线教育系统的开发,所在的团队有15个人,包括项目经理、系统分析人员、架构师、开发人员、数据库设计人员、前端开发人员、测试人员等,软件周期从需求分析、概要设计、详细设计、编码、测试、软件交付、用户验收、维护,大概花了15个月。
以上内容虚构仅供参考
查看原文Aklman 收藏了文章 · 2018-03-23
这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的。
作者记录的 PHP 的很奇特、很难记的知识点。
使用对称和非对称结合对前端传输进行加密, 理论上和 https 的破解难度是一样的.
这篇文章的目的是探讨一些在实际中怎么使用异常的方式。
魔术方法在特定的事件下触发,这真的很酷。作者在文中讲了什么是魔术方法及其应用。
我们通常说的 “页面直出”,其实就是服务端渲染(SSR, Server-Side Render)。最初的 JS SPA 方案有个常见的问题,就是脚本没有加载执行完时,页面中没有内容。不仅影响访问体验,还不利于 SEO。
下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。
基于 RabbitMQ 和 Swoole 实现的一个完整的异步任务系统,包括多进程消费,异常重试等等。
作者整理的关于 PHP 的技术问题与精华回复。包括了概念普及问题、新手上路问答、PHP 上云常见问题、PHP 进阶大牛指导、常见故障排查等。
如何在 1.3s 生成 30W 个随机红包。
定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等。如果非要用 php 实现定时任务,那么文章中的几个方法是可以参考的。
关于 PHP 的干货分享。
讲解消息队列以及消息队列的使用场合和实现消息队列框架的实现等等。
作者分享了阅读 PHP 源码的一些理解。
模板引擎其实就是将一个带有自定义标签的字符串,通过相应的规则解析,返回 php 可以解析的字符串,这其中正则的运用是必不可少的,所以要有一定的正则基础。
PHP 说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。了解 PHP 底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理、框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能。
正则表达式对于我来说一直像黑暗魔法一样的存在。手机正则去网上搜,邮箱正则去网上搜,复杂点的看看文档拼凑一下,再复杂只能厚着脸皮让其他同事给写一个。从来没有系统的学习过,今天准备拿下它。 1. 学习目标: 了解正则表达式语法 在IDE中使用正则表达式 在javascript 中使…
本文所讨论的安全性环境是在 Linux+Apache+Mysql+PHP。超出此范围的安全性问题不在本文范畴之内
PHP 调试的 xdebug 的配置篇。
昨天周一,是项目部后端团队的技术分享日,正好是我来负责这次分享,分享的题目之前就已经订好了,是《Composer的安装与使用》。今天手头不忙,总结一下,分享过程中掌握的Composer知识点。总所周知,Composer 是 PHP 的一个依赖管理工具。它允许我们在自己的项目中申…
「唯一一个原生 PHP 实现的 Kafka php client 微博广告出品」
提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志、error 日志以及 PHP 的 error 日志。虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用。再者运行的应用程序中的配置也会影响到日志记录的方式及内容。
作者不采用插件完成无限极评论的过程。
应对百万秒杀,不是写了一手好代码就能完成。
数组在 PHP 内部的实现
继前年的 “PHP7 初探”、去年的“高性能的 PHP ” 主题后,2017 第三届 PHP 全球开发者大会的活动主题是“高可用的 PHP ”,本次活动,我们将在 PHP7 这个日趋成熟的 PHP 版本之上,与大家探讨 PHP 开发和运维中的高可用性挑战。
一直都没找到二级缓存在 php 中应用的比较好的资料和案例,由于范凯 RobbinWeb 应用的缓存设计模式和 Hibernate 二级缓存的启示,记下这篇二级缓存在 Eloquent ORM 中的应用。
spa 实例 github: https://github.com/chen-wen/v...
作者断断续续用了一个月左右总结出的知识分享。
caddy 是一个像 Apache, nginx, 或 lighttpd 的 web 服务器。 你要问 nginx 已经很好了,为什么要用 caddy 呢?
PHP 是一门解释型的语言。诸如 Java、Python、Ruby、Javascript 等解释型语言,我们编写的代码不会被编译成机器码运行,而是会被编译中间码运行在虚拟机(VM)上。运行 PHP 的虚拟机,称之为 Zend 虚拟机,这篇文章深入内核,探究 Zend 虚拟机运行的原理。
这篇文章主要从 Opcache 源代码的角度, 对其主要流程进行分析介绍.
我们在常见的 PHP 的框架如 YII、TP 中通常写好一个类只需写好相应的命名空间就可以实现类的使用。那么你知道为什么不再需要使用 include 文件了吗? 框架是怎么帮你做到这个文件的引用的呢?其中的原理就是——类的自动加载。
nginx rewrite 模块讲解
整理了几个培训新手程序员的 数组题目,用于培养数据结构意识,发布在这里希望跟大家一起探讨下,新手程序员培训数据结构怎么培训,尤其是快速培训数据结构意识。
正则表达式入门
正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 本篇文章,主要介绍利用 PHP 使用 Redis,主要的应用场景。 简单字符串缓存实战 $redis->connect('127.0.0.1',…
OAuth 2.0 第三方平台授权及 OAuth Scribe 库介绍
一些有关面向对象的基础知识的总结。
Aklman 关注了专栏 · 2018-03-20
上帝在我很小的时候送给我了两个苹果,一个红苹果,一个蓝苹果。红苹果代表疯狂,蓝苹果代表思考
关注 45
Aklman 回答了问题 · 2018-03-20
一句话:引用的本质在内部实现一个指针常量。引用作为其它变量的别名而存在,因此在一些场合可以代替指针。
我给你看几个有关指针的图
1.指针定义和使用
2.野指针
3.万能指针
4.指针修改常量
5.指针和数组
6.多级指针
7.指针数组
相关解答地址:引用与指针的区别
关注 3 回答 2
Aklman 关注了用户 · 2018-03-20
程序生存法则:ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎
1.不要写死
2.不要相信产品⎝≧⏝⏝≦⎠
设计生存法则:
1.不要相信这是最终效果图
2.不要相信产品
测试生存法则:
1.不要立flag
2.不要相信程序
产品生存法则:
1.不要相信任何人
2.注意人身安全
运营生存法则:
1.不要相信任何人
2.躲在产品身后
关注 2070
推荐关注