代码开发

2024-09-05

代码开发(精选十篇)

代码开发 篇1

1 终点、长、短半轴调用

(1) 绝对值调用

X、Z:椭圆终点坐标值。A、B:椭圆长半轴及短半轴,A带符号输入,若A(长半轴)为负值,则为大于180°椭圆轨迹,B(短半轴)与A同符号或不带符号输入,若为圆弧,A即为圆弧半径。F、S(选项):切削参数。

D(选项):毛坯外径(绝对值)、内径(负值),若使用该选项,则成为粗车单循环指令。两者的走刀轨迹如图1所示。

带选项“D”的椭圆轨迹被外径线或内径线剪切,并沿外径线、内径线快速退刀至H点(由起点Z坐标确定),再以切削速度切削至起点。

(2)增量值调用

U、W:从起点至终点的增量坐标值,其余代码与绝对值调用一致。

2 终点、椭圆圆心调用

(1) 绝对值调用

X、Z:椭圆的终点坐标值。

I、K:从起点至椭圆圆心的增量坐标值(带符号)。

D(选项):毛坯外径(绝对值)、内径(负值输入)。

(2)增量值调用

U、W:终点的增量坐标值,其余代码与绝对值调用一致。

3 终点、长、短半轴、椭圆中心调用

当起、终点关于坐标轴对称或走整椭圆轨迹时使用,代码意义与上面相同。上文所述角度是指椭圆的离心角角度,它与标注角度不同,两者可以进行换算,公式如下:

α:标注角;Φ:离心角。当离心角角度终边与坐标轴重合时,如90°,则两者相等。

从上文可以看出,G12、G13的使用方式与G02、G03几乎完全一样,而且还可以加“D”代码进行粗车,大大减少空刀轨迹,高效切除毛坯余量,提高加工效率。

FANUC 0i系统提供了两种用户宏程序,即宏程序功能A、宏程序功能B。宏程序功能A是FANUC系统的标准配置,宏程序功能B虽不是标准配置,但绝大多数FANUC系统也支持宏程序功能B,由于宏程序功能A需要用“G65Hm”格式的宏指令来表达各种数学运算和逻辑关系,极不直观,而且可读差,因此用宏程序功能B来进行编写。

众所周知,若给定圆上两点和半径,则满足这样条件的圆有两个,当给定的两点位于直径的两端点时,两个圆重合,这个特点同样适用于椭圆,当给定的两点位于椭圆的长、短轴两端点时,两个椭圆重合,如图2所示。

标准椭圆 (如上图坐标系) 的一般参数方程为:

X1、Z1:椭圆中心的绝对坐标值。

由于数控车通常采用直径编程,所以X坐标应乘以2,由图2可知,顺、逆时针方向与椭圆离心角角度有关,其实圆弧(椭圆弧)的顺、逆时针规定与坐标系中角度的规定是一致的,即角度增加的方向为逆时针方向,角度减少的方向为顺时针方向,这里提供一个简单判定圆弧(椭圆弧)顺、逆时针的方法:

将坐标系原点平移至圆弧(椭圆弧)中心,把水平轴看成X轴,则当向另一轴正方向旋转时,为角度增加方向,即为逆时针方向,反之为顺时针方向。

这样指定椭圆起、终点坐标,长半轴、短半轴要实现走椭圆轨迹,关键是求出椭圆中心坐标,并确定两个椭圆的位置关系。笔者发现用椭圆的参数方程求解是最方便的,只要使用三角函数的和、差化积公式,并应用一些换算技巧,可以方便地求出椭圆中心的坐标,并判断出两个椭圆的位置关系。不过这样计算有一个缺陷,当起、终点关于坐标轴对称时,参数方程无解,虽然这个问题可以解决,但会显著增加宏程序本体的字节数,而且在实际过程中碰到这个问题的概率也较小,故笔者把它归纳到整椭圆问题中,和整圆问题一样,给定两点(重合)、长、短半轴是走不出整椭圆的,要走整圆轨迹,必须要指定圆心坐标,但整椭圆轨迹,即使指定中心坐标也不行,必须同时指定长、短半轴、椭圆中心坐标才可以走出整椭圆轨迹。这样既可以解决整椭圆问题,又可以解决起、终点关于坐标轴对称问题,一举两得。当然,在数控车中,是不会连续走出超过180°椭圆弧轨迹的。

至于给定两点、椭圆中心坐标走椭圆轨迹的问题就简单多了,只要算出椭圆的长、短半轴,用椭圆的一般直角坐标方程就可以很方便地求解。同样起、终点关于坐标轴对称问题也归纳到整椭圆问题中。

在FANUC 0i系统中,参数N0.5001-N0.5004保存着上一程序段工件坐标系中X、Y、Z、附加轴的位置值,这个参数值可以读出,因此,在宏程序本体中,没必要对起点坐标再进行赋值。

