2012年总结
7年前
  • 1
  • 0

2012年总结

PS:图片来自啪啪的Gordon

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

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

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

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

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

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

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

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

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

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

部分截图

ci-scaffold界面
ci-scaffold界面

阅读更多
CI模型扩展成调用即加载(含缓存模式)
7年前
  • 0
  • 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)
7年前
  • 3
  • 2

关于hook一些研究(CI)

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

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

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

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

paperenblog發佈

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

安装说明

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

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

阅读更多
尼玛,早知svn有hook的功能就那个那个
7年前
  • 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试试,看是否支持这个命令,然后使用

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

久违的博客

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

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

阅读更多
用户动作记录器
8年前
  • 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 放下电话

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

阅读更多
年总结Summary
8年前
  • 4
  • 2

年总结Summary

一年又是那么一下子结束掉,还觉得自己好像是毕业没多久。2011这个数字对于我来说也算有点意义,因为是从大学混到社会的一年。我只知道在这一年中自己某些人生观、对待某些事情的看法上确实有了变化,但无法告诉你那是什么,似乎这样的话很无解,但确实是这样的。

我通常不会将自己的生活描述得太过于好,但也不会描述得太过于差,当偶尔在TM上有大学朋友问我过得如何时,我通常是使用“我过得不错(很好)”来回答,我想这是一个很好的消息,无论是对他还是对自己,或许这也是乐观的表现,但老实来说没有什么理由说自己过得不好,做到自己感兴趣工作的同时还赚到钱,能租到自己可以接受的房子,而且在深圳还有亲戚关照,还有什么不好。

有时候在微博上或者是在与别人交流中总是能了解到一些关于价值观与人生观,但自己并不会很轻易就接受那些所谓的观点,或许我是变得保守了,我不知道这算不算是成熟,我只是想问问有多少人觉得自己是个很无趣的人。

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

bootstrap-confirm 基于modal

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

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

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

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

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

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

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

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

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

阅读更多
一个基于Hex-HMVC的模型扩展
7年前
  • 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补充说明
4年前
  • 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)
7年前
  • 1
  • 0

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

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

阅读更多
Ci使用HMVC时增加查询缓存
7年前
  • 0
  • 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就够了

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

文件版本同步小工具

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

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

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

阅读更多
同步登陆
8年前
  • 1
  • 1

同步登陆

20120104211336

这不是什么新的技术,所以如果你已经知道如何实现可以忽略此博文了。

关于同步登陆的需求,大网站可能有几个子网站或者是子系统,不能设计成每次进入其他子网站就登陆一次,而应该是在子站点登陆了就可以漫游于其他子站点,当然用户帐号与密码也应当保持一致。

阅读更多
关于控制器与模型间的一些想法
8年前
  • 0
  • 0

关于控制器与模型间的一些想法

用CI也有一段时间了,感觉paperen我也挺喜欢CI的,因为觉得上手真的很容易也很方便,暂时还不会考虑其他框架。不过通过这段时间的使用,加上同事比较多疑问(也算是好事吧),自己也有点对CI中控制器与模型部分使用产生些少疑问,特别是模型,因为之前的开发就带来一些比较混乱的状况,老实说之前写的代码比较糟糕。

20111122011355

很多疑问都是产生在控制器与模型之间的,疑问最严重的是模型的重用性(况且可以这么说吧),平平君与奇奇君本来是分开一人负责一块功能的,但是免不了要涉及一些公用的模型,这就导致了一些不能避免的问题,平平君要与奇奇君协商某个公用的模型方法,但是别扭的是前者可能额外附件一些条件,比如要查询state为3的记录而后者则又会附加其他限制条件,而且paperen不太同意在控制器中对模型进行控制(或者下面的例子展示后你就明白什么意思),结果要写一个能符合两者需求的模型方法,在这个模型方法中写了比较复杂的逻辑,本来比较简单的模型突然看到一段复杂的逻辑,这个真的是我不想要的,paperen提议的是即使你查询的条件不同的话就可以考虑分出来单独作为一个方法了,而不要花太多时间在万能的模型方法,因为那可能会增加了模型的复杂度或者增加了控制器与模型的耦合度。说了这么多还不如看个例子吧。

阅读更多