2014年2月

首先,真觉得这是一件涨知识的事儿。

网站上我上传的路径没有中文路径,在IE下这张图片死活显示是一个X,但是我在chrome里面就可以正常打开。

这是让人百思不得其解。后来在一个技术群里面问了下,他们说是图片模式是CMYK的原因,可能浏览器不认这个颜色模式。以前总觉得颜色模式这种东西只有在印刷的时候才能体现出来,现在看来在网站上面也有很明显的体现。

后来把那张图片的颜色模式改成RGB以后,图片都正常显示了!

调用栏目下最新文章,很简单,action="postion"改为"lists",一定要加上catid

{pc:content action="lists" catid="72" num="8" order="id DESC"}
<UL>
{loop $data $r}
<LI><a href="{$r[url]}" target="_blank">{str_cut($r[title],36,'')}</a></LI>
{/loop}
</UL>{/pc}

 

Phpcms默认不支持调用全站最新文章,需要修改文件:\phpcms\modules\content\classes\content_tag.class.php,找到以下函数:

  1. /**
  2.       * 列表页标签
  3.       * @param $data
  4.       */
  5.      public function lists($data) {
  6.          $catid = intval($data['catid']);
  7.          if(!$this->set_modelid($catid)) return false;
  8.          if(isset($data['where'])) {
  9.              $sql = $data['where'];
  10.          } else {
  11.              $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';
  12.              if($this->category[$catid]['child']) {
  13.                  $catids_str = $this->category[$catid]['arrchildid'];
  14.                  $pos = strpos($catids_str,',')+1;
  15.                  $catids_str = substr($catids_str, $pos);
  16.                  $sql = "status=99 AND catid IN ($catids_str)".$thumb;
  17.              } else {
  18.                  $sql = "status=99 AND catid='$catid'".$thumb;
  19.              }
  20.          }
  21.          $order = $data['order'];
  22.          $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');
  23.          //调用副表的数据
  24.          if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {
  25.              $ids = array();
  26.              foreach ($return as $v) {
  27.                  if (isset($v['id']) && !emptyempty($v['id'])) {
  28.                      $ids[] = $v['id'];
  29.                  } else {
  30.                      continue;
  31.                  }
  32.              }
  33.              if (!emptyempty($ids)) {
  34.                  $this->db->table_name = $this->db->table_name.'_data';
  35.                  $ids = implode('\',\'', $ids);
  36.                  $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');
  37.                  if (!emptyempty($r)) {
  38.                      foreach ($r as $k=>$v) {
  39.                          if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);
  40.                      }
  41.                  }
  42.              }
  43.          }
  44.          return $return;
  45.      }

修改为:

  1. /**
  2.       * 列表页标签
  3.       * @param $data
  4.       */
  5.      public function lists($data) {
  6.          $catid = intval($data['catid']);
  7.          if(isset($data['where'])) {
  8.              $sql = $data['where'];
  9.          } else {
  10.              $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';
  11.              if(!emptyempty($catid)) {
  12.                  if(!$this->set_modelid($catid)) return false;
  13.                  if($this->category[$catid]['child']) {
  14.                      $catids_str = $this->category[$catid]['arrchildid'];
  15.                      $pos = strpos($catids_str,',')+1;
  16.                      $catids_str = substr($catids_str, $pos);
  17.                      $sql = "status=99 AND catid IN ($catids_str)".$thumb;
  18.                  } else {
  19.                      $sql = "status=99 AND catid='$catid'".$thumb;
  20.                  }
  21.              }
  22.              else {
  23.                  $sql = "status=99".$thumb;
  24.              }
  25.          }
  26.          $order = $data['order'];
  27.          $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');
  28.          //调用副表的数据
  29.          if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {
  30.              $ids = array();
  31.              foreach ($return as $v) {
  32.                  if (isset($v['id']) && !emptyempty($v['id'])) {
  33.                      $ids[] = $v['id'];
  34.                  } else {
  35.                      continue;
  36.                  }
  37.              }
  38.              if (!emptyempty($ids)) {
  39.                  $this->db->table_name = $this->db->table_name.'_data';
  40.                  $ids = implode('\',\'', $ids);
  41.                  $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');
  42.                  if (!emptyempty($r)) {
  43.                      foreach ($r as $k=>$v) {
  44.                          if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);
  45.                      }
  46.                  }
  47.              }
  48.          }
  49.          return $return;
  50.      }

修改代码后,即能调取全站最新文章。
调用方法:{pc:content action="lists" num="10" order="id DESC" cache="3600"}

