范畴:

办公室的网格计算,使用虚拟环境-第 1部分

Steven ,星期五2009年12月4日下午11:23

简介

我的工作在我们运行的批处理作业,每天处理的数据记录数百万,我最近一直在思考所有的机器,坐在周围的每个每天做几个小时没有一个公司 如果我们能够使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看雇用一个办公室的潜在好处电网使用虚拟环境。

作为一个PHP开发人员,我要使用的工具,我每天使用 Linux上,MySQL,PHP,VirtualBox和Subversion( SVN)的的。 不过,我希望这本手册将适应其他语言和技术一样好。

所提供的解决方案,我将非常松散的基础上的处理,我们就需要实现,但通过整篇文章,这可能不是真的,我会改变简单的事情,或产生更有趣的用法场景类型。

这些虚拟环境的Windows机器上运行,因为这是大多数办事处运行。 处理,办公室机器与使用这些机器的工作人员不应该干涉,应该不需要在机器的维修,并很容易地部署到新机器,因为他们成为可用。 此外,新的虚拟机时,不应要求任何额外的配置,因为这大大降低了在电网系统的可扩展的可扩展性和易用性。

为什么要部署Office计算网格?

首先,你可能会想,为什么不只是使用云计算资源,如Amazon的EC2平台 的原因可能有几个,例如:

  • 你不会委托到云计算环境中的某些数据
  • 你不能把法律上的原因(如数据离开该国),潜在的法律上的原因,如NHS的记录,到云计算环境的某些数据。
  • 你要保持加工单位的密切,已超过硬件的完全控制
  • 您不必项目资金运行云实例
  • 你的办公室没有连接到互联网,因此它不可能使用云资源
  • 你不喜欢雨,云建议雨水,因此,你保持远离

我敢肯定列表可以继续,但我认为现在。

办公室计算网格的优点

那么,让我们做一些数学(和真正的物理风格,让一些笼统的假设)。 想象一下,你有大仡的处理服务器上运行的100%的日常工作​​。 在你的办公室有50台机器处于闲置状态,每天16小时,这些机器是10%,只要你结实的处理断绝强大。 (四舍五入到这里所有的结果是低估的性能提升)。

因此,1机* 10%的力量,在空闲时间* 2 / 3 = 0.067,即1台式机处理过程中每天 6充分就业。

如果你现在规模高达15个闲置的台式机,每天处理许多工作,作为您的主服务器进行处理。

因此,在我们假装办公室50台机器 ,我们可以增加我们从1服务器的处理能力4个全处理服务器,或者我们可以处理400每天的工作,而不是100。

请注意,贵公司有没有新的硬件投资只是增加其批量处理能力的4倍! 潜在的,你是要增加用电量,但大多数的办公室,我一直在的机器环境一般一夜之间反正左,所以你可以看到一个绿色的倡议。

其他优点也意味着如果你的办公室机器已经足够,为您提高您的办公设备的电源你的办公室电网变得更加强大,自动处理服务器可以被推迟,在新的投资(或更新)。

技术

你需要什么? (或更正确,我用什么):

  • 空闲的办公室机器(一个备用的旧的Windows XP的笔记本电脑在我的情况)
  • VirtualBox的(或其他虚拟化客户端软件)
  • 与PHP,MYSQL runningÂ削减下来操作系统的虚拟机上运行,我打电话我的这些 LIMP服务器:)
  • 工作运行
  • 作业服务器(也可以是另一个虚拟机某处)

典型职位

,这个系统是设计来运行的作业的类型如下:

  • 系统接收数据后,我们需要匹配并返回结果列表
  • 匹配包括检查/寻找几个相当静态数据源
  • 从数据源的结果可能需要进一步验证,合并,其他数据源的检查结果
  • 返回匹配的记录数据,充分验证和处理
  • 工作中的每个记录是独立的休息

所以基本上我们期待在运行需要的数据库查询和一些数字运算,在企业环境中的一个相当典型的场景混合的作业。

电网解决方案来处理这种类型的工作不仅有利。 基本上,任何可以分裂成独立的单位的过程可以并行运行。 的例子和更多信息,请参阅本维基百科 :网格计算,但几个著名的例子是SETI @ HOME和BIONC。 有运行计算网格的框架,这些都是值得研究的。

我们会怎样实现?

这些文章的最后,我希望表明,部署Office电网不需要非常昂贵或费时。 我要讨论:

  • 设置作业控制系统,工作配置
  • 创建一个适当的处理虚拟机
  • 如何在Windows机器上的系统设置
  • 确保您使用的是最新的代码和数据
  • 部署和基准
  • 展望未来

