paperen
作者詳細

Hi,我是paperen 以下是我发表的文章

109


一个模仿vi操作的jquery插件
11年前
  • 242
  • 202

一个模仿vi操作的jquery插件

github上的地址为 https://github.com/paperen/js-vim

实例地址为 http://paperen.com/demo/js-vim/

通过javascript在网页中重现vi的操作方式(基于jquery)


如何使用

  1. 引入 core.js

    <script type="text/javascript" src="vim/core.js"></script>
  2. 在想要实现vi操作的页面中加入

    <script>
    $(document).ready(function(){
     $(this).vim();
    });
    </script>
    

现有支持的命令

  • r : 重新载入当前页面
  • j : 向下滚动
  • k : 向上滚动
  • d : 向下滚动半页
  • u : 向上滚动半页
  • gg : 滚动到页面顶部
  • G : 滚动到页面底部
  • H : 后退
  • L : 前进
  • f : 打开当前页面上某个链接
  • F : 在新标签页中打开当前页面上某个链接
阅读更多
markdown编辑器(PHP)
12年前
  • 1
  • 0

markdown编辑器(PHP)

自从接触了markdown就迷上了它,就希望连word文档都可以使用markdown来编写。看一两遍markdown的语法说明(中文版)基本就能上手了,简单快捷

paperen想将自己博客的编辑器也改造成markdown的,于是乎利用工作休息与空闲的时间在git上找了个php markdown解析引擎,然后再补充一下代码就完成了一个简单的markdown editor

演示地址 http://paperen.com/demo/markdowneditor/

git地址 https://github.com/paperen/markdowneditor

markdowneditor

一个简单的markdown编辑器

@author paperen

@url http://paperen.com/post/markdowneditor/

关于markdown

Markdown 的目标是实现「易读易写」。 可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其实是纯文本电子邮件的格式。 总之, Markdown 的语法全由一些符号所组成,这些符号经过精挑细选,其作用一目了然。比如:在文字两旁加上星号,看起来就像强调。Markdown 的列表看起来,嗯,就是列表。Markdown 的区块引用看起来就真的像是引用一段文字,就像你曾在电子邮件中见过的那样。

以上摘自http://wowubuntu.com/markdown/#philosophy

阅读更多
bootstrap-confirm 基于modal
12年前
  • 2
  • 1

bootstrap-confirm 基于modal

在web设计时有些操作需要给予操作者进一步提醒,我们常常会使用window.confirm();来弹出一个警告框

但是我们没法对它进行美化,它在日渐提高的审美水平下越发越觉得难看。当我们使用了bootstrap后你会发现里面有一个modal,而它实在太好看了(至少paperen是这么认为的) http://twitter.github.com/bootstrap/javascript.html#modals

我们使用这个modal来实现类似window.confirm的功能,但是这倒是需要写多点代码 例如下述代码:

阅读更多
通过hook设计出更方便的令牌
12年前
  • 0
  • 0

通过hook设计出更方便的令牌

之前同事做每周分享时说了thinkphp的令牌,只需要在视图中写上__TOKEN__那么到时就会自动转换成一个隐藏域,顿时觉得很方便于是那时就按照这种思路在CI的基础上扩展了这种产生令牌的方式

记得之前发表过关于hook令牌的两篇文章

如果你还不清楚什么是钩子的话,建议花点时间看看与写写,而令牌其实就是为了防止表单重复提交的,不知道的自己补补

要在CI的基础上实现这种扩展,paperen我首先想到的就是利用钩子,利用在视图输出前的钩子检测文本中是否有__TOKEN__关键字,有则创建一个令牌并用隐藏域替换掉

阅读更多
一个基于Hex-HMVC的模型扩展
12年前
  • 3
  • 2

一个基于Hex-HMVC的模型扩展

为什么要进行这个扩展?

在使用hex提供的HMVC扩展方案以来在模型方面一直有疑问,怎衡量模型放在相应modules/models下还是放app目录/models下?比如模块1中要调用user模型的get_all方法获取所有用户数据 模块2也要获取这些数据 那么若模块1,2的模型中都创建一个user模型实现各自的get_all方法会不会显得没有重用的味道?