我们来谈谈如何教新人编程。在各种编程语言的邮件群和用户小组中我经常看见一句谚语。每个人都知道这句话,这篇文章的标题就是它的后半部分。

 

授人以鱼不如授人以渔

当有人问有哪些学习编程的资源的时候,其他人经常会这么抱怨。Python群里有人这么说;PHP群里有人这么说,JavaScript群里有人这么说;几乎我加的每个群都有人这么说。大家的意思是说:新人应该自己去寻找学习资源,而不是去麻烦前辈。为什么这些菜鸟不能自行Google呢?搜索结果头条明显就是最好的学习资源嘛,因为头条被推荐的次数最多啊。

恭喜你,你教会别人如何把鱼线投到水里了,但是你还没教他哪种鱼可以吃,哪种鱼不可以吃呢。在编程教育的世界里,“大多数”的鱼都不能吃。

举个例子,当你搜索和PHP相关的东西时,搜索结果的首页总会出现W3Schools。这个网站看着很权威,有各种各样的教程,而且一搜就是它!很可惜这是条毒鱼。

我们来接着简单谈谈上一个问题:PHP,这个被人广为诟病的编程语言驱动着这世界上大多数网页。PHP绝对不是没有问题的。我今天不会在这篇文章里为它平反(我以前干过这事儿),但其实PHP最大的问题是如何学习它。它是一个非常流行的语言,它拼命地想让新手能够很容易地学会它。在20年里,它从一个简单的脚本语言发展成了连资产上十亿的大公司都用的强力工具。在成长过程中,它遭遇了足够多的各种困难,其中很多都和不良的设计方案有关。

现今的PHP有很多优点,但不幸的是这些优点对新手来说并不那么容易理解。它们是基于多年编程理论的高层概念。PHP仍然支持很多过去那些纯真年代时的基础理念,它们用来做夫妻店这种小型网站足够了,但是上升到大公司这种规模就不够用了。简而言之,它们不安全,效率低,甚至是“错的”。但同时它们容易理解,而且好使。

W3schools上教的基本都是“错”的方式,这意味着把它作为学习资源的新手一开始学的就是不好的编码规范,然后他们写了更多不好的PHP代码,然后导致更多的人只能学到错误的方法。这个症结不是针对W3Schools的 – 几乎所有的PHP教学资源都充斥着错误但是简单的解决问题的方法。这个症结如此流行以至于我一时想不起来任何一个能让我放心的PHP的教学资源。

如果你教一个人去“钓”学习资源,他会钓上来海里最糟糕的鱼,然后你还得来收拾残局。如果你递给他头几条鱼,然后给他讲去哪儿能钓到更多好鱼,那么你就成功了一半了。如果还能教他为什么不应该钓其他那些不好的鱼,那么他已经走在成为编程界里积极而有成效的一员的路上了。

我们需要多思苦索究竟应该如何对待正在学习的新手。就Python来说,给完全不会编程的新手,我推荐《Learn Python The Hard Way》,对已经会了一两门编程语言的人我推荐官方的python tutorial教程。这些简单的资源解释了如何正确使用这门语言。当他们有了这样的基础知识之后,我会指给他们到哪里去找更多更好的信息。

下面的场景是我希望看见的。编程界的人们能团结起来创造一些好的学习资源,而不是叫别人去鸟枪法一样地“google一下”。教人编程的过程中,让他们自己去找答案当然是很重要的,但在放他们下山之前,你也必须教他们究竟应该寻找什么样的资源。

所以让我们不要再教人钓到什么破鱼都吃了,这样也许我们就不需要再浪费那么多时间来修复那些写得不好的代码了。

原文地址:http://www.cnblogs.com/cookier/p/3531586.html