在用户宏程序功能B中使用的变量有三种,即局部变量(#1-#33)、公共变量(#100-#199、#500-#999)和系统变量(#1000以上),可以用自变量指定对宏程序本体中的局部变量进行赋值,譬如要对O0001宏程序本体中#24进行赋值,就可以用G65 P0001 X50.0 L2, 则#24的值就等于50.0, L2表示调用O0001两次。

同任何数学计算一样,宏程序中的运算也会产生误差,用户宏程序中的变量值精度为8位十进制数,FANUC0i系统运算中的误差精度如表1所示。

根据以上思路完成了宏程序的编写,附录中的宏程序适用于数控车,只要略作修改就完全可以应用于FANUC 0i系统的数控铣。

(1) 相对误差取决于运算结果; (2) 使用两类误差的较小者; (3) 绝对误差是常数, 而不管运算结果; (4) 函数执行SIN/COS。

圆弧的车削方法有两种:车锥法和车圆法,该方法同样适用于车削椭圆。车锥法由于点坐标计算困难,应用较少,车圆法又会产生很多的空刀轨迹,但使用G12、G13带“D”代码进行加工,即可避免这一问题,从而提高加工效率。

如图3所示,毛坯外径为准40mm,采用变椭圆中心法(车椭圆法)进行粗车,即沿X轴正向平移凸、凹椭圆弧轮廓,此时起点至椭圆中心的增量坐标,起点至终点的增量坐标均不发生变化,因此采用椭圆粗车单循环方式(增量值)是最理想的,粗车时采用90°外圆车刀,精车时采用菱形刀片外圆车刀进行加工。

3.1 粗加工程序(FANUC 0i系统)

3.2 子程序

3.3 精加工程序

上例中,注意起刀点的选择为X40.3,而非X40.0, 这样做的优点是凸椭圆经过20次粗车单循环,凹椭圆10次单循环,每次背吃刀量1mm,刚好留下0.3mm精车余量。为提高椭圆表面精度,可以进行刀具半径补偿,但应注意补偿指令(G41/G42)加入的时机。图4为在后置式刀架数控车床执行2#子程序时 (粗加工凸椭圆) 的轨迹,轨迹超出外径准40mm部分均被剪切。

在实际过程中应用G12、G13还应注意以下几点:

(1)必须使用FANUC PMC; (2)不能用于FANUC循环指令中;如G71-G73等;(3)可以用于子程序及宏程序中,但不能再以G代码调用;(4)使用长、短半轴方式或椭圆中心方式调用G12、G13时,若起、终点接近于关于坐标轴对称,即X坐标接近相等,或加工接近180°圆弧,宏程序中#120变量的值变得很大,受变量精度限制,计算会产生较大的误差(该问题在半径方式G02 (G03)中同样存在);(5)使用长、短半轴、椭圆中心方式调用G12、G13时,若终点不在椭圆上,则轨迹走至终点Z坐标处,然后沿X轴切削至终点;(6)不能用G12、G13带“D”代码方式进行精加工(因两者的步距不同);(7)为避免在实际使用过程中误删除宏程序,可以修改参数#3202的第四位(NE9)的值为1,则可对O9000-O9999的程序进行保护。

笔者编写的宏程序的程序号为O9012(顺椭圆)、O9013(逆椭圆),FANUC 0i系统对程序号为O9010-O9019提供了G代码调用方式,修改参数NO.6052、NO.6053的值为12、13,则宏程序O9012、O9013可以用G12、G13进行调用,椭圆的顺、逆与圆弧的顺、逆判断完全一致。

3.4 逆椭圆宏程序

代码开发 篇2

一、效果预览1.在‘商品’菜单栏中添加‘仓库’的菜单组:

2.仓库列表:3.添加/编辑仓库二、添加菜单及创建数据表1.思路

1)因为后台的菜单是加密了,网上有通过用户自定义目录的方式来添加后台菜单,不过讲得不够详细,没试成功=.=

于是我直接修改后台菜单的php,文件路径为:coreinclude_v5adminSchema.php

使用 dezender工具将这个文件解密,这里顺带说一下解密,如图:

选择 “解密内核3”,经测试,其他两个都不能正常解密php文件。

解密后的 adminSchema.php 文件中,有一个 $menu[‘goods‘] 的数组,这个就是后台的‘商品’菜单组了。

然后我在’商品‘管理这一个菜单组后面添加’仓库管理‘,如下:

代码如下:

array( “type” =>“group”, “label” =>__( “仓库管理” ),

“items” =>array(

array(

“type” =>“menu”, 、

“label” =>__( “仓库列表” ),

“link” =>“index.php?ctl=goods/warehouse&act=index” ),

array(

“type” =>“menu”,

“label” =>__( “添加仓库” ),

“link” =>“index.php?ctl=goods/warehouse&act=addNew”)

)

)

其中 type=“group”表示这是一个菜单组,items 就是里面的子菜单。type=“menu”就是一个可以点击的菜单,如果添加target=“_blank”属性,就会以新开窗口的形式打开菜单链接。

2.准备数据库

代码如下:

DROP TABLE IF EXISTS `hx_warehouse`;

CREATE TABLE `hx_warehouse` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(200) NOT NULL,

`information` varchar(255) DEFAULT NULL,

`disabled` enum(‘true‘,‘false‘) CHARACTER SET utf8 DEFAULT ‘false‘,

`data0` varchar(255) DEFAULT NULL,

`data1` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;

这里并没有使用 shopex 里面的前缀。

三、添加Model层

shopex 也是使用MVC分层结构,其中模型层位于:core/model 和 core/model_v5 这两个文件夹,_v5 就是php的版本在5以上时使用。

这里的仓库模块隶属于商品,所以我在 core/model_v5/goods 下新建一个 mdl.warehouse.php,注意命名格式,不然无法被检索到这个model。

里面为 mdl_warehouse 类,继承于 shopObject。也可以继承于 modelFactory,因为shopObject 也是modelFactory的子类。

如果对于 模型层这里不是很了解,可以解密其他的 mdl 文件来看看他们的结构。

下面是仓库模型类:

代码如下:

/*********************/

/* */

/* Dezend for PHP5 */

/* NWS */

/*Nulled.WS */

/* */

/*********************/

include_once( “shopObject.php” );

class mdl_warehouse extends shopObject

