四点记录

没看过什么书,没什么工作经验,浅谈。 我想团队协作的基本原则是沟通顺利和互不影响各方的工作,如此一来就会面对工作同步或者滞后的问题。

刚刚开始没有经验的团队,一般流程是出设计稿、编码、测试,甚至是出设计稿、编码、出设计稿、改码、出设计稿……,永远不知道什么时候是测试时间,有一天老板心血来潮要体验产品,结果一堆bug,产品实现人员被骂得狗血淋头。 好像一开始就扯远了文不对题了,好,开始数点。 1.前后端如何配合 前后端的配合主要是数据获取和操作的问题。一般的做法的是各方自己写自己的,前端需求有了问题或者API调用不对头,后端改一下。很明显,这样并不好,会导致沟通成本增加(不要太简单的理解沟通成本)。 既然这样有问题,你可能会问那前后端在工作开始就确定API的调用接口不就好了?这样其实是没有什么用的,因为你还没有进行编码工作,你对这个产品并不了解或者细节了解的不深,双方的沟通是没有深度和不清晰的,即使一开始沟通了,后来还是再次沟通。

前端其实一开始不需要数据,可以自己模拟一些数据来实现界面设计的实现,这个时候后端编码人员也在同步进行API设计。

界面快要完成了,前端和后端编码人员进行API的核对和商讨,这个时候,编码人员对整体的架构都有清晰的认识,沟通就比较高效。

工作上也谁都不耽搁。 我这么说不是否定沟通,而是如何进行高效沟通。

2.面向对象编程如何设计你的类 在数据驱动的产品中,用户的所有的操作都是操作他的数据,一个类的设计也应该围绕数据操作来进行,如果有一个user表,那你的代码肯定也有一个user模型,围绕增删改查来组织你的代码,无论你的c层的逻辑如何,m层的代码实现也不会受影响。 这样的好处是m层和c层的代码耦合度很低,以后改起来很方便。以前写代码没有经验,写了很多难维护的代码,也不优雅。 3.作为一个编码人员的基本素养是什么 在目前,我只能简单的理解为你要对你的代码负责,负责包括写好注释,测试代码的功能和使用流程。

当然,我也问过很多人这个问题,他们都说不知道,这个问题了太难了。反过来想,有答案不见得是好事,追求答案的状态才是重要的。

一个编码人员在不同阶段对素养的理解和追求应该也是变化的。

只能说,我要做一个有职业素养的人。 4.2015的总结 上了半年班,可能是人生最后的寒暑假没有了,我心里很不情愿,我还没有做好心理准备,lol还没有上大师,心有不甘。

但是我是适应能力很强的人,所以没有上的大师以后再上。 说到最后都是感谢。如果有两个关键字的话,我想一个是拒绝一个是迎合,无论我得到的是拒绝还是迎合,我都学到很多东西,特别是那些我去实现和追求某些东西能开导我的道理,感谢你们。

毕业实习报告

终于要毕业了。第一次参加这么长的社会实习,也算不得“社会”二字,毕竟同事也是学校的老师和同学,但是算得上幸运。因为公司是老师和学生开的,大家在一个桌子上共事了许久。

读书十六载,用到“载”字,估计语气也沉重了许多。这次毕业不像小学毕业、初中毕业或者高中毕业,这次毕业很有可能意味着是我学生时代的终结。读了这么多年的书,终于要换一个环境,或者说终究要换一个环境,以后都不再踏入校园,心情多少回有点不一样。 还是说我的毕业实习的情况。 一:早点起床。 上班的日子,让我最印象深刻的是要勤奋。如果你今天8:30起床,那么你明天就会8:30之后起床,这样就会增大上班迟到的风险。同时,如果你早上8:30起床的前天晚上睡觉时间是12:00,那么你就更有可能在下次睡觉时间推迟到1:00,这样一来总有迟到的那一天。迟到了一天,如果一个人知道警醒,就会做出调整,如果这个人不是never learn,那么这一次调整就是最后一次调整。不过我重点要说的还是要早点起床,回到一日之计在于晨这句话,只有早点起床才会有更大的发挥空间。 比如说,早上起来可以看《道德经》,在实习期间,我不只一次想早起看《道德经》,但最终因为道德品质太差起床太晚导致读经失败。说到读经,有下面一段有意思的文字:

顾栋高先生复初,清康熙辛丑进士,性倨慢不合时,仅三载即归田。深于经学,自幼至老,未尝一日不读书,于五经皆有发明。

掌教淮阴时,夏月坚闭重门,解衣裸体,寸丝不挂,手执一卷,高读不辍。客至,自门隙窥之,大笑。

先生仓皇著衣而出。谈者传为笑柄云。

我也可以这样。 二:早点吃饭。