我02年上大学,就开始折腾程序,转眼到现在已经13年有余啦,从最开始连“程序”二个字是什么都不知道,到现在靠这东西养家糊口,确实在程序开发的路上走的挺远。尽管到现在,我都没有去考而且也没有拿到任何印有“程序员”三个字之类的证书,但我仍然认为我是个的程序员,因为我的程序一直在很多企业及政府单位的服务器上运行着,我的代码量也在那里摆着。
程序员是一个非常纠结的职业,为什么说纠结呢,是因为这代表着这个职业这些年来有太多的变化,如果你和我一样从02年开始就去了解这个职业,那你应该也会有所感触,这个职业应该经过过以下这几种词汇:“哇,厉害”,“高手”,“工资很高”,“高深”,“遥不可及”,“电脑高手”,“大部分戴眼镜”,……,“晚上一两点都没睡”,“满大街都是”,“程序猿”,“天天加班”,“码农”,“苦逼的程序猿”……还有很多,从网络里不同的程序员的声音里可以看出程序员这一职业这些年来的变化。
我10年自己开始创业,从开始的软件工作室做到现在的公司,创业三年了,一路走来,虽然艰辛,但也用自己的汗水、手指、伴随我5年之久的thinkpad笔记本,以及经常的加班熬夜,以及顶着无穷的压力,养活着自己,家人,养活着过去的和现在的员工,算下来也有一大帮人啦,人最欣慰的事情就是让一堆人能填饱肚子。。
从打工到创业身份的转变,也就是从员工到老板的身份的转变,我对每一种角色的感觉也是挺深的,当员工的时候,我们有许许多多的理由觉得公司哪里不对,老板哪里不好,也能够找出很多理由来说明,而自己做了老板之后,我也才觉得这就是一个哲学的问题,永远的矛盾,所以真的感触很多,在2014春节将至,自己有很多话,也有很多事需要总结和分析,主要是在程序开发上,想写给自己,还有以往的、现在的、将来的同事、以及从事程序开发工作的朋友,希望大家都可以相互学习,也进行自我思考,如果对你也有些帮助的话。

你既然选择了做一个程序员这样的职业,不管你在哪一个公司,那你还是要花些时间正视一下自己,好好定位一下自己。不妨从以下几个方面思考,也表达了我从一个发工资者的身份对领工资者的期望,也许对你会有帮助:

1、你的目标是什么?
你选择程序员是因为你对程序开发的热爱?还是因为觉得这个行业高薪?还是两者都有?或者是希望通过自己的不断努力攀爬到更高的职位或到更好的公司入职,如谷歌微软,然后名利双收?我在11月份也写过一篇日志(http://user.qzone.qq.com/6749158/blog/1383290220程序猿,是炼出来的),里面也说过“如果你选择走程序员道路的初衷只是仅仅因为找份工作,或者是找份高薪的工作,那你一定不会成为优秀的程序员,永远只能是苦逼的码农,而且也不会拿到高薪。。如果你在编程方面的学习仅限于在办公室上班时间的话,你离失去这份工作将不会太远。。。 ”确实是有感而发,当然不是绝对,但对大多数人而言,我认为是对的。像我这种从程序员、项目经理……但凡软件开发过来的每一个职位大都经历过来的人,我想我说的这话还是有些道理的吧。
你想在工作中拿到更多的钱,最好的办法不是跟老板谈条件或抱怨,或在工作中用怠工、懒散、惰性、不太听话、消极的态度等去暗示你不满意你的工资待遇,如果你曾经这样干过,只能说明你不够聪明,而且基本上受伤的都是你,你如果足够聪明,那你应该做的是想办法把事情做得更好,你做出的成绩得到认可,当然也你要选对老板,就是不黑心的老板,有很多人会说做得再好还不是那样?老板还不是一样的,确实,有很多老板确实是不管你做多好,就只给你发干工资的,但我不是。
只要老板不黑,即看到你的成绩或态度,会给你回馈的,同时公司项目不断,即企业的出路和明天都不是问题,那你就努力地去做好工作,做出成绩就可以。

2、什么是程序员?
你可以没有程序员证书,你甚至不用读大学,甚至没有上过小学都没关系,只要你从事编程开发工作,并且有自己的编程能力和思维,我都会承认,你是一个程序员,但我会有我的标准来评判。开发能力我会放在第二位,放在第一位的是你的从事程序员方面的人格素养及心态,因为这个远远比你的能力更重要。
开公司到现在最头痛的问题就是用人,招人不好招,用人也不好用,对于像我这样白手起家创业的人来说,这个问题显得非常突出。。事实上跟同行和起点差不多的老总朋友聊下来大家情况差不多,但分析下来其实也不是说工资多少与人的能力怎样的问题,有时候看到一个年轻的程序员们,能力嘛也没怎么,工资倒是要求很高,还动不动就可能要换工作,没有责任心,我很想不通,我很纳闷我们80初的程序员和80末90初的程序员在做事及责任心有如此大的差距,我记得当初刚刚工作的时候,老板安排项目下来,一方面自己要努力做好,一方面自己不太熟悉的地方会想办法自己晚上加班到两三点钟不停地研究,甚至到天亮的都有,还害怕老板看我做不出来怀疑我的能力,现在的年轻人倒好啦,凡事都是不说难,只是稍稍麻烦,就直接把问题推给你,把问题归给客户,那你算什么?我花钱请你来干什么?客户和老板两边都来求你?来看你脸色?每次协调下来就是诓着你把事情做完,只是我的大度和包容而已,其实你能写的代码,我也能写,而且可能分分钟就搞定,我能写的,你就不一定写出来哦。
在我的大脑里:一个优秀的程序员应该会经历的三个阶段是最想写,最能写和最会写,成长的道路也会伴随别人都睡去而你却精神抖擞研究你的程序的日子,或是白天,或是深夜,如果这些你都没经历,我一定不敢相信你是个优秀的程序员,当然你可能确实是,只是我不相信,我们是怎么磨练过来我知道,而且我不相信满大街都是天才和神一样的人物,而且我也不相信你比我聪明更多。。。
我对程序员,项目经理,技术总监的要求,在程序开发能力上,简单定义就是:
程序员:至少掌握一门开发语言,了解不同语法的操作原理,能够用语言编写符合业务需求的程序,了解接口与不同的数据库交互原理,语法的性能就是不同程序员的水平问题啦。
项目经理:你除了包含上述的程序员的能力外,你要有完整的独立项目开发经验,会站在客户的角度来验收项目,你要会写文档,会和人打交道,会抽烟会喝酒(当然不是必须),因为你要面对的是客户,同时要面对下面的组员,双面胶。所有人(包括我的员工)都可以对照此条,回想你和客户及你的经理沟通的时候,如果存在问题,那只能说明你还没具备项目经理的基本能力。
技术总监:除了掌握上面两种角色的技术外,你需要具备的技术则多得更多,因为不是所有人都能做到技术总监,因为有些人就是努力一辈子,也不一定能作技术总监,因为做程序也需要悟性和机遇,不是单单靠努力或时间积累。那简单来说,需要掌握的,就是掌握不下三五种语言吧,现在的主流开发语言你要会吧,起码有一到两门是你精通的,其他的话,你不说精通也可以达到普通程序员开发的能力吧,简单来说你不受语言限制,即只要客户的需求符合常规,你不管用什么语言都可以实现,拿到一门新的语言,你打开帮助文档或查阅相关的示例帮助或教程,就能够快速搭建环境,快速学习该语言体系并用之于项目开发,掌握相关要领吧,这时候你不一定要做具体的开发工作,但代码总要写的吧,起码框架应该是你来定,如果所有代码都不写,那我们直接喊你做老总算啦,不叫总监啦。除了开发言语,你要掌握系统安全,网络技术,硬件技术,网络访问与并发的问题,大数据量的处理办法(我不需要你有很好的办法而且你也不可能有,但我希望你知道原理和知道怎么去处理),还有人员分配与成本控制,时间预算等,同时你要掌握不同应用的前沿技术或不同应用的难点所在吧,这样才能给团队做一下引领,如C/S程序,B/S程序,或者手机应用的注意事项及经验所在。。

3、你的工作现状是什么?
你现在每天的工作现状是什么?是每天根据经理的需求来忙碌的编写?或者有时候可以偷偷懒?或者经常跟同事或领导讨论技术?讨论项目中的一些业务不合理性?或者有更好更科学的办法?你会因为项目进度的问题而担心吗?你会自己因为下班或周末因为没有把工作做完而自己在办公室写东西吗?如果这些你都没有,我觉得你问题很严重啦……如果你把安排的任务仅仅当作任务来完成,那你确实太需要再进步些啦。
有篇文章(一个很牛的老板骂人的话:http://user.qzone.qq.com/6749158/blog/1380444128),作为每个员工,我觉得好应该看他个十遍,“别把老板和上司当傻子,他装傻不等于真傻,不追究不代表他不记得,只是他给你机会去磨练,你的这些小伎俩他早就比你耍的专业几百倍了,不然他也不敢坐上这个位置。 ”你们每天花在QQ上,花在上网,花在群聊,花在和自己男女朋友聊天,花在网购,花在和其他人报怨公司等等等的时间,我分分钟都算得出的。。如果你真觉得你这么聪明干吗你不是老板而老板不是你员工呢?
你有工作汇报的习惯吗?你经常性提前完成任务吗?你经常和团队的同事聊天和探讨一些整合以及技术问题吗?你有在公司上班已经超过两月然后请过同事吃过一次饭或者哪怕是喝杯饮料吗?如果没有,我觉得你是有问题的。如果汇报都是上司问才汇报,你是有问题的。如果从未主动和同事讨论问题,你是有问题的。如果从未请同事吃过饭甚至一杯饮料的,我认为你是有问题的,而且我敢保证你花个几块钱请别人肯定会请回来。所有同事,我都请不低过3至5次吧,有几个请过我?当真我希望请我几块钱?作为老板起码要比你有钱多得多嘛。

4、你的能力和你现在的收入是否对等?
关于收入分配问题是全球性的问题,也是一个永远的矛盾,所以我我无法单方面去下定论,我用一个项目为例,大家一起来算吧。
某项目10万,上税正常成本5千,假设计划三个月,两个开发人员,工资5千,三个月如果正常开发完,那按下面这种方式谋算:
项目总额:10万
上税成本:5千
工资成本:3万
基础成本: (需求调研和跟客户打交道来回车费,电费,电话费,宽带费等等等等)1万
这样大概算下来好像老板赚5万5对不?
如果每个项目都这样理想化,我宁愿拿这5万5中的1万当作奖金,每人5千,那这三个月来,我们三个人的收分别为:
老板:4万5
员工:2万
在这样理想化的状态下算出来的结果,你觉得不公平么?老板投钱,老板能力比你强,同样时间内收入是你两倍很正常。
但是,往往真就三个月就把项目开发完么?往往导致项目拖延的,有开发团队的原因,有甲方本身需要等待的原因,这个都无法避免,不管是什么原因导致,晚一个月,那老板的损失的就不是俩个人一月的工资哦,晚两个月呢?晚三个月呢?公司每个月报税呢?
而且还要特别补充的是,这帐算的还不包括房租水电和宽带,还有老板自己的工资呢?员工工资5千,老板定一万不过分吧。而且如果你是开发员的其中之一,你确认10万的项目就只安排两个人你有把握能做好不?有信心不?敢打包票不?而且开公司的人都知道,这样简单的算帐就像个笑话一样,你听说过显性成本和隐性成本吗?一个项目做下来肯定不会赚那么多,而且还有后期的维护呢?维护的工资谁来出呀,不发你工资你来维护你肯不?
如果你有脑子,你肯定会算的
如果算通了,就换位思考一下,我们在抱怨的同时,想一下如果你是老板的话,再想想你所做的工作,以及工作中的那些态度,也许你会感恩其实老板对你已经很仁慈啦。。
想拿更高的薪水,就再多努力些吧。

所以就这一个问题进行总结就是:以上面项目为例,还是理想状态下的假设,如果三个月你正常做完并顺利交付,老板不发你5千的奖金,是老板的错,如果你两个月做完,不发你一万的奖金,是老板的错,如果你一个月做完,不发你两万的奖金,是老板的问题。如果前面这些情况都没出现,我觉得你没有任何资格报怨什么你的待遇不公平,要报怨也应该是老板来报怨,做得不好的,超过时间的,老板反过来喊你贴钱,你肯不?所以凡事要学会换位思考才行。。

5、咱们换位思考一下,如果你是老板。
自己思考吧,如果你是老板,只有你想不到的,也有你做不到的,因为你不是老板,大家现在开始想吧。。。

以下是我从个人角度说出的话:如果你是我员工,我希望你是一个好学,而且有一点智慧的人,我希望你有责任心,心中对项目的重视程序和我一样,尽力去做好,滴水之恩,定当涌泉相报,我肯定能做到这一点的。不管是以前的、还是现在的、所有用过的员工,我都可以拍着胸脯说,我发的工资,不管多少(任何人,不管你在我这里领过1千8,两千,两千二,两千五,三千,4千,4千五,五千,5千五,6千五,8千五,1万,1万+),我可以说没有对不起任何一人在我这里创造的价值,即便在我最困难的时候,我透支信用卡都要发工资。我是从程序员出身做创业的人,虽然不像大公司给你足够好的待遇,但我说过这里没有黑老板,你的工资多少由你创造的价值决定,到目前为止没有出现让大家闲着没有项目做的时候,只有不停地做,三个月的项目做个六七个月都没有做完的,你告诉我项目奖从何来,而且我把奖金都还全发了的呢,但凡你能做到工作中不用我说,工作没做完时,你自己加班或自己家都会偶尔熬夜去完成,把多出的三五个月的时间省下来,我不发你两个月的奖金你可以把我电话号码和姓名拿到大街小巷去贴,到处去骂都可以的。

如果你再做我员工,或即将做我员工,你一定要有个心态,尽力去做好吧,你的收入肯定是由你创造的价值决定,这里没有黑老板。而且你也要提升自己服务意识,一定要具备“客户虐我千百遍,我待客户如初恋”的心态和能耐,如果有一天我喊你改一些需求,不管是什么原因造成,哪怕是重复,还要让我看你脸色的话,你就可以滚蛋了。。。

2014年,我会做个很干脆的人,也意味着不惨杂个人情感在人员管理上, 该咋调整咋调整,该咋改变咋改变。。如果我不变,企业就只有死。