{

public $idColumn = “id”;

public $adminCtl = “goods/brand”;

public $textColumn = “name,information,data0”;

public $defaultCols = “id,name,information,data0”;

public $tableName = “hx_warehouse”;

public function getHouseById($nLvId){

$aTemp = array( );

$aTemp = $this->db->select( “SELECT id,name,information,data0 FROM hx_warehouse WHERE id=”.$nLvId);

return $aTemp;

}

public function deleteById($id){

$sql = “delete from hx_warehouse where id=”.$id;

return $this->db->exec( $sql );

}

public function insertHouse($data){

$aRs = $this->db->query( “SELECT * FROM hx_warehouse WHERE id=0” );

$sSql = $this->db->getInsertSql( $aRs, $data );

return !$sSql || $this->db->query( $sSql );

}

public function updateHouse($aData){

$id = $aData[‘id‘];

$sql =“update hx_warehouse set name=‘”.$aData[‘name‘].“‘ , information=‘”.$aData[‘information‘].“‘”;

$sql.=“ , data0=‘”.$aData[‘data0‘].“‘ where id=”.$id;

return $this->db->query( $sql );

}

}

?>

四、添加控制层

后台的controller位于:coreadmincontroller

同样地,我们在 goods 这个目录下新建 ctl.warehouse.php

类中有两个属性:

代码如下:

var $workground = ‘goods‘;

var $object = ‘goods/warehouse‘;//模型定位

代码如下:

代码如下:

include_once(‘objectPage.php‘);

class ctl_warehouse extends objectPage {

var $workground = ‘goods‘;

var $object = ‘goods/warehouse‘;

public function index{

$houses = &$this->system->loadModel(‘goods/warehouse‘);

$list = $houses->getList();

$this->pagedata[‘list‘]= &$list;

$this->pagedata[‘house_count‘]=$houses->count();

$this->page(‘product/warehouse/map.html‘);

}

public function addNew(){

$this->page(‘product/warehouse/info.html‘);

}

public function edit($id){

$houses = &$this->system->loadModel(‘goods/warehouse‘);

$house = $houses->getHouseById($id);

$this->pagedata[‘house‘] = $house[0];

$this->page(‘product/warehouse/info.html‘);

}

public function deleteDo($id){

$this->begin(‘index.php?ctl=goods/warehouse&act=index‘);

$houses = &$this->system->loadModel(‘goods/warehouse‘);

if($houses->deleteById($id)){

$this->end(true,__(‘仓库删除成功‘));

}else{

$this->end(false,__(‘仓库删除失败‘));

}

}

public function addDo(){

if(empty($_POST[‘name‘])){

$this->splash(‘failed‘,‘index.php?ctl=goods/warehouse&act=index‘,__(‘请输入仓库名称‘));

exit;

}

$houses = &$this->system->loadModel(‘goods/warehouse‘);

if(empty($_POST[‘id‘])){

$info = “添加”;

$r = $houses->insertHouse($_POST);

}else{

$info = “修改”;

$r = $houses->updateHouse($_POST);

}

if($r)

$this->splash(‘success‘,‘index.php?ctl=goods/warehouse&act=index‘,__($info.‘仓库成功‘));

else

$this->splash(‘failed‘,‘index.php?ctl=goods/warehouse&act=index‘,__($info.‘仓库失败‘));

}

/**

* 设置商品仓库

* @param unknown_type $id

*/

public function count($id,$goodsName){

$houses = &$this->system->loadModel(‘goods/warehouse‘);

$list = $houses->getLogList($id);

$this->pagedata[‘gid‘] = $id;

$this->pagedata[‘houses‘] = $list;

$this->pagedata[‘goodsName‘] = $goodsName;

$this->singlepage(‘product/warehouse/count.html‘);

}

public function countDo($gid){

$this->begin(‘index.php?ctl=goods/product&act=index‘);

$houses = &$this->system->loadModel(‘goods/warehouse‘);

$list = $houses->getList();

foreach ($list as $key =>$h){

if(empty($_POST[‘count_‘.$h[‘id‘]]))

$size = 0;

else

$size = $_POST[‘count_‘.$h[‘id‘]];

$list[$key][‘size‘] = $size;

}

if($houses->updateHouseCount($gid, $list)){

$this->end(true,__(‘仓库库存修改成功,请关闭此窗口‘));

}else{

$this->end(false,__(‘仓库库存修改失败,请关闭此窗口‘));

}

}

}

?>

view 层位于:

coreadminview

仓库列表的html文件:

代码如下:

<{area inject=“.mainHead”}>

<{t}>添加仓库<{/t}>(共有<{$house_count}>个仓库)

<{t}>序号<{/t}>

<{t}>编辑<{/t}>

<{t}>删除<{/t}>

<{t}>仓库名称<{/t}>

<{t}>说明信息<{/t}>

<{t}>附件属性[可选]<{/t}>

<{/area}>

<{foreach from=$list item=item name=“item”}>

“ class=”clear_cat row“ cid=”<{$item.id}>“>

<{$item.id}>

‘)”>

<{img src=“images/bundle/editcate.gif” border=“0” alt=“编辑” }>

‘,event)“>

<{img src=”images/bundle/delecate.gif“ border=”0“ alt=”删除“}>

<{$item.name}>

<{if $item.information}><{$item.information}><{else}><{/if}>

<{$item.data0}>

<{/foreach}>

view 层 可以参考原有的,因为html文件是开源的哈,

五、总结

代码开发 篇3

这起侵权案的原告是成立于2001年的北京时空超越公司, 它是一家主要面向医疗领域、提供专业计算机管理软件产品的公司,被告则是成都的超然公司,成立于2006年1月。2007年,原告发现被告发行的“超然流通领域软件开发平台”、“超然通用数据传输平台 V6.0”等系列软件产品与原告的ST_CCERP V8软件严重雷同,甚至连内部的错别字都一样,只是一些界面和开发商不同而已,怀疑是软件代码被偷盗,遂将被告告上法庭。