大家知道一到吃饭点,人们就会出公司吃饭,这个时候人会巨多,需要排队等候,排队往往会浪费更多时间,看起来因提早吃饭而破坏公司规矩,但是实际上是获得了更好的体验并且赢得了时间。 吃饭的哲学在于细嚼慢咽,而饭菜的哲学是体现食物原来的味道。最恨那种吃饭赶着去投胎,没吃之前你等他半天,吃完了他抹鼻子走人不等你的人;而饭菜,最恨是放了一堆调料,吃不出猪肉和鱼肉的区别。 吃饭有个难点,就是不知道在哪里吃?去这家店子吃了两个月,如果想要换一家反而自己觉得做了亏心事。做顾客做到这样良心发现,估计这家店的味道要变差了。 三:慢的哲学。 代码写的越慢质量越高。如果要得出这样的结论,可能要加上一些故事前缀:

我写代码多年,有一天夜里,我满身大汗醒来,梦到了阿兰·图灵和冯·若依曼对着我说:你写代码太快了,都是bug。

代码之道在于精益求精,而只有“慢”,才能让你写出能运行更久的代码。戏谑者称,代码之道在于慢,以后所有的编码人员都会对着电脑发呆,双手放在裆下,美其名曰:思考未来。 四:不可说的秘密。 我虽然因为起床太晚,没有完全看完《道德经》,所以只记得“道可道,非常道”,实习中的其它体会同样也是不可说的,说出来就没有意思了。 人完全有这样的一种情绪,很微妙,让自己快乐也让自己哀愁,这种情绪是不能袒露的,它的全部意义在于情绪的所有者。

五:想想未来。 哈,这种思考双手不用放在裆下。学生时代的结束,是打工仔时代的开始,这也许是我们每人美好生活的开始。

“顺丰”骗局

首先声明,这个事情和顺丰快递是没什么关系的,只是有不法分子借顺丰之名行骗。

中午吃了一碗酸豆角牛肉盖面(14块钱,太酸了,下次不点这个了)后,接到一个名为“顺丰快递”的电话,说我的一个快件被拒签了多次,快件物品是九张银行卡,属于违法物品,让我向公安局报案处理。我一小老百姓就图个安稳,平生就怕上医院和公安局。

一听,我就觉得这是个事,我要处理一下。

Continue reading ““顺丰”骗局”

.gitignore文件的作用

在团队开发中,不是所有的文件都需要共享的,比如数据库配置文件。你和别人在本地开发时,数据库密码可能会不一样,生产环境和测试环境的数据库密码也会不一样。这时.gitignore文件就可以帮你忽略这些更新,比如在.gitignore文件里加入这么一行:

database.config

来忽略你的数据库配置。 另外再值得一提的是,我们一般会配置一些常量,这时最好将数据库常量和其它常量分开,因为上面就提到数据库连接的问题了。

笔者当然经历过调试bug很久,最后发现是git pull下来后数据库常量值变了的苦逼情况。 来看看.gitignore文件的匹配模式是怎样的?

空白行不会匹配任何文件,所以一般为了可读性作为分隔符。

#开头表示注释一行。 连续的两个**号匹配一切文件夹,**/foo/bar匹配一切foo下的bar文件夹,abc/**匹配abc的一切文件和文件夹,但是这些匹配都是相对于当前的.gitignore文件位置来说的。 a/**/b匹配a/b, a/x/b, a/x/y/b。 /*.c会匹配cat-file.c,但是不会匹配mozilla-sha1/sha1.c