通过在微博上询问@hex hex的评论启发了我,他说“感觉还需要有个模型继承的功能吧” 没错继承

于是paperen我尝试按照这个概念去在hex的HMVC基础上扩展这个功能,从而达到这个继承的模式

涉及文件

就一个MY_Loader.php

阅读更多
paperenblog补充说明
8年前
  • 3
  • 3

paperenblog补充说明

在这里我将告诉大家一些paperenblog不足与可能对大家有帮助的地方

首先,很重要的一点就是paperenblog是基于codeigniter框架的,所以它必须继承CI的优缺点,同时它也是遵从CI自身规范的,还有我使用了hex提供的HMVC扩展方案 https://github.com/CodeIgniter/HMVC

关闭调试模式

想去掉调试信息的话,可以修改根目录下的index.php的21行

将常量ENVIRONMENT改为不是development就行了,其实这个常量也是CI里面定义的,我也是顺着CI去的而已,关于环境这个常量你继续往下看就会看到,CI定义的有三种:development、testing、production,而只有是development时我才会将调试信息展示。

关于安全

大部分安全措施都已经由CI帮我们完成,包括注入攻击与XSS。针对代码上的攻击我希望paperenblog已经做得很好,但是不代表绝对的安全。

而这里还要提及一点提高站点安全的方法

阅读更多
一个用户引导的js插件(基于jquery)
12年前
  • 1
  • 0

一个用户引导的js插件(基于jquery)

有时候我们上线的网站可以要对第一次使用的用户进行一个引导,当然我们必须要建立帮助中心,也要附带一些图文说明指引用户进一步操作,而有时候也会使用一些更让人舒服的指引方法,使用一个偏暗遮罩将页面的元素挡住,然后将设定好的操作步骤一步一步加亮强调,从而引导用户去操作并附带一些说明文字与图片,这种方式不会影响太多用户体验,很简洁地引导了用户如何使用应用。

阅读更多
Ci使用HMVC时增加查询缓存
12年前
  • 2
  • 0

Ci使用HMVC时增加查询缓存

如果你有扩展过CI的HMVC(hex提供的方案),你可能会在实际使用的过程中越来越理解HMVC,但也可能会越来越搞不清楚什么是HMVC,正如paperen一样…有时候特别觉得模块这个词实在是抽象,到底什么才能定义为模块,到底概念并不是最重要,重要的是你用起来是否合理,是否有效,是否能更好减少耦合。

在paperen使用hex提供的这个hmvc方案过程中,确实也遇到了一些bug,不过目前的已经得到修复,关于hmvc我觉得重要一点是模块之间数据不能共用,而导致一个页面有可能执行了多条一样的SQL,想体现一下这种现象,也很简单。

这是原始调用模型的写法

$this->load->model('userlog_model');
print_r( $this->userlog_model->all() );

调用了userlog_model中的all方法,是什么不要紧,反正你知道这里就是送出一条SQL就够了

阅读更多
文件版本同步小工具
13年前
  • 0
  • 1

文件版本同步小工具

用了半天的时间完善与整理了上周回家写得半调子的代码,paperen倒是不清楚subversion是否支持这个功能,但是既然自己都写了就放上来吧,用的是python写的,所以也就是半调子水平。

弄这个东西的来源是因为在公司那个项目,因为要给客户看到我们那个项目的原型,所以我们在内网找了一台机子作为服务器,然后设置一下路由的转发,将公司的域名挂上去,那么客户访问指定的域名+端口号就会转发到我们内网那台机子上了,而那台机子并不是我用的开发机子,而每次原型有什么更新我都得过去那台机子上用svn update一下,将那台机子上的demo版本更新到最新,为了保证客户看到的demo与我们目前完善的demo是一致的。

所以嘛,你看我们每次有完善什么都得去那台机子上用鼠标操作一下,虽然不到几分钟,但是paperen也嫌麻烦,于是paperen将那台机子开启允许远程,于是自己就不要过去机子面前操作了,在自己机子上远程过去操作svn,然后就关闭远程,那比亲自走过去爽多了,但是……paperen还是觉得麻烦(不得不承认我很懒……)