软件侵权案件并不少见,但这起案件令人惊奇之处在于,明显是被告偷盗了原告的软件源代码,原告却无论如何不知道软件企业的核心资产——代码是如何丢失的。原告与被告之间没有任何关系,原告也没有以往离职的人在被告公司工作。

记者深入了解发现,作为中小软件开发商的时空超越公司,对软件代码的保护还几乎处于原始状态——开发出的代码存放在普通的笔记本电脑中,稍微不注意,就很容易被偷盗者通过各种端口拷走,这也是目前中国大多数中小软件技术开发商的通病——报着侥幸的心理,以哥们义气保护着软件。

源代码 篇4

穿越穿越是穿越时间和空间的简称。它是指某人因为某种原因,经过某个过程(也可以无原因无过程),从所在时空(A时空)穿越到另一时空(B时空)的事件。

剧情简介

在阿富汗执行任务的美国空军飞行员科特,史蒂文斯上尉(杰克.吉伦哈尔JakeGyllenhaal饰)突然惊醒,发生自己在一辆高速行驶的列车上,而他的身边坐着一个素不相识的女子克里斯蒂安(米歇尔·莫娜汉MichelleMonaghan饰)正在与自己讲话。科特不知自己为什么会在这辆车上,而且他发现自己居然是以另一个人的身份存在,正当他迷惑不解的时候,列车上忽然发生爆炸……

任务的美国空

代码开发 篇5

按照正常的想法,SharePoint的任务列表也是一个SPList,所以我们会这样尝试:

SPSite site = new SPSite(“windstyle”);

SPWeb web = site.OpenWeb;

web.AllowUnsafeUpdates = true;

SPList taskList = web.Lists[“任务”];

SPListItem task = taskList.Items[0];

task[“状态”] = “已完成”;

task[“Completed”] = true;

task.Update();

web.AllowUnsafeUpdates = false;

执行之后,发现任务确实已经被设置为已完成状态,但工作流却没有继续执行,也就是说,工作流的 OnTaskChanged活动并没有捕捉到任务被更改的事件。

其实SharePoint对象模型提供了更改工作流任务属性的方法,即SPWorkflowTask.AlterTask,此方法 不仅能够更改工作流任务的属性,还会将这一更改通知相应的工作流,使得相应的工作流能够继续执行。

此方法的用法也很简单:

SPSite site = new SPSite(“windstyle”);

SPWeb web = site.OpenWeb();

SPList doclib = web.Lists[“共享文档”];

SPListItem doc = doclib.Items[0];

SPWorkflowTaskCollection tasks = doc.Workflows[doc.Workflows.Count-1].Tasks; //找到具体的 SPWorkflowTask

Hashtable ht = new Hashtable();

ht.Add(SPBuiltInFieldId.Completed, true); //将任务设置为完成状态

ht.Add(SPBuiltInFieldId.TaskStatus, “已完成”);//将任务在任务列表中的显示状态设置为“已完成”

ht.Add(SPBuiltInFieldId.PercentComplete, 1); //将任务在任务列表中的完成百分比设置为“100%”

ht.Add(SPBuiltInFieldId.WorkflowOutcome, “Some output infomation”); //设置任务的输出消息,等 同于使用Visual Studio设计工作流时,CompleteWorkflow活动的TaskOutput属性

SPWorkflowTask.AlterTask(tasks[0], ht, true);

从上段代码可以看出,以编程的方式来完成任务并不困难,其中比较麻烦的是如何找到正确的工作流 任务,

因为SPListItem.Workflows可能包含不止一个SPWorkflow,这些 SPWorkflow可能源于同一个 SPWorkflowTemplate,也可能源于不同的SPWorkflowTemplate。而且还可能包含源于同一个 SPWorkflowTemplate的多个SPWorkflow,当然,我们知道,同一个工作流模板在同一个SPListItem上只能 启动一个工作流实例,所以这些SPWorkflow中只有一个的IsCompleted属性为true。

一行代码改变营销 篇6

这个故事中有两个重点,“一行代码”和“焕然一新”。

从HTML5梦工厂开始计划移动版到最后上线,只花了一个星期。而梦工厂的工程师惟一的工作就是在模板里引入了一行云适配提供的JS代码。工程师们惊喜地发现,虽然手机性能比电脑要差很多,但用手机打开加载了云适配代码的网站,却比原先没有加载额外代码的网站速度快了很多;同时,网站导航更清晰,还加强了互动内容。最重要的是,无论在iOS还是Android设备,无论屏幕的尺寸如何,移动网站都完全同步于PC网内容。

今年6月,中国手机网民数量已经飙涨到4.64亿。随着互联网的发展,人们的生活习惯、消费习惯都发生了巨大变化。对于企业来说,当互联网在大众生活中的影响力不断上升,一片全新的营销战场也正在开启。

网站移动化

智能移动设备的普及,越来越多的人使用手机、平板设备浏览网站、查阅资料、在线购物等,当互联网全面进入移动化的时候,网页似乎慢了一步。

在移动开发技术最初经历的WAP阶段,手机操作系统没有统一的平台和技术标准,网页通过WAP技术来简单浏览图片和文字。如今,林林总总的移动设备尺寸不一,网站在做移动版时,需要针对不同设备不停调试;HTML5让网页有更多特效和交互,例如GPS和摄像头等功能,这都成为手机浏览网页的新挑战。

移动网页的体验越来越差,社交媒体、搜索引擎等工具逐渐取代了网页,成为营销的主要工具。有数据显示,当用户用手机打开PC版网站时,打开字太小、速度慢、导航复杂等糟糕的手机浏览体验可能导致79%的用户会流失,这对企业来说是巨大的损失。所以,网站移动化迫切需要CMO们重新考量,如何通过一种新的方式,使PC网页在手机上达到最佳的显示效果,也使用户在不同的设备上体验超越PC的阅读体验。