/* !/foo /foo/* !/foo/bar 这个感叹号的意思可以看做是不包括,它是对上一条规则的重新定义,比如/*忽略一切文件和文件夹,但是!/foo表示不忽略foo里面的文件和文件夹。

最后我们不要忘记在.git/info/exclude文件里也是添加忽略文件的。

关于印象笔记SDK的问题

我们知道在笔记行业有两大巨头,一个是印象笔记(Evernote),一个是OK记(OKMEMO)。

如果你不知道我所提到的两个产品,可以先去必应一下。

最近我所在的OK记团队在做印象笔记的同步,就是用户授权将ok记的笔记写入印象笔记,你可能会问,作为笔记行业的两个巨头,OK记为何服软将自己的数据转移到印象笔记?这样OK记还能和印象笔记并列吗?坦率地说这个问题很尖锐,你可能希望我回答出当OK记做不下去的时候,为了体现对用户的负责,再将用户的数据转移到印象笔记的答案。

这个有点尴尬。

闲话少说,还是说印象笔记的sdk。 在印象笔记的sdk里,有这样一些代码:

curl_setopt_array($handle, array(     CURLOPT_POST => true,     CURLOPT_URL => $this->getBaseUrl(‘oauth’),     CURLOPT_HTTPHEADER => $this->formatHeaders($headers),     CURLOPT_POSTFIELDS => http_build_query($arguments, ”, ‘&’),     CURLOPT_HEADER => true,     CURLOPT_RETURNTRANSFER => true ));

因为我本地是不支持SSL的,所以这个SDK从上周开始,断断续续的弄了好长时间都没有调试通过。一度认为印象笔记将要倒闭,SDK无人维护。

最后由鼎哥大神,加了一行代码:

CURLOPT_SSL_VERIFYPEER=> false

解决。

其实要解决这个问题,需要了解cURL的知识,及OAuth1.0和OAuth2.0的规范。

更重要的是不要怕看别人写的代码,明确编程方向。

第七章—分支

如果你想给你的项目创建多个版本怎么办呢,虽然创建多个版本的原因可能是因为你的项目突然产生了一个非常严重的bug、你参加的开源项目不能满足你的意愿、甚至你就想留一些早期的代码作为后期的怀念。

使用git里面的branch概念就可以做到这一点。 最重要的一点是,你在开发一个非常牛逼的项目。

但是一个牛逼的程序员是不能满足现有的牛逼的,所以开一个2.0分支去远征,让稳定的1.0版本继续使用。所以怎么能不去使用分支!

我们经常使用git pull origin master命令,作为新手可能没有去想这个master是什么意思,其实master就是主分支的意思,这就导致了你不能再创建一个叫master的分支除非你删除主分支。同时,这个命令也可以使用git pull 命令来替代,因为会默认获取master分支的代码。 程序员一定要懒,只有懒才能写出更好的代码。

如果你对一个程序员说,你真是太勤奋了,我想这不是最好的赞词。 推荐的命名法则是使用层级式的,比如bug/pr-1023,这样的好处是,git像shell脚本一样支持通配符查找。你可以使用git show-branch ‘bug/*’找到和bug相关的分支。 创建分支 git branch branch_name命令可以创建一个分支,处在最新的commit。

这个命令的完整形式是git branch branch_name [starting-commit],这意味着你可以从过往的位置开创新的分支。

imagesLoaded.js

这个是一个检测网页图片加载状况的js库,因为毕业设计的场景图片比较多,所以顺便用到了这个库,了解到这个作者还写了很多有意思的框架。

作者说,JavaScript is all like “You images done yet or what?”这是什么梗?望知道答案的同学分享一下。

为什么要用这个库,估计理由和上面的那个梗有很大关系。我为什么要用这个库,主要是为了让图片加载的过程中有一个有意思的loading,让等待的体验更好一点。

Parallax.js

简介

比较粗俗地讲,parallax.js是根据你的鼠标或者是移动设备的摇晃让元素做出反应的视差库。可以查看demo

简单使用

<ul id="scene"> 
<li class="layer" data-depth="0.00"><img src="layer1.png"></li>
<li class="layer" data-depth="0.20"><img src="layer2.png"></li>
<li class="layer" data-depth="0.40"><img src="layer3.png"></li>
<li class="layer" data-depth="0.60"><img src="layer4.png"></li>
<li class="layer" data-depth="0.80"><img src="layer5.png"></li>
<li class="layer" data-depth="1.00"><img src="layer6.png"></li>
</ul>

简单使用的代码的结构大概是这个样子,记得加名为layer的class,data-depth的推荐值为0至1,不过你要填入100或者-100,也没有什么关系,只是会动得特别快,像幽灵一样。

然后加上这样的js代码:

var scene = document.getElementById('scene'); 
var parallax = new Parallax(scene);

移动的速度是怎样确定的

有个公式:

xMotion = parentElement.width * (scalarX / 100) * layerDepth 
yMotion = parentElement.height * (scalarY / 100) * layerDepth

parentElement.width就是父元素的宽度,也就是id为scene的宽度,layerDepth就是设置的data-depth的值,scalarX和scalarY就是可以设置的参数,给你移动的距离有了可以设置的灵活性,数值越大,移动范围越大,默认值都是10.

其它配置

<ul id="scene"
  data-calibrate-x="false"
  data-calibrate-y="true"
  data-invert-x="false"
  data-invert-y="true"
  data-limit-x="false"
  data-limit-y="10"
  data-scalar-x="2"
  data-scalar-y="8"
  data-friction-x="0.2"
  data-friction-y="0.8"
  data-origin-x="0.0"
  data-origin-y="1.0">
  <li class="layer" data-depth="0.00"><img src="graphics/layer1.png"></li>
  <li class="layer" data-depth="0.20"><img src="graphics/layer2.png"></li>
  <li class="layer" data-depth="0.40"><img src="graphics/layer3.png"></li>
  <li class="layer" data-depth="0.60"><img src="graphics/layer4.png"></li>
  <li class="layer" data-depth="0.80"><img src="graphics/layer5.png"></li>
  <li class="layer" data-depth="1.00"><img src="graphics/layer6.png"></li>
</ul>

limit-x:限制x轴的移动距离。

friction-x:如果想模仿卡顿的效果,把这个值设置大一点。

origin-x:这个值一般设置为0.5就好,以鼠标为中心进行移动。

scalar-x:如果想要在x轴移动的快一点,将这个数值变大。

https://github.com/wagerfield/parallax

http://bs.zengxiaoluan.com/