阅读更多
RTXServer web接口清单
11年前
  • 4
  • 2

RTXServer web接口清单

109天没发表博客,破了记录,至从换了公司后就没有机会使用CI,重要的原因是自己懒惰了,下班后的时间几乎都在玩吉他,所以一直没有找到可以分享的技术点

不过在这109天里可以肯定的事情是:我变了

在新公司接触得最多的是oa与RTX,而RTX其实也是很多玩法,这里就先将前几天趁空闲的时间整理下来的RTX可以通过web方式调用的接口列一下

值得提醒的是这些接口都需要设置访问权限不然访问时会提醒“IP受限制”

RTX Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件
阅读更多
2012年总结
12年前
  • 188
  • 181

2012年总结

PS:图片来自啪啪的Gordon

2013年都过去12天了才回过头来写2012年的总结

关于2012年可以用一句话就概括完毕,大部分是一如既往但最后却打破常规

世界/事情总是向好的方向发展,而所谓好的方向也不见得每个角度都是好的,自己在2012年中似乎也是朝着好的方向前进但是我开始对一成不变感到厌倦

也许生命的意义在于折腾,越是折腾 人越是精炼,习惯了一成不变或许也不见得是好事情

2012年12月我离开了原来的公司,告别了关照自己两年多的上司还有与自己共处的同事(包括已离职与未离职的),我希望公司日后能继续在更为老练的同事带领下有更大发展,我祝福他们,感谢他们,我希望与期盼所有的事情会越来越好~

对于新的一年我的希望是?当然我希望我能往高处前进,工作上有更大发挥自己才能的平台,收入翻倍,生活上能将目前的生活质量提高,爱情上有好对象等等,我想每个人的希望基本上都与我的一致,我们都希望自己变得更好更强

阅读更多
CI脚手架(当作是圣诞礼物好了)
12年前
  • 2
  • 0

CI脚手架(当作是圣诞礼物好了)

自己设计的一个基于codeigniter的脚手架,能生成原始模型文件与模块目录,你只需要扩展与完善功能即可,减少编写重复模式的代码 在CI的基础上也做了一些扩展 包括一些开源的扩展与自己编写的扩展

git上的项目地址 https://github.com/paperen/ci-scaffold

部分截图

ci-scaffold界面
ci-scaffold界面

阅读更多
CI模型扩展成调用即加载(含缓存模式)
12年前
  • 2
  • 0

CI模型扩展成调用即加载(含缓存模式)

关于CI中的模型的标准用法是先要load然后才能使用的,基于这种调用模型的做法长久下来就让paperen觉得麻烦,一开头就得要将用到的模型手动全部load过来,当然这种算是比较苛刻的做法也是有它的理由,毕竟这就清楚这部分引用了哪些模型与减少加载多余模型的机会。

// 加载用户模型
$this->load->model('user');
// 获取所有用户数据
$this->user->all( $per_page, $offset );

CI的模型文档 http://ellislab.com/codeigniter/user-guide/general/models.html

在开始后续内容之前还是声明一下

调用即加载

paperen想象中要达到的目的就是

// YY一下要实现的调用写法
$this->model_user_all( $per_page, $offset );

我们不需要再先load,调用的时候就会自动加载,格式必须是model_{模型名称}_{方法}( 参数1, 参数2, ... )

如果你觉得这样不适合自己使用就不用往下看了

附带查询缓存的概念
// YY一下要实现的调用写法
$this->model_cache( 'model_user_all', $per_page, $offset );

之前也有一篇关于查询缓存的文章 http://paperen.com/post/ci-querycache-extend

其实就是避免不同模块执行了相同的SQL语句,模块之间的数据完成是可以公用的,而这个querycache就是桥梁,也算是一种解决办法吧,不过在这次扩展中querycache将成为其中的组件,对于我们来说它完全是透明的