针对这样的需求,一种新技术应运而生,提供这一技术的是美通云动(北京)科技有限公司,业内人更愿意以其技术来称呼它:云适配。

“云适配可以让企业花最少的成本,做最大化的营销,快速登录移动市场,打一场漂亮仗。”云适配创始人兼CEO陈本峰曾在互联网标准组织(W3C)香港实验室从事互联网标准研究,并发明了一项手机浏览技术的国际专利。云适配就是基于这一技术并结合最前沿的HTML5技术,可以帮助企业快速将桌面版网站适配到iPhone、安卓、Windows Phone、黑莓、塞班等各种移动设备终端的屏幕上。不仅显著地提高了企业网站的用户体验以及销售转化率,而且大幅度地节省了企业开发和维护移动网站的费用。

陈本峰介绍,首先,云适配专利技术一次性打包解决屏幕尺寸碎片化、屏幕分辨率不统一、浏览器分化三大移动终端适配问题;其次,移动网站网址不变,可实现一份费用双渠道推广,不用多花一分推广费就能快速拥有新用户;第三,移动网站将完全同步于PC网内容,自动实时更新。更为惊艳的是:网站还支持多渠道营销推广,无论搜索引擎、微博、微信还是App均能读取。

目前,微软亚太研发集团、联想、浪潮、高露洁等知名企业和美国Bellevue政府、中关村管委会、西安交警等政府机构,都已悄然通过云适配的“一行代码”开启了全新的移动之旅。

一行代码的神奇之处

用手机打开联想中国的网页,你会发现,页面延续了PC版的风格,但比PC版更清新、分类更明确、导航更直接。在点开一个产品的时候,产品图、价格和细节一览无遗,效果可以跟App界面媲美。而在使用云适配前,在手机上打开网页和PC版一模一样,文字和图像非常小,看不清楚。

这也是云适配的核心优势,“一行代码”。

很多人刚听到云适配技术时都觉得不可思议,只用一行代码就可以实现各种屏幕?其实,云适配并非只是一行固定的代码,一行代码只针对一个界面。这行代码背后是很复杂的设计,使用了很多云端技术和浏览器渲染技术。通过云适配服务将网页匹配到相应的设备上。

“作为一个服务业务,一行代码只是产品的表现形式,如果这一行代码脱离开它背后的云服务,代码就一点价值都没有了。”陈本峰表示。

对于曾在微软美国技术总部任职,并参与了IE8和IE9研究和发布的陈本峰来说,网页渲染机制是他的看家本事,因此在云适配研发时应用了很多浏览器渲染机制,并结合强大的云计算的能力,让网页能够有能力自己收缩、适配不同的移动终端。

经过云适配技术创建的移动网站,网址不变、打开迅速,在实时同步PC网站内容更新的同时,可以实现动态页面的功能,如注册、登录、搜索、电商支付等。而这些都源于公司的自主核心技术,是目前市场上其他网站移动化服务无法完成的。

对云适配来说,高端客户对网站设计以及用户体验的要求相对较高,对网站服务的稳定性、可靠性需求也比较强烈。例如联想就很重视在手机网站上如何同步实现高端的品牌形象和良好的用户体验,政府和大学则对安全稳定性要求较高。目前,云适配服务都依托在微软的Windows Azure平台上,对他们来说,微软云平台在安全性和稳定性上十分有保证;而中小企业更多希望能够快速创建同步于PC端的手机网站,如果自行开发需要好几个月时间,这时云适配就是最佳的解决方案,只需要一两周就解决了问题。

当可口可乐推出时,没有人知道“可乐”是什么,是可口可乐开创了“可乐”的概念。而陈本峰的愿望,是希望将“适配”的概念植入人们脑中。“在互联网大爆炸的年代,人人都想拥有一个高效的移动网站。云适配的目标是让云适配成为网站开发者的一个必备工具。也就是希望网站开发者能把自己的精力放在自己的核心业务上,而不用考虑网站适配的问题。”

对比

传统手机建站云适配

不利推广:传统手机网站使用新的网址,输入原网址不能自动适配,需要单独推广新网址,使推广成本加倍。便于推广:云适配使用原网址,通过搜索引擎、微博、微信等平台打开原网址会自动根据访客使用机型进行适配,非常有利于网络推广。

开发成本高:需要开发新的数据库接口,需要开发手机网页,需要开发手机网站的管理后台;开发成本低、周期短:云适配直接在原来PC网站基础上做适配,只需插入一行云适配代码,您就可以快速便捷地拥有手机网站;

兼容难度高:目前市面上已有3000多种智能手机,需要调试对各种不同机型屏幕、分辨率、浏览器的兼容性;兼容性好:云适配已经调试了针对市面上所有主流机型的兼容性,覆盖4亿手机网民、3000多种智能手机;

维护成本高:长期同时需要维护PC网站和手机网站的更新以及后台,需要维护对新手机机型屏幕的适配性;维护成本低:无需另外维护。PC 网页更新时,手机网页自动适配,云适配会定期增加对新手机机型的适配支持;

风险高:开发新的数据库接口和管理后台可能要对数据库做修改,可能导致目前PC网站无法正常工作;风险低:插入云适配代码不会对PC网站造成任何影响,若停止云适配服务,输入原网址会显示原PC网页;

扩展性差:将来支持平板、智能电视等更多设备,需要重新开发多个网站,需要庞大的支出。扩展性好:只需要云适配升级插入的代码,就可以立即支持更多设备屏幕, 简单快捷扩展。

软件代码重构的时机 篇7

根据文献[1]的定义, 软件代码重构是指软件完成代码编写和调试后, 对代码进行重新优化修订, 并进而完善原有的设计和工作。众所周知, 软件项目的开发最终都要落实到代码上。按照传统的软件开发的瀑布模型, 完成设计后, 就进行代码, 然后是测试与提交工作, 根本就不会出现代码的重构工作。但在当前的实际项目开发中人们普遍采用迭代模型, 设计、编码、测试工作有交叉和更迭。因此, 代码重构在整个项目过程中都是无时不在的。

