手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:sablog

买了一台一体机

最近这段时间休息在家里,因为要写代码,原来的12寸的笔记本屏幕太小了,于是就萌生了要买一台台式机的想法。
毕竟,众所周知的,台式机嘛,同样价格的情况下,性能要优于笔记本。嗯,更重要的是,屏幕大了,屏幕大的好处就太多了。比如我的IDE,就可以看的更舒服,而不至于像现在,IDE一开,可视的范围就剩一点点大了。。。几乎无法写代码,郁闷啊。

最终,我选择了两台电脑作为挑选,没有选择imac。实在是没钱了。买imac的钱,可以够我买两台台式机了。我也没有选择普通的台式机,因为老婆觉得家里再堆一个机箱,有N多线连着很烦人。所以我在选择了很多电脑之后,确认了两台机器,那就是:

 


这两台电脑其实我是比较偏向于后一台,因为,他是4G内存,我就无所谓再添加2G内存了,而且23寸的屏幕,也可以让我看的很爽。然而,京东上,这一台电脑一直没货。。。太郁闷了。最终我买了前面一台 5139cx,缺点是只有2G内存,其他我也就忍了。其实还有一款3699的HP20寸的电脑,但是那台电脑的鼠标是有线的,键盘也是,所以我最终还是确认这一台了。。

下周开始,我的开发速度估计又会上升一点了,毕竟笔记本开发,12寸,1024*768的分辨率也太低了。。。当然有钱的话,我是会考虑imac。。

Tags: 一体机, hp

JianHua Zhang的Typecho阅读笔记二:数据库访问

文章来自:http://blog.csdn.net/jh_zzz/archive/2010/01/11/5173851.aspx,由于我也正在看 typecho这个玩意所以,就记录下来。虽然我一天下来,也看了不少代码,但毕竟没有深读过。对于流程啥的,还没有开始关心,只是为了写而写。

第二篇:数据库访问

这一块比较复杂,我还没有完全理解为什么要把 SQL 语句的组装搞这么复杂。

从一个普通皮肤页面开始 themes\default\index.php ,代码如下:

PHP代码
  1. <?php  while ($this -> next()):  ?>  
  2.     < div class ="post">  
  3.        < h2 class ="entry_title">< a href ="<?php $this -> permalink() ?>"><?php $this -> title() ?></ a ></ h2 >  
  4.        < p class ="entry_data">  
  5.            < span ><?php _e(' 作者: ' ); ?><?php $this -> author(); ?></ span >  
  6.            < span ><?php _e(' 发布时间: ' ); ?><?php $this -> date('F j, Y' ); ?></ span >  
  7.            < span ><?php _e(' 分类: ' ); ?><?php $this -> category(',' ); ?></ span >  
  8.            < a href ="<?php $this -> permalink() ?>#comments"><?php $this -> commentsNum('No Comments' , '1 Comment' , '%d Comments' ); ?></ a >  
  9.        </ p >  
  10.        <?php $this -> content(' 阅读剩余部分 ...' ); ?>  
  11.     </ div >   
  12. <?php endwhile ; ?>   

从上面我们知道这个文件是在 Widget_Archive 执行时被 包含进来的,所以在这里 $this 就是 Widget_Archive next() 函数具体实现在 Typecho_Widget 中,他只是从 $stack 中取出一行数据返回,然后移向下一行, $stack 中的数据是如何生成的呢?

 

Widget_Archive execute 函数中,有这几行:

$select = $this -> select()-> where ('table.contents.status = ?' , 'publish' )

-> where('table.contents.created < ?' , $this -> options-> gmtTime);

中间代码略过

$select -> order('table.contents.created' , Typecho_Db:: SORT_DESC)

-> page($this -> _currentPage, $this -> parameter-> pageSize);

$this -> db-> fetchAll ($select , array ($this , 'push' ));

 

下面是 Widget_Abstract_Contents:: select()