强调一下 对插入与更新、删除的动作不要使用查询缓存 paperen在代码中并没有限制这个也就是意味着你可以使用model_cache来完成update、insert、delete等操作,但是这有什么意义呢。。。

阅读更多
关于hook一些研究(CI)
12年前
  • 5
  • 2

关于hook一些研究(CI)

近来因为布置了每个人了解一个框架,paperen依旧选择CI(从这方面也可以看出我很专一…)作为进一步研究,所以paperen又再次看了它的核心代码,而看到hooks的实现时不禁有感而发,感叹之前自己试着在CI的基础上设计一个hook的做法实在太SB。

paperen并不想放什么概念的跟大家分享,而是从自己博客开始。

你看到博客的右边栏,在进入某篇文章详细时是会多出这个附带图片的栏目,就是将该文章中所有的附带图片在此用缩略图形式展现,方便浏览者点击查看。这个地方就是应用了钩子,或许说到这里你还是很模糊,但下面就会进行更多解析。

阅读更多
paperenblog發佈
12年前
  • 2
  • 0

paperenblog發佈

終於算是可以光明正大地發佈自己的博客源碼了,雖然之前一直都有在git,但是都是功能沒完善的版本,而現在正式進行官方發佈paperenblog~~

安装说明

1 将压缩包解压,将相应文件复制到您的www目录下

2 根据自己的情况去修改.htaccess文件第3行RewriteRule

阅读更多
尼玛,早知svn有hook的功能就那个那个
12年前
  • 3
  • 1

尼玛,早知svn有hook的功能就那个那个

原来svn可以利用hook进行一些猥琐的动作,比如paperen之前这个文件版本同步小工具这种小玩意就可以免了,当paperen发觉到这个事实后不禁内牛满面……

下面来隐约地说下这个hook怎实现客户端提交后让服务端的版本自动更新,简直简单到不能在简单……

条件在此就不提了(对了,先声明一下这是在windows条件下的),主要是你要到版本库(比如paperen本地测试时用的是ci-paperen,就是你使用svn create后的目录中的那个hook),进入hook目录中,这里就是放置hook的地方,而对于我们实现这个功能只需要用到post-commit这个钩子,你可以打开post-commit.tmpl看它的说明,所有钩子都有这么一个tmpl文件,里面都有说明。

确保你已经将subversion的bin目录加到环境变量,就是你可以通过命令行进行svn的操作,比如你进入命令行,直接敲上svn试试,看是否支持这个命令,然后使用

阅读更多
久违的博客
12年前
  • 0
  • 0

久违的博客

这是出发去的前一晚,今天抽点空将弄得半调子的后台代码传到空间上就勉强地来发一篇博客了。对,这确实是一篇久违的博客。

我此时的心情也不能说是兴奋,作为工作后第一次旅游,哦,不,应该是说初中之后的第一次旅游,我确实不知道应该怀着什么的心情去享受这次旅行,向公司请了5天假,但是感觉总是怪怪的,好像是做错了什么事情似的,这是不是有点不负责任, 我为公司带来的价值是不是值得公司为我开5天的假,老是觉得自己做得还不够,远远不够,或许我的确缺乏足够的自信。但什么是自信,我也不知道…

阅读更多
用户动作记录器
13年前
  • 0
  • 0

用户动作记录器

当我们设计的站点应用对安全有一定要求的话,就可能会涉及到需要记录使用者的操作记录,比如什么时候登录什么时候做了些什么之类的,你也可以称之为用户操作足迹。

具体来说要实现的最终要得到的数据是如下的:

吴给力在 2012-02-18 01:14:13 上了厕所
吴给力在 2012-02-18 01:17:23 回到床上
吴给力在 2012-02-18 02:26:43 接起电话
吴给力在 2012-02-18 02:27:11 放下电话

就针对上面这个描述来说的话,我们可以有两种解决办法:在吴给力身上装一个记录器,凡是与其身体有接触的东西都会被记录下来同时记录触发的时间;在所有东西上放置记录器,每当触摸人是吴给力时就会连同时间记录下来,理论上两种都是可行的办法,既然这样那就写写试试吧。

阅读更多