2 软件代码重构的驱动力

软件代码为什么要重构?因为软件开发过程是动态的, 主要表现在软件需求不断变化, 人们很难一次将软件系统设计得很完美, 很有弹性, 以此来应对将来可能发生的任何改变, 如果这样, 那将付出极大的成本代价。另一方面, 软件技术本身在变化, 前不久完成的良好架构设计可能不适应新的技术要求。如果软件设计不够充分或架构不太理想, 一旦系统需要满足新的需求, 就需要对源代码进行修改, 而此时, 软件人员对代码修改有两种处理办法:一是通过打补丁方法, 这种方法对付很小的改动, 并且能确定这种改动今后不会再发生时是可以的, 但这种改动会带来很大的隐患, 一旦有新的更改, 过多地补丁将造成软件代码结构臃肿, 这种现象叫“代码坏味”, 一旦发生“代码坏味”现象, 随着系统需求的不断改变, “坏味”将一直延续, 陷入代码维护将越来越难的恶性循环中, 最后, 软代码将走向“腐烂”, 这将对软件质量构成极大的威胁;另一种应对软件更改的方法是在第一次进行更改时, 进一步预测今后的更改趋势, 不失时机的将系统的代码进行优化重构, 如果必要的话, 进一步对系统的设计进行新的评审和评估, 将系统设计也进行一次重构, 重构后的代码和设计将变得更加有弹性, 更好的适应新的变化。前一种解决方案是临时的, 被动的, 后一种解决方案是主动积极的, 既然代码更改不可避免, 在实际项目中, 人们应该采用积极的态度拥抱这种变化。

3 代码重构的时机

软件项目管理界通过对各类型企业的各类软件项目进行跟踪统计表明, 软件项目在规定的时间和给定的预算范围内, 完全满足用户需求的软件项目 (成功的软件项目) 所占的比例大约只有28%, 由此说明软件项目普遍胜算不大, 大量的软件项目超出预定的时间计划和预算, 这就是所谓的软件项目失控。Robert L.Glass在“软件工程的事实与谬误”一书中叙述了造成软件项目失控的两个最主要原因是糟糕的估算和不稳定的需求。对软件规模估算属于项目管理领域的问题, 在此不详细说明。不稳定的需求对软件项目成功威胁极大。需要加以控制, 无论是从管理上, 还是技术上的都需要正确的纳入到项目管理的各领域范畴中加以管理。对软件项目的需求变化, 人们应进行全面正确地认识。一方面, 需求的变化会为企业带来新的商机。另一方面, 频繁的需求变化将给开发方和使用方都造成新的不稳定因素, 对日常的商业处理造成影响, 因此需求变化不可避免, 但应对需求的变化限制在可控的范围内, 并通过技术手段进行规范管理。

软件项目开发过程的模型有很多种, 但主要可分为两大类:瀑布模型和迭代模型, 早期的软件项目多采用瀑布模型。但在软件开发过程中, 人们需要不断的修订和完善需求, 进而需要修订设计和代码实现, 瀑布模型已经难以适应新的项目开发要求, 迭代模型必然要取代传统的瀑布模型。在迭代模型中, 人们在完成一定的需求分析后门可以进行设计, 完成一定量的设计后, 进行编码和测试, 提供初步版本的软件, 经过试用和评估, 进行下一轮的分析、设计、编码实现、提交新的软件版本, 如此反复, 逐步迭代完成最后的开发工作, 迭代过程中如有需求改变, 应根据新的需求进行新的分析和设计。

迭代模型之所以受欢迎的一个很重要的原因便是管理学上普遍存在的帕累托法则, 即80/20定理。将这一法则用到软件项目上, 人们可以得到这样的结论:整个软件需求分析工作中, 前面80%的需求分析工作只占20%的时间, 最后的20%工作量将耗用80%需求分析时间, 类似的现象也存在于设计及编码过程中。如果等到需求分析完全结束后, 在进入设计阶段或者等到整个设计完成后再进行编码, 项目的时间进度将会超期, 也很容易造成分析瘫痪和设计瘫痪。由此可以看出, 软件项目“就应该”在不完整的需求分析或不完整的设计中过渡到下一阶段, 这也是软件开发中的敏捷方法[2]所提倡的。由此带来的问题是, 需求分析不完整, 设计质量就受影响, 设计不完整, 代码质量就有隐患。这些问题应通过管理和技术手段加以控制。事实上, 在设计阶段最开始的阶段, 就考虑到以后的所有变化, 是非常困难的, 有时甚至是不可能的。即使可能, 也将付出极大的成本, 造成设计过度复杂、不实用的现象, 软件项目开发过程中人们不应忘记帕累托法则。

一旦设计不十分完整, 就进入编码实现阶段, 确实会造成质量隐患, 一旦有新的变化, 代码更改就必须要进行, 此时应该分析和评估本次修改究竟采用何种模式, 当需求第一次改变将导致原有的设计发生腐化变味时, 抓住这次机会去改进设计。避免打补丁的方式。既然在实际的项目中, 设计就是不完整的, 代码就有改进的必要。另外, 在系统维护阶段, 人们也经常优化和修订代码, 同时也可能改进现有的设计。这就是软件代码为什么要不断重构的原因。

4 代码重构的实践方法