PHP代码
  1. public  function  fetchAll($query , array  $filter  =  NULL )  
  2. {  
  3.     // 执行查询  
  4.     $resource = $this -> query ($query , self:: READ);  
  5.     $result = array ();    
  6.   
  7.     /** 取出过滤器 */  
  8.     if (! emptyempty ($filter )) {  
  9.         list ($object , $method ) = $filter ;  
  10.     }  
  11.   
  12.     // 取出每一行  
  13.     while ($rows = $this -> _adapter-> fetch ($resource )) {  
  14.         // 判断是否有过滤器  
  15.         $result [] = $filter ? call_user_func (array (& $object , $method ), $rows ) : $rows ;  
  16.     }  
  17.     return $result ;  
  18. }   

首先执行 query() query() 函数会执行:

$resource = $this -> _adapter-> query($query , $handle , $op , $action );

然后将查询的结果返回,根据上面 提到的 config.inc.php ,这里的 _adapter Typecho_Db_Adapter_Mysql ,他其实就是执行了一个 mysql 查询:

if ($resource = @ mysql_query($query instanceof Typecho_Db_Query ? $query -> __toString() : $query , $handle )) {

    return $resource ;

}

这里的 $query->__toString() 会返回经过 Typecho_Db_Query 处理后的 最终用来执行的 SQL 语句。

得到查询结果后,上面的 fetchAll 函数就循环调用回调函数将数据回调出去,前面的代码中 Widget_Archive 在调用时指定的是 push ,在 push 函数中返回的每一行数据都被压入 $stack ,这样 $stack 中就有了一行行的数据了。

 

 

Tags: typecho, 笔记

typecho 一天下来的心得

自从评论里有人推荐typecho后,自己也下载了看了一下。确实,代码很漂亮,最关键的是注释是中文的。这点很让人心情愉快。虽然wordpress的英文注释也很容易懂,但毕竟不是自己的语言,总有点心里障碍。

前天晚上下载了一份看看,昨天在参考官方的一些插件的同时,自己临摹了两个。一个是搜索引擎来源关键字高亮,一个就是微博上有朋友提出的内容分页。

东西嘛。都扔在http://neatstudio.com/typecho/上面。还没有正式完成,只能算是一个测试版吧。

下面就是一些心得,希望可以给其他开发人员带来一点帮助,当然我这个只是看了一天的心得,与其他人员的相比应该是差很多了。但分享总比藏着好吧?

1、文档中Typecho::widget('Options') 错误,应当为:Typecho_Widget::widget('Widget_Options');
2、全局地址为:Typecho_Common::url('index.php', Typecho_Widget::widget('Widget_Options')->siteUrl) ,再与Router组合
3、Router,当前名称为:Typecho_Router::$current
4、针对内容做插件,需要在activate中加入:
    Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('HelloWorld_Plugin', 'parse');
    Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('HelloWorld_Plugin', 'parse'); // contentEx好象是处理过的字符串。
5、针对摘要处理(摘要是用在列表中的),如同4一样,只是contentEx换 为excerptEx
    由于4、5都没有官方说明,但是,在官方的插件示例中,采用的是contentEx,而且源码中,___content和___excerpt的最后return都是有Ex的版本。(这两个函数在入口时都是先对没有Ex的的变量作了处理,具体还是需要sluke的鉴定)
6、其实4、5的功能,都能算是代码植入吧,在后台页面中,更容易被植入,比如Typecho_Plugin::factory("admin/post.php")->content = array('classname','functionname'),你只需要把源文件打开,看看哪里有能够植入的类就行了。就象post.php和page.php中都有一个richEdit,就是专门等着别人为text这个textarea进行扩展的。

Tags: typecho, wordpress, sablog, 文档, 心得

Facebook新开源项目Flashcache:加速MySQL

Facebook发布了通过将数据缓存在SSD硬盘加速MySQL的内核模块Flashcache。代码已经放到Github上,目前只测试了Linux kernel版本2.6.18和2.6.20。
Facebook 称,Flashcache是其内部开发用于帮助扩展InnoDB/MySQL数据库,但同时Flashcache也是作为一个通用的缓存模块设计的,因此 能用在任何搭建在块设备之上的应用程序。

对于InnoDB,当工作集不与 InnoDB缓冲池一致,由于更多的工作集缓存在快速的媒介如固态硬盘上,将能显著的改进读取延迟。

--EOF--
没有测试,也无法测试,毕竟我没有SSD硬盘。纯新闻http://www.cnbeta.com/articles/109988.htm,突然发现,原来cnbeta的文章已经11万左右了