我会建设(OK,然后我建立了写本)的示例应用程序来测试在本地机使用Windows XP和我“GridMachine的”虚拟机的概念。 我的作业控制服务器将是我的主要机器上运行Fedora 11中。

这绝不意味着,表现出强大的系统完全正常的,它意味着更多的示范和讨论表明,这些东西可以在一个相当短的时间空间,并以较小的代价取得。 请随时给我发送任何意见,更正,或改善,我会尽我所能,保持更新,以匹配这篇文章。

下一次

在第2部分 ,我会开始寻找作业控制系统,研究工作应该如何进行配置,以达到最大的处理量,同时确保每个作业是没有失败处理的。

办公室的网格计算,使用虚拟环境-第 2部分

Steven ,星期五2009年12月4日下午11:23

简介

我的工作在我们运行的批处理作业,每天处理的数据记录数百万,我最近一直在思考所有的机器,坐在周围的每个每天做几个小时没有一个公司 如果我们能够使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看雇用一个办公室的潜在好处电网使用虚拟环境。

第1部分中,我给我将使用以及讨论一些潜在的原因,你为什么会要创建一个办公室电网系统和技术的概述。

作业控制

如果你将要运行的作业,那么你会需要一些方法来管理他们。 你的作业控制系统(你的工作服务器上)需要,真正做到深思熟虑之前,甚至试图运行办公室电网。 因此,首先,什么是作业控制系统的任务:

  • 从工人的要求不可收拾工作
  • 告诉工人要运行什么类型的职位
  • 跟踪作业
  • 确保工作只运行一次
  • 为工人提供就业数据,或至少告诉他们在哪里得到它

该系统还需要具有可扩展性,一个解决方案,现在在一个单一的情况下可以延长运行几种类型的就业机会,为企业看到在网格解决方案的价值。 例如,作业可能会获得优先事项,可能存在多个作业类型(即几个代码基地),最终你甚至可以运行几个不同的工作,每个作业类型优化的机器(虽然不从“一般工人“的想法)。 总是尝试思考未来,在开发系统时,短期前景可能会导致较长期的挫折和更多的发展时间。

作业服务器

我们要去某个地方需要控制我们的工作,这应该只在您的网格系统,有一个固定的资源定位器,是一个IP地址,主机名,URL(使用内部DNS)等,这是因为工人需要知道在哪里找工作,工人需要找到作业控制系统(没有作业控制系统找到工人)。

作业服务器本身并没有真正有一个复杂的任务(中的一项基本制度,无论如何),它需要存储作业列表,手出的工作,收到成效,并随后存储日后检索。 如何定义这些部件(如“失控就业”)可以是很基本的的。 后来,我们可以扩展系统,包括添加,编辑,删除,暂停作业,但是这超出了这个运动是一个管理界面。

没有任何理由任何,那么,你的作业服务器不能虚拟机运行在您的主服务器进行处理,只要它不消耗太多资源。 作业服务器,则需要高可用性,如果它出现故障在一个星期五的晚上,你将失去整个周末的处理,可能会让您值得一两个星期的处理时间(时相比,您的主服务器进行处理,单独) 。 您可能要考虑你的工作服务器高可用性负载平衡的环境。

基本设置

为我们的工作服务器的基本设置,包括我打电话我LIMP服务器( 李马钱ySql,P HP) 。 THEA工人上运行的代码将实际工作,什么工作,它可以运行作业控制系统数据库交互。 后来,我们可以创建Web服务,而不是让工人自己的辛勤工作了就业机会,实际上手,但现在我们将继续使用KISS原则 (保持简单,愚蠢!)。

所以,让我们创建三个 MySQL表来处理工作。 这将是'工作','jobRecords`和`jobResults`。

工作表 在这里,我使用SQL好友一个伟大的小替代phpMyAdmin的 ,只是因为它更容易安装在CentOS(别人看:10到phpMyAdmin的替代品)

此表由5个简单的领域,

  • ID:唯一标识工作
  • 名称:可能是一个客户参考,或任何其它标识符
  • 状态:你需要知道在哪里的工作,例如:
    • 0:未开始
    • 1:拿起
    • 2:完成
  • started_by:谁开始做这项工作吗? 这不完全是必需的,但是是一个不错的。 我建议他们的网络上的IP地址跟踪工人
  • started_at:工人什么时候开始工作? 通过跟踪,并没有在X的时间,我们知道我们需要拿起工作再次开始另一名工人加工完成的工作。 工人可以停止处理/任意数量的原因,停电,死机,网络损失等离线

这是很容易,本表可与一些额外的领域扩展,从而使统计跟踪,结束时间列,工作了多久,一个计数器,看看有多少工人拿起作业(显然,这需要趋向1),作业的优先级列表可以一直开下去。 在更复杂的工作场景,将有可能指定工人需要多少内存访问(因此,只有使用合适的工人),甚至是什么类型的工人需要。