Martin Fowler在[1]中列举了一些代码坏味道的现象, 并分析了造成这种现象的一些原因。人们在软件项目开发过程中, 首先应避免出现这种现象, 保证软件代码的初始质量是良好的。一旦出现新的需求变化, 应通过企业变更控制委员会进行评审和批准。软件成熟度模型 (CMMI) 对此管理过程进行了严格的规定。在确定代码必须要修改后, 应根据可能出现的问题, 采用不同的方法及时进行重构。文献[1]中介绍了重构所采用的一般标准格式。在实际重构中, 应以详细文档形式记录下来, 便于项目的跟踪、测试及维护。

5 结语

软件代码重构是软件项目开发周期中必不可少的一个环节, 重构方法属于实践性很强的技术, 需要在实际项目中不断探索, 本文只是简要介绍软件代码重构的动机和时机, 具体的重构技术方法参见文献[1]。

参考文献

[1] (美) Martin Fowler.重构—改善既有代码设计[M].中国电力出版社, 2003.

[2] (美) Kent Beck.解析极限编程—拥抱变化[M].中国电力出版社, 2003.

代码复查的要点探讨 篇8

代码复查 (Code Review) , 又叫“代码审查”, 其基本思想是:在开发人员编写完自己的代码后, 由其他人来复查他写的代码, 从而有效地发现代码中存在的缺陷。

2软件项目普遍存在的问题

2.1 人员变动

一个维护时间稍长一点儿的软件项目, 人员变动是在所难免的。老员工被调动到其他项目去了, 由新员工来接替他们的工作。新员工在接替老员工进行代码维护, 甚至继续进行新的开发时, 由于对原有代码以及设计思路理解有偏差, 也会出现大量的低劣代码。

2.2 不规范的代码编写

在项目开发之初, 往往会制定一个代码编写的规范, 但在项目开发过程中, 许多成员往往会忽视这些代码规范而进行随意地编写。随意地代码编写会降低代码的可读性、可维护性和易变更性。为了保证代码的规范, 提高代码的质量, 解决之道, 就是“代码复查”。

3代码复查的关键点

代码复查的一个基本理论就是, 当我们越早发现代码存在的缺陷, 解决缺陷的代价就越低。代码复查按照以下方法进行审查。

3.1 代码风格

代码规范包含了整个项目组的代码风格。由于软件开发人员的设计习惯不同, 如果不统一代码风格, 一个项目中的代码将五花八门, 如变量和常量的命名、接口与实现类的注释、何时回车、怎样缩进等等。代码设计不规范, 必将为日后的维护与改进带来困难。我们通过代码复查, 一方面督促开发人员按照规范编写代码;另一方面也使开发人员自身形成良好的编程习惯。代码风格的审查, 由于内容比较单一, 我们常常可以通过一些代码复查的工具来自动完成, 提高复查的效率。

3.2 重大缺陷

在一些关于代码复查的文章中, 列出的单子上, 描述了代码复查应当着重注意的重大缺陷, 它包括:存在SQL注入、易受跨站点脚本攻击、缓存区溢出、托管代码等。重大缺陷审查是一个繁琐而细致的工作, 如果能编写或使用一些审查软件, 可以大大提高审查效率。

3.3 设计逻辑与思路的审查

这部分的审查是代码复查中最核心、最有价值的部分。代码风格与重大缺陷的审查, 虽然重要但简单而机械, 可以通过软件自动检查;而设计逻辑与思路的审查, 却是复杂而有深度的审查, 需要有一定理论深度和编码经验的人才能完成, 而且对经验不足的人尤其重要。对于这个问题, 较好的解决办法是, 通过代码复查, 让经验丰富者去指导经验缺乏者, 让团队整体素质得到提高。具体办法是:在缺乏经验者完成编码以后, 让经验丰富者去进行代码复查, 指出问题, 同时对其设计进行指导。这样的过程最初可能需要重构, 甚至重新编码。但经过这样的过程, 经验缺乏者将逐渐熟练, 迅速成长, 使整体团队素质提高。

4代码复查策略

4.1 专人进行代码复查

严格的代码复查策略, 一种方式是由专人进行代码复查。这种方式, 在人员组织形式上, 从软件开发人员中单独提出一些经验丰富的人, 组成一个代码复查小组, 专职对其他软件开发小组进行代码复查。这种方式, 代码复查小组以第三方的身份去复查各个项目组的代码, 可以保证复查的公平、公正, 但压力无疑是巨大的。

4.2 以一个项目开发小组为单元进行代码互查

以一个项目开发小组为单元进行代码互查, 即一个人的代码, 要被小组所有成员审查。这种方式付出的代价太大了。对这种方式的一种变通办法是将XP中的结对编程进行结合, 结对编程中的两个人相互进行代码互查。采用结对编程的项目组可以尝试这种方式, 目前国内采用结对编程的项目组实在太少了。上述两种代码复查的最大弊病就是, 审查者没有太多的责任去发现被审查者的问题, 发现了问题对审查者没有任何好处, 反倒与被审查者结怨;相反, 审查者没有发现问题也不会担负任何责任。这样的结果就导致了代码复查流于形式, 审查者草草审查, 问题依然存在。虽然代码复查优势明显, 但以上几种形式都不能为普通的软件开发团队所接受。

4.3 以小组为单位, 组长责任制的代码复查形式

代码复查是有代价的, 甚至有时的代价是巨大的。因此, 代码复查不宜频繁, 最好一份代码只审查一次。同时, 代码复查者应当对所审查的代码负有责任, 即能够大胆地审查并指出被审查者的问题, 并要求被审查者限期整改。与此同时, 被审查后的代码如果还出现缺陷, 审查者应当负有责任。只有满足了以上3个条件, 代码复查才能为我们所接受。毫无疑问, 项目开发小组的组长来担当此责任是最合适的。