Tags: facebook, flashcache, mysql

开发环境和生产环境布署的解决?

谈到这个问题,就不得不谈现时电子商务网站的现状了。
很多时候,在测试机上做开发的代码杂七杂八的功能都非常多,在没有使用UNIT等单元测试的时候,一些废弃功能也就永久的留在测试机上不会被删除。短时间内看不出啥问题,但时间长了,原有开发人员离职后,新的开发人员进入,如果再做上这些事情,那么时间长之后,哪些代码有效,哪些是测试代码就再也分不清了。

以下就是一位网友的经历:

首先,之所以把这个问题发到首页,一是我身边的朋友都有类似的问题,并且目前都没有最好的解决方案;二是有些朋友有好的解决方案,但是不一定是合理的方案,所以发到首页来相互学习,讨论。

我们进行WEB系统的电子商务系统开发,目前我有个问题不知道该怎么解决,想问问大家,看有什么好办法解决,情况如下:

1、我公司自己开发了一套电子商务系统,1.0的版本已经在运营。

2、现在开发人员要对该系统进行后续版本的功能增加,比如增加一些1.0中未实现的功能,甚至有时候还要改动1.0中的业务逻辑。

那么我的问题是:

在开发人员对后续功能进行增加的过程中,如果有一天发现1.0的版本中,有个严重的BUG,需要马上处理;

但是目前因为增加后续版本功能,代码已经修改了很多,这个时候,如果把1.0版本中的BUG修复,再布署到生产环境中的话,会出现很多两个版本中间不配套的问题,而出现程序错误;

然而,又不能全部布署最新的版本,因为当前的版本功能还没能完成。

这个时候,怎么办? 

 另外,我们开发环境中的数据库和生产环境中的数据库,数据同步的问题,比如1.0版本中的数据库已经有真实的用户数据和销售数据,但是我们后续的开 发工作可能增加了表,或修改了表的字段;本来是把后续的修改更新上去就可以了,但是我们在开发新功能的时候,开发环境中的数据库可能需要生产环境中的最新 数据才能进行。

 这个时候,怎么办?

 第一个问题,有朋友告诉我使用源码管理中的“分支”功能;

 第二个问题,有朋友告诉我,在有需要最新的生产环境数据的时候,直接手工把数据导过来;

 但是我总觉得应该还有更好的办法,或还有更细节的地方需要考虑和注意,特请有相关经验的人士一起讨论,谢谢。

  补充:

虽然程序会经过严格的质量测试,但是布署到生产环境中的时候,难免还会有错误,像支付宝、淘宝这样的系统,他们除了质量测试,还有其他的技术手段来保证新的程序版本布署到生产环境中出现错误,不知道他们是如何做的。

 关于程序的发布,另外还有两个朋友告诉我两种不同的解决方式:

1、是WEB程序的版本路径来区分,比如1.0的版本,上线发布的地址就定为:

 http://pay.baidu.com/v1.0/login

而1.1的版本上线地址则为:

  http://pay.baidu.com/v1.1/login

这样可以避免版本的冲突,但这个方法不适合我们的系统

 2、上线的时候采用两台服务器切换,一旦有问题,直接切换到另已台服务器(这个方式我想没有正面地解决问题) 

 2009-11-18 晚上22:03

回家在网上找了资料,看了微软的一本书《使用 Visual Studio Team Foundation Server 进行团队开发》,简称“使用TFS进行团队开发”,其中看到两幅图,如下:

大小: 91.86 K
尺寸: 500 x 270
浏览: 1510 次
点击打开新窗口浏览全图

大小: 106.96 K
尺寸: 500 x 301
浏览: 1376 次
点击打开新窗口浏览全图

再参考了一下相关的文字说明,我想,解决我面临的问题,最佳的办法应该还是使用版本控制是最好的,在此感谢园子里面所有给予建议和解决思路的朋友,谢谢你们。

-----EOF----

最后这位作者想到了使用版本控制,事实上版本控制是非常有必要的,有些时候我们还是需要为一段程序加上分支。要知道电子商务网站加减新功能可能是很频繁的。。

随便看看,好象自己没发表啥意见 。。。

Records:14123