让我们来添加几个例子作业:

例如就业机会

下表是很容易理解,这些都是我们的工作记录。 它们与主要工作表的列jobs_id`。 本表数据,您需要提供您的工作人员非常依赖,让一个很简单的例子,我们有四个列:

  • ID:记录ID
  • 名称:人的名字
  • 地址:人的地址
  • jobs_id:这条记录是与作业ID

第三个也是最后一个结果表表,它有很多相同的使我们的记录表,除了一些列可以记录表的一部分:

  • job_record_id:结果链接的工作表
  • 结果:结果数据

... ...,这一切您需要作业控制! (尽管在一个非常基本的的水平)在我的例子中,我指出另一种情况我处理的数据所在的表,但这很可能只是一个文件,运行模拟程序的参数,你的名字。

选择工作

如前所述,工人将现在为我们做我们的工作管理,都需要我们要真正做到的是找到一份工作,需要处理和获取信息。 我们将如何做到这一点? 好了接我们的工作的选择标准和寻找工作,在SQL中,我做了以下:

  1. 采取任何未标记完成,但我们的工人和复位(以一个标识符__ME__,最简单的IP地址)的工作:
      UPDATE`的工作`设置`地位`= 0`地位`= 1和`started_by`= __ME__; 
  2. 使用我们的工作选择标准,选择工作,并告诉工人,这与它打交道的控制系统:
      UPDATE`的工作`SET`地位`= 1,`started_by`= __ME__,`started_at`= NOW()这里“状态”= 0或
     (`地位`= 1和`started_at`> DATE_SUB(NOW(),间隔X小时))ORDER BY`ID`ASC; 

    通过抓取没有返回结果的工作在X的时间,我们必须确保所有的工作都运行在一个崩溃或擅离职守工人的事件。

  3. 下一步抢的工作记录本身的细节:
      SELECT *`工作``started_by`= __ME__ LIMIT 1;
     SELECT * FROM`job_records`WHERE`ID`= __JOBID__; 

我们插入我们的结果记录,并标记为完成的工作的工作完成后。 记住作为作业可以暂停/恢复在任何时候允许一些在你的脚本的健壮性。 这可能是通过更新作业控制系统挂起任务的一半,使检查工作中的记录数量和结果保存到作业控制系统的数量将是一个明智之举。

此外,虽然这表明如何选择工作可以从一个SQL查询帧,你确实应该管理的抽象作业控制,因此,如果您决定切换到使用一个Web服务, 文件系统 ,XML,或任何其他多项制度,它不会影响到它上面的代码。

作业配置

接下来的方面要考虑的是作业的大小和配置。 通过作业的配置玩,我们可以取得出色的速度,复制过程中,和可靠性之间的平衡。 以一对夫妇OFA方案:

  1. 乔布斯采取每1天运行:这意味着你的员工需要15天来处理每一个工作(记住10%的电力时间2/3rds) 。 这显然​​不是一个明智的配置,你的工作是太大了! 初始工人擅离职守(时间拿起它没有返回结果加后处理时间),这将需要至少增加一倍的时间去处理工作。 在一个理想的,你有至少有一个完整工作容易被清除每个长的闲置期结束,你保持这样的工作,在最坏的情况下工作计时两天的过程,要先去失踪。
  2. 乔布斯1分钟运行 ,这意味着,你的工人约15分钟,运行每个作业。 虽然这最初看起来可能理想,您将获得额外的工作处理在午餐时间,茶点,会议等这种情况下使系统的其他领域的压力,并介绍自己的问题。 例如,首先你的设置/处理时间比要去下来,因此失去了系统的效率。 您的网络将是不断流作业的信息,以各种令人沮丧的工人的工作人员都是洞,他们的日常工作​​。 你也打算把作业处理服务器上,因为它有更多的应变抛出很多很多小块的工作定期。 最后,在这种情况下,如果你的工作服务器宕机,你要去创造一个更大的工作未完成的,而工作的巨大回日志可以继续处理暗藏不知道,作业服务器遇到困难。

现实中有没有一个理想的配置为您的网格设置,在很大程度上取决于可用的资源,作业,作业的周转时间的要求,网络的能力,等等​​类型。 但一些指导原则将是:

  • 大小的工作,使每个工人可以通过至少3-4在15小时内的工作(可能闲置时间最长的一段时间)
  • 作业大小的播放,使安装时间变得相当的处理时间(铭记上述点)相比,微不足道。
  • 如果作业不完成一倍的时间量(或许更少),你期望它来完成,它承担了擅离职守,并开始与另一名工人来处理它。 这意味着您可能需要等待完成(如果后续工作失败可能更长)为它工作的正常长度的三倍。 您可能要缩短这个时间,但要小心,不要减少太多,因为你可能会开始定期重复处理任务。
  • 乔布斯应该尽可能多的外部要求独立。 作业服务器,例如,只应在每一项工作的开始和结束联络。
  • 不要您的网络饱和,这将有两个负面影响,你白天的工作人员会发现,使用网络的挫折和问题都可以通过连接超时问题只会变得更糟,因为您扩展您的网格的经验。
  • 确保作业可以运行在您的工作人员。 如果作业太多内存密集型或磁盘空间密集的工作将开始中止,你会发现的唯一一个没有真正的原因与处理的作业数下降。

提交工作结果

提交工作结果时,重要的是要检查的结果没有被提交由另一名工人,特别是如果目前的工人已经蛰伏一段时间。

结果提交时确保结果的数量范围内的工作相匹配的记录数。

如前所述,并不能过分强调,建设成为工作的检索结果提交容错。 工人可以(和最有可能将的)进入挂起模式在最不方便的时候,这需要得到照顾。 也再次抽象离开你的结果提交,将有助于满足您的作业控制系统更容易处理未来的变化。

摘要

在此sectionÂ,我们看着作业控制服务器需要做什么和如何得到一个非常基本的的系统设置。 我们讨论了如何检索从控制系统的工作,以及如何最好的配置工作,以获得最我们您的办公网格系统。 要完成,提出了一个段落,或提交结果返回到作业控制服务器。

  • 作业控制服务器管理工​​作和确保完成所有的工作单位
  • 通过提炼你的工作选择/结果提交我们可以改变,没有什么问题的技术控制服务器
  • 配置您的工作,以确保它们没有您的网络基础设施上投入太多的压力,快速,高效地运行,并没有重复处理定期的任务。
  • 确保您构建容错和你的程序错误checkingÂ,工人可以暂停和恢复和最不方便的时间。 记住要检查,如果结果已经由另一名工人提交。

下一次

第3部分 ,我们将创建我们的虚拟加工机,并成立了我们的Windows操作系统的计算机成为空闲时间工人。

办公室的网格计算,使用虚拟环境-第 5部分

Steven ,星期五2009年12月4日下午11:03

简介

我的工作在我们运行的批处理作业,每天处理的数据记录数百万,我最近一直在思考所有的机器,坐在周围的每个每天做几个小时没有一个公司 如果我们能够使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看雇用一个办公室的潜在好处电网使用虚拟环境。

第4部分中,我们看到在使用的工具,以确保我们正在运行最新版本的代码和数据源,使得到的结果总是与最新的商业信息和逻辑的最新。

部署前

在部署您的电网系统,如果有一件事你仅一件事情,你当前系统的基准! 不管你告诉多少额外的工作,你的系统是怎么办的同事,除非你有号码来备份你的保证是什么。 因此,

  • 你可以处理目前有多少条记录? 每日? 每小时?
  • 通常需要扭转工作多久?
  • 你有更多的容量多少?

还有其他问题:

  • 如果您的服务器进行处理(或处理服务器之一)出现故障,这将如何影响你的能力,你会被削弱?
  • 有什么优势,你希望/希望得到来自电网系统?
  • 办公室机器能够运行的工作吗?
  • 您的(或可以被转换成你的工作),工作在这种运行方式?

最后重要的一点是采取任何像这样的重大改变你的时间。 更新您的处理代码工作,再次使用新的方法,基准。 可能成立处理服务器运行虚拟机,您所有的服务器进行处理后,另一名工人(只是一个非常强大的的一个相对)。 允许新的进程来解决。

部署

我的建议是到办公室的一个周末弹出执行所有的安装和设置。 不要只是前两个星期的假期,离开使其他贫困章处理的后果... ...也许不是...

对于这样一个系统的部署需求是缓慢的。 尽管它是相对简单的,设立这个系统,会影响整个办公室的基础设施(数字)。 首先,推出在时间的情侣机,监控网络流量,每天天的基础上如何工作主机上执行。 您可能需要改变你的发现你的工作配置。

一旦系统有几台机器(可以说10%的所有办公室机器,即5)随时监控网络流量和主机performance.Â再下一步基准结算,你现在可以处理33%以上的就业机会比你的第一个基准。 检查是这样的话,或者说,你至少在这个球场。 如果不是这样,在移动之前的调查是怎么回事。 重复这个循环,直到你有愉快的所有办公室机器上运行,而不必杀死个别机器性能或磨您的网络处于停顿状态。

在任何时候都保持基准,即使在所有部署。 检查新的代码更新如何影响系统的速度,检查所有工人报告和处理工作。 慢(非常慢)递增你的工作配置,以获得最好的,从你的工人和网络。

住手!

如果你想从你的工人,在运行一段时间后停止? 他们都在那里运行,再生,并尽力处理像饥饿的昆虫数据。 答案似乎是显而易见的,但其价值增加以防万一,它忽视。 简单编辑处理脚本退出(0)或死亡()或其他一些语句来杀死你的处理工作。 为什么我们总是尝试更新到最新的处理脚本之前运行的一个重要原因!

演示系统

为了写这篇短的文章,我创建了一个非常小的网格,展示的技术和方法。 我读了很多文章,教程,并利用各种工具来设置和监控发生了什么事情。 我绝不走出去饱和的交通整个办公室,我也访问了定期工作人员的电脑主机的性能如何影响。

我的演示系统确实是很不起眼的的。 我用我的作业控制服务器设置为普通的桌面。 在这一点上,我已经安装了MySQL服务器安装设置作为主在复制 PHP,A和SVN 通过 Apache(通过工人VM访问)联系在一起。

然后,我在VirtualBox上创建一个CentOS worker机器上的一个6岁的Windows XP的笔记本电脑。 我安装后复制到本机的虚拟机指定的预定任务,并让他走。

虚拟机的成立,颠覆与PHP和MySQL。 我检查出一个分支命名为“工人”从我的作业控制服务器库,并确定它可以使用“SVN更新”更新。 下一步我安装MySQL作为一个奴隶,检查作业控制服务器上复制数据从MySQL工人VM。 这一切后,我设置的bash脚本和cron作业。

我的处理脚本,基本上沿此线(很简单的东西):

  • 阅读在名称字段
  • 计算表中的相似的名称,在虚拟机上的数据源
  • 算作以上,但分裂的名称,用空格(即用的名字,中,姓氏)的名称
  • 重复这一过程中的1000倍

每个作业历时约20分钟运行。 在一个点上,我打开了工人VM的Windows笔记本电脑上的多个副本,并观看的工作进行检查每个工人的IP地址。 在这一点上,我也证实了自动重新启动的复制。

离开笔记本电脑闲置造成一个工人开始作业控制服务器来处理工作。 恢复笔记本电脑的使用时有一个约30-60秒的延迟,这是一个相当的时间和工作人员将需要知道他们的计算机可能会暂停一小会儿,当返回到机器。 较新的机器可能没有这个长暂停。 处理这些机器空闲期间执行金额的好处,超过工作人员不必等待上一个上午抵达他们的机器在短期内(例如1分钟)(我经常等待更长的时间,这为Windows Defender的更新发生)提供他们意识到了这一点“(有用的时间抢了一上午的咖啡!)。

总的来说,我觉得有信心,我已经展示了可用于建立这样一个系统的技术。 我已经证明,这种制度不上一个(非常)小规模,多一些尝试可以扩大利用办公室的机器的资源的工作。 如果我不这样做的点,我会非常有兴趣知道/时看到别人。

结论/评估

下一个明显的步骤将是一个现实世界的例子,并开始部署如本系统内的办公环境,并看看会发生什么。 问一个企业没有一个线索炽烈公司提交证明的技术和效益可能会有点困难。 网格/分布式计算是非常受欢迎的某些圈子里,有一些大型应用程序(BIONC,SETI @ HOME,折叠@家等)。 ,但是,我没有发现在我的办公环境内可推出的搜索规模较小,像这样简单的系统。

我创建了一个基本上是免费的系统大多为开放源码软件和工具使用在几乎所有的办公。 技术基本上表现出并显示执行,并如预期。 希望我有,没有太大的工作,并用一个非常简单的的设置,您可以部署一个办公室网格计算系统,是功能强大,价格便宜,A和可扩展同时显示。

一旦系统启动和运行几乎没有定制和改进,可以使金额。 例如统计/基准可以很容易地呈现出这样一个系统的价值每天补充。 新机器可以迅速和容易地添加,当他们到达升级现有的硬件支撑你的处理能力。

我希望您喜欢阅读这一系列文章,给你办公网格系统上运行一个想到的食物。 这里提出的解决方案不一定在所有情况下,但应适应允许您使用自己的解决方案,得到您的数据处理。

请随时给我发送任何意见,更正,或改善,我会尽我所能,保持更新,以匹配这篇文章。

Zend框架:基础-回顾

Steven ,星期六2009年11月28日下午10:42

最近,我的雇主支付一组我们开发Zend框架:基础课程,在这里我将我的想法和意见,对他人的过程中总结。 对于那些希望节省时间,这里是我的总结:

对于开发商还没有来得及看这门课程(Zend框架:基础)提供了一个很好的框架,向您介绍的重点领域,并给予足够的信息,以便继续大局Zend框架 对于花费的时间框架,并按照一个或两个教程,这当然不提供远远超出

背景

我一直在5-6年左右一个PHP开发,并已开始工作在过去6个月的Zend Framework组件的基础上。 我已经开发和/或已对情侣的小Zend框架开发MVC的 sites.Â坦率地说,我有没有接触其他的框架,从一个角度编码点的巨额,但已经花了数小时研究项目的网站,和评估them.Â的框架和社区周边的Zend Framework,这是非常令人兴奋,似乎有巨大的可能性,在其去。

关于课程

当然是提供了超过两个小时的WebEx会话(在中间休息10分钟)。 花的时间是通过一套由Zend提供了讨论的幻灯片,在任何时候。 您可以使用麦克风的导师交谈,但说实话,我没有看到任何人使用任何聊天窗口多。 另外一个VMWare Ubuntu机提供的示例代码和项目设置的Zend Studio试用版。 当然领导人会谈的与会者通过一个集成的VoIP解决方案,,或您可以拨打使用的许多全球数字拨号。

在课程中的材料包括留言样本应用程序的标题之前,简要介绍MVC模式的框架。 讨论表明,引导,Zend_Application,数据库表,数据库访问,形式,过滤,ACL,验证等,等,基本上涵盖了所有的主题,你需要获得一个基本的网站建立一个运行的所有的时间给你的工具去获得更多的先进框架中(虽然这金额“的大部分时间,请参阅网站”)。

时间是给定的代码的一些例子,并制定“留言”和简单的“维基”的应用。 我个人认为,提供的代码或每个应用程序,然后要求我们的发展基本上是一个副本,旁边并没有真正提供一个良好的的学习经验。 我宁愿开发一个应用程序类似,但又不完全相同。 示例应用程序的指导指的好处。 或者建设的应用程序将从头开始与示威者的可能领导为什么和怎样更多的问题,从而更好地了解一个框架,毕竟你可以看一下后的具体过程。

上一讲维基在导师的指导与帮助/从应用程序的工作。 课程结束后的反馈,它强调了几次,通过该课程,Zend的需要反馈非常重视,其实显然,我们的版本当然是相当新的。 一些在该公司的其他开发人员将采取过程很快,所以这将是有趣的,看看如果出现这种情况。

当然风格是非正式的,允许与会者和教师之间的反馈和协作。 课程负责人很友好,平易近人(电子邮件地址共享问题),并同时从他的演讲幻灯片有点不稳,似乎完全在框架的主管。 他清楚的人使用的人教教的课程,而不是定期的框架,我很喜欢“现实世界”在这方面的经验。

总体感觉

在某些方面,我发现当然是浪费时间,在其他国家,这是非常方便的。 希望我会得到跨越清楚我的理由,并可能会提供一些​​思想或有用的反馈食品(知道我这是不可能的!)。

至于我自己,这门课程的目的是过低的水平。 在通过了快速入门指南,请阅读罗布艾伦的行动Zend框架,并与一点点我没有真正得到什么太多的框架。 我会喜欢的当然拿起快速入门月底和培养更多的技能。

说,课程名称并明确规定“Zend框架: 基础知识 ”,并在这方面当然实现这台做出来的。 没有花时间寻找到框架的开发团队的其他成员以饱满的热情完成每个会议和提出的问题真的很高兴看到。

一切都不会丢失,这是很好的花时间确认该框架的基本细节,并问了几个问题,我不是100%的地区。 也有人的时间,我坐下来的每一天,想想编码使用的框架和未来的项目,我不能够做到,否则(贵公司同意,你能想象:))的东西。 最后但并非最不重要的,你也得到一个来自Zend尼斯说,你参加课程(尽管通过电子邮件)的证书。

Zend Framework的认证

这是一个问题,在课程中不断涌现脑海,它准备为我的认证? 快速,容易的是一个响亮没有。 课程导师是相当清楚的认证,你应该真正在日常使用的框架,感觉很舒服,它的用法和方法有信心与其他意见。

摘要

鉴于以上我写的一切,我将在两个简单的要点概括了一切:

  • Zend框架:这当然不正是你所期望的的,它给你一个很好的介绍框架上的基础知识,从中可以建立良好的接地。 当然似乎产生浓厚的兴趣和热情的开发商之间的框架。
  • 使用Zend框架:虽然它是很好的托一些非常基本的,我觉得时间,精力和资金,采取当然可以更好地用在别处。 创建一个新的更高层次的课程,采取开发一个新的水平-这将是不错的SEEA的Zend至少在认证和超越标准,为此,我会立即注册。

HTML表格生成类(HtmlTable.php)

Steven ,第五日(星期二)下午09:11 2009年5月

我需要生成一个HTML表为一个项目,我工作的PHP数据。 不幸的是后位的谷歌搜索我无法真正找到什么是合适的,所以我决定创建自己的。

我意识到,这可能不是有史以来最好的表生成类和有可能是一些错误仍然在,但我更愿意分享,如果有人想一个更好的版本,我来看看它:)我本来想创造单独的对象建立起来的一个表,如单元格对象,行对象(单元格对象建立起来的),但我意识到这样的开销将是巨大的! 所以,我已经回到阵列设置。

类将计算的最大数量,并在页眉,页脚,或身体中使用的列写出来,列数。 页眉,页脚和标题是可选的。 属性是一个数组,其中的关键是属性名称和值是属性值。 属性表标签(创建表 - 类初始化),表中的行(数组[行] [属性]),和表单元格(数组[行] [列] [属性])这个页眉,页脚和适用表身。

示例

我总是觉得看东西的最好方法是用一个例子,所以在这里我们去:

 $表=新HtmlTable(阵列('类'=>'排序',
                 “风格”=>“宽度:550px ;'));
元头[0] [0] ['内容'] =“ID”;
元头[0] [1] ['内容'] ='标题';
元头[1] [2] ['内容'] ='日期';
元头[0] [3] ['内容'] ='网站“;

 $表> AddHeader的(头);
 $ I = 0;
的foreach($ $新闻条目newsList){
 $ itemLink =“{$新闻条目['标题']}";
 $ tableBody [$ I] =阵列(0 =>阵列(“内容”=> $新闻条目['id']的,
 “属性”=>“阵列”(“风格”>“字体重量:大胆;')),
 1 =>阵列(“内容”=> $ itemLink),
 2 =>阵列(“内容”=>新闻条目[date_posted']),
 3 =>阵列(“内容”=> $新闻条目[“地盘”]));
 $ I + +
 }
表> addBody(元tableBody);
回声$表> drawTable();
编号 标题 日期 网站
9 新闻1 2009-04-04十时40分00秒 站点名称
10 新闻2 2009-04-04 12点44分十一秒 站点名称

和HTML看起来像这样:

  =  "sortable" style =  "width: 550px;" > <   =“排序” 风格=“宽度:550px;” >
 <THEAD>
	 <TR    >
		 <TH    > ID </ TH> 
  <TH    >标题</ TH>
		 <TH    >日</ TH>
		 <TH    >网站</ TH>
 </ TR>
 </ THEAD>
 <TBODY>
	 <TR    >
		 =  "font-weight: bold;" >9</ td > <TD 风格 =“字体重量:大胆”> </ TD> 
  <TD    >新闻1 </ TD>
		 <TD    > 2009-04-04 10时40分00秒</ TD>
		 <TD    >网站名称</ TD>
 </ TR>
	 <TR    >
		 =  "font-weight: bold;" >10</ td > <TD 风格 =“字体重量:大胆”> 10 </ TD>
		 <TD    >新闻2 </ TD> 
  <TD    > 2009-04-04十二时四十零分00秒</ TD>
		 <TD    >网站名称</ TD>
 </ TR> 
  </ TBODY>
 </ TABLE> 

守则

HtmlTable.php
如果您有任何意见,请他们,这将是巨大的,听到一些。 如果你使用它,也让我知道,我会在未来的扩展:)

登录到DB使用Zend Framework

Steven ,2009年4月14日,星期二下午09:06

我设法得到一个网站,并与正在运行的Zend框架,一切记录很好地萤火虫/ FirePHP所以下一步是记录到DB 。 我也想记录一些额外的信息,例如,用户代理,日期和时间,GET和POST变量使用框架。 因此,为了延长这里一点点的,我就是这样做的手册:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

美元的ColumnMapping =阵列(“优先”=>“优先”,
'消息'=>'消息',
“的datetime'=>'时间戳”,
“user_agent'=>'user_agent”
“get_vars'=>'get_vars”,
“post_vars'=>'post_vars”,
“地盘”=>“现场”
);

美元writerDb =新Zend_Log_Writer_Db($ DB,“error_logging”,的ColumnMapping美元);
$记录=新Zend_Log(元writerDb);

记录 - > setEventItem(“日期时间”,日期(“YMD H:我:S'));
记录器 - > setEventItem(“user_agent”,$ _SERVER ['HTTP_USER_AGENT']);
记录器 - > setEventItem(“get_vars”的print_r($ _GET,真实));
记录器 - > setEventItem(“post_vars”的print_r($ _POST,真实));
记录 - > setEventItem(“地盘”,地盘);

记录器 - >信息(“信息性消息”);

美元的ColumnMapping数组键是我的列名。 “优先”和“信息”是可以理解的,但Zend_Log_Writers添加额外的字段给我一些额外的信息。

显然,这是假设你有记录的工作使用的其他作家之一:)

英国名目录和Facebook应用

Steven ,星期五四月十日2009年9:33 AM

其中一个有趣的事情,我一直在同时涉及Tracesmart工作的名称目录。 我们基本上把我们的庞大的信息数据库,并掏出一大堆有关各种名称的统计。

这个过程是一个大的搜索引擎优化的努力,以吸引更多的网站的访问量,而且还提供了一些有趣的信息,并将其命名的统计数据。

这里是为我的名例如劳埃德沃特金斯 ,我想更正确的史蒂芬沃特金斯 花一分钟看看你的名字上的Tracesmart网站,可能是有趣的;)

我们名字的目录页,告诉你什么名字已被搜查,最近也得到了名称统计数据。 挺有意思的,看到著名人物的名字,飞了起来,当他们出现在新闻的统计。 最近的一个例子是, 利亚姆尼森从一次滑雪事故中去世的妻子最近,虽然人们不完全正确拼写(因此这个名字的点击率庞大的数字) -利亚姆尼尔森。

Facebook应用程序

一旦被创造的名称目录 ,我们设置我们duely名为“我的名字“创建一个Facebook应用程序。 Facebook应用程序是一个扩展目录 ,并提供了一些附加的统计数据。 为了添加到你的Facebook帐户的名称目录,请访问:

http://apps.facebook.com/my-name/

未提交禁用的表单域 ...

Steven ,星期四2008年9月4日上午11:01

作为一种快速的注意,作为正在进行的地产代理软件项目的一部分,我又回到编辑日期输入系统内。 现在,而不是让用户输入任何文字的老位,我切换一个Javascript的日期/时间选择器(短期),允许用户“挑”,从弹出窗口中,日期和时间。

现在,我的老SYSTEMA选择器会弹出,当用户点击输入字段。 然而,这将允许用户忽略的文本字段,还是去和进入这个领域的任何类型的旧事。 这是不理想。 所以我的解决方案是为“ 禁用 “的形式领域,并提出跨度与它旁边的 onclick事件调用的日期/时间选择器。 这意味着用户几乎是被迫使用漂亮的日期/时间选择器,所以日期会去用正确的格式(虽然这仍然需要验证!)的。

于是我开始通过我很好的格式化的日期时间(s)的形式,并试图与他们挑选 采摘PHP 的$ _GET 或$ _POST变量。 Unfortunately'disabled“字段不通过表单提交 这是很烦人的。 解决的办法是使用JavaScript提交表单时使用onsubmit事件,使输入元素。

这意味着,根据需要通过表单数据和格式化很好的验证准备... ...一个

搜索数组中的键和返回匹配

Steven 2008年8月13日星期三下午04:26

我已经搜索通过一个数组,并返回该元素的键相匹配的搜索字词的需要。 所以我想我分享。

“W HY,我需要这个吗?”很可能是第一个问题,你会问,如果我想通过一个数组的所有元素,一个项目的尺寸相关搜索,那么我可以拉出适当的键使用这个小功能:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?>  <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

例如所以,如果我想搜索一个维数据项的数据的数组,然后我可以做以下(并打印到屏幕大概):

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

将返回的东西,如:

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

自定义php.ini中使用 Plesk

Steven 2008年8月13日星期三下午03:53

我们有一个专用服务器ukFast Å上,我们运行了一些下运行的虚拟服务器上存在的 Plesk 。 无论如何,我的大多数域,我想遁形的警告和安全保持错误日志文件,但是我的一些域(如我),我想告诉每一点讨厌的警告和错误出现。

如果我编辑我的PHP 。ini“> php.ini文件,这会影响每一个域的服务器上,不是一个好主意,特别是当一些网站完全现场版 A,因此为了解决这个问题,你需要把一个文件名 ​​为 vhosts.conf,例如, 在你/var/www/vhosts/<my_domain>/conf/vhost.conf conf / vhost.conf中。

一旦你添加额外的代码,再比如我加入,

 php_value error_reporting E_ALL php_value display_errors On 

通过运行以下命令(此重新配置您的所有域其刚 懒惰比输入域名

 # /usr/local/psa/admin/bin/websrvmng -a 

如果你感觉有点灵活,那么你可以随时输入完整的版本,这是,

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

执行此命令后,如果你看看httpd.include文件,会看到您的httpd.include将您v​​host.conf包括行,像这样:

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












全景主题 Themocracy

6访客在线
4位客人,2机器人,0会员
最大游客今日:18日上午8时04 UTC
本月:47在2011年3月10日下午2时47 UTC
今年:130于28-03-2011 10:40 PM UTC
所有时间:130于28-03-2011 10:40 PM UTC