一个项目开发组, 根据其功能的划分, 可以划分为多个小组, 每个小组负责一个子模块。在这样一个小组中, 小组长无疑是最有经验的开发人员, 由他去负责组织和指导其他成员是合适的。小组成员不宜太多, 往往是3~5人。小组长不要分配太多的开发任务, 他的主要工作是指导和监督小组其他成员进行开发, 将他从繁重的开发任务中解脱出来。他可以有更多的精力去指导其他成员的设计, 并且复查他们的代码。最终, 他要对小组所有成员的代码质量负责, 由项目经理或质量管理员进行抽查, 检验其整体情况。

参考文献

代码开发 篇9

4月9日, 2010年度山西省代码、条码工作会议在太原召开。参加会议的有各市局分管局长、所长、代码和条码中心主任、先进工作者及全省条代码中心部分工作人员。山西省质量技术监督局王国强副巡视员到会并做了重要讲话。

山西省质量技术监督局信息所武忠生所长做了题为《转变观念创新发展努力开拓代码、条码工作新局面》的工作报告。报告回顾总结了2009年度全省代码、条码工作, 分析了目前代码、条码工作所面临的机遇和存在的问题, 全面部署了2010年工作重点:要继续深入落实科学发展观, 以质量求生存, 夯实两码基础工作;以应用求发展, 拓展两码工作领域;以服务为目标, 树立良好行业形象;以管理为保障, 打造坚强、团结、善战的队伍。充分发挥各级条代码机构和队伍的作用, 上下一心, 力争在条代码信息管理、应用推广、科研与标准化等方面取得新的突破, 促进全省经济转型发展、安全发展、和谐发展。

会上, 王国强副巡视员提出两点要求:一、围绕大局, 扎实工作, 全面提升服务能力。紧紧围绕全省信息化、诚信体系建设工作, 充分发挥基础服务作用;紧紧围绕全省物流等行业发展, 充分发挥技术服务作用;紧紧围绕质监事业健康发展, 充分发挥示范服务作用。二、强化管理, 开拓创新, 力争两码工作再上一个新台阶。要加强人才培养, 完善用人机制, 加强相互交流、相互配合, 形成合力, 全省上下一盘棋, 使全省两码工作协调发展、科学发展。

写代码的程序“媛” 篇10

问:有什么借口让自己写出低质量的代码?

答:我是个女程序员,我是来活跃气氛的。

这个段子折射出了程序员这个行业的现状,即写代码这个圈子绝对是雄性的天下。

初入职场的王一娇,对段子里的调侃是口服而心不甘:“这么调侃挺好的,刚进公司是真怂啊,什么都不懂,总不能还牛哄哄的吧。但是也不能真成调节气氛的啦。等姐以后成了高级工程师就不用调侃了,还可以说——你以为我是靠着卖萌才走到今天的吗?”

冰冷的现实总是可以轻而易举地击碎一个新人的骄傲。入职之初,王一娇因为连基本的操作都不懂,常常拽着师傅问这问那。问得多了,就有点心灰意冷了,总感觉自己“每天存在的意义就是浪费师傅的时间”似的。

这份工作与王一娇想象中的情形出入很大。应聘时,她被告知的是当“高大上”的数據挖掘师,是“做模型”“做算法”的。但是,她的实际工作却是做一些无关痛痒而又枯燥无味的细枝末节,简单来说就是打标签,即把一个长长的地名切成好几段,分出哪个是核心词,再归类。人工一个个标注太慢了,写个程序一趟跑下来,上万个地名都能标注好,准确率还特别高。就这样,她的大部分工作都在不停地优化策略,在程序里改改这、改改那,然后再试一遍,看看准确率会不会有所提高。

虽然,单调而枯燥的“码农”生活,对于提高自身的业务能力不无裨益,但是,让王一娇焦虑的是,这些工作无益于自己学术能力的提升。但是,她又放不下这份工作。看看未来,也不是暗无天日:想想自己,总有一天,能靠实力,成为资深的构架师或者工程师。顿时,她就会热血沸腾,动力十足。

晚上9点,北京市西二旗,外围是钢化玻璃的互联网企业大厦透m白炽灯光,像穿越于夜色的巨大航船,部门里所有的人都还没有离开各自的格子间,当然也包括王一娇。过去,她每周给爷爷打两三个电话,现在一个月都难得打一个,每天面对着发不完的邮件、跑不完的程序。

繁重的工作,让王一娇的世界变得很小。书、电影、逛街让位给了对着电脑无穷无尽地编程。每天午饭的1小时和晚饭的1小时,是王一娇“出来放风的大型活动”。其实,吃饭花不了多长时间,但王一娇和同事特意挑选路远的菜馆,有时会走上两个街区,花上40分钟遛弯、聊天、讲段子、吐槽自己干的活儿不够“高大上”。说完就忘了,只记得那点短暂的时光很快乐。

时间长了,王一娇喜欢上了这份看似辛苦、实则单纯的工作。那些“IT男”大都不解风情,但却都简单而可爱,经常穿着拖鞋、大裤衩,上着T恤、格子衫来上班。而作为男人国里的异性,王一娇喜欢把鞋子脱掉,光着脚在办公室里“走两步”。

慢慢地,她的工作开始得到上司的认可,部门又招了两个实习生和她一起做,形成了一个三人项目小组,王一娇成了项目的负责人。

作为一名程序世界里的女“码农”,王一娇开始慢慢懂得:人生与编程一样,只要你的方法是对的,所有的问题都能找到解决的办法,而决定你成功与否的因素不是你的性别,而是你的用心程度。

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【代码开发】相关文章:

软件开发代码规范08-04

python开发的小球完全弹性碰撞游戏代码06-12

js代码改写成jq代码的方法07-06

部门代码07-19

控制代码06-09

自动代码08-06

网页代码08-13

代码测试08-25

代码规范示例04-23

代码检查记录04-26

上一篇:会计目标及其实现下一篇:未来重点