技术选型最怕的是什么?

大多数技术都存在选型问题,因为技术的发展已经让一件事情可以有多种解决方案,选型问题就自然出现。前段时间也有人说过语言选型,这里举的例子是在组件、框架、服务的范畴。其中有相通之处,各位可以自行领会。

选型最怕什么

怕失败么?那肯定的。你的服务崩溃,用户愤而投诉,客户电话打到老板那里,明天你要洗干净到办公室去一趟(笑…)。而所有对失败的无法容忍,最终都会变成一句话,为什么你要选这个型?

你总要回答这个问题,所以选型一怕随意,公鸡头母鸡头,选上哪头是哪头;二怕凭感觉,某某已经在用听起来还不错。你需要真正的思考,而且尽可能的全面。我下文会详细讲解,但这还不是最怕的。

最怕的是什么?看看本文开头引用的那句话,你体会一下。

嗯,最怕的是喷子。怕任意总结,如果再加上一些诋毁,一次选型失败足以让人心碎一万次。

失败不可怕,可怕的是没有总结,因为没有总结就没有提高。而比没有总结更可怕的是乱总结。
继续阅读“技术选型最怕的是什么?”

[转]关于MVC和MVVM的重新思考

被误解的 MVC

MVC 的历史

MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。它表示的是一种常见的客户端软件开发框架。
MVC 的概念最早出现在二十世纪八十年代的 施乐帕克 实验室中(对,就是那个发明图形用户界面和鼠标的实验室),当时施乐帕克为 Smalltalk 发明了这种软件设计模式。

现在,MVC 已经成为主流的客户端编程框架,在 iOS 开发中,系统为我们实现好了公共的视图类:UIView,和控制器类:UIViewController。大多数时候,我们都需要继承这些类来实现我们的程序逻辑,因此,我们几乎逃避不开 MVC 这种设计模式。

但是,几十年过去了,我们对于 MVC 这种设计模式真的用得好吗?其实不是的,MVC 这种分层方式虽然清楚,但是如果使用不当,很可能让大量代码都集中在 Controller 之中,让 MVC 模式变成了 Massive View Controller 模式。
继续阅读“[转]关于MVC和MVVM的重新思考”

《麦田里的守望者》读后感

img_0030

小说用大幅内容塑造了霍尔顿这么一个不爱学习,对什么事都看不惯,对什么人都感到厌恶,又满口脏话,一直想扮大人却又懦弱胆小的形象。一副典型的颓废叛逆青少年的样子,其内心却又是很苦闷,迷茫,敏感而孤独。
继续阅读“《麦田里的守望者》读后感”

[转]Bootstrap自适应导航栏

导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开。在 Bootstrap 导航栏的核心中,导航栏包括了站点名称和基本的导航定义样式。

默认的导航栏

  1. 向 <nav> 标签添加 class .navbar、.navbar-default。
  2. 向上面的元素添加 role=”navigation”,有助于增加可访问性。
  3. 向 <div> 元素添加一个标题 class .navbar-header,内部包含了带有 class navbar-brand 的 <a> 元素。这会让文本看起来更大一号。
  4. 为了向导航栏添加链接,只需要简单地添加带有 class .nav、.navbar-nav 的无序列表即可。 

继续阅读“[转]Bootstrap自适应导航栏”

python装饰器

python装饰器学习笔记

有一个函数say

def say():
   return "Hello"

现在需要得到下面的结果

'<b>Hello</b>'

一般可能会这样做

def makebold(string):
   return "<b>"+string+"</b>"
print makebold(say())

这样的嵌套用多了会让代码看起来很杂乱,并且在某些特别的情况下,如django的view中,我不能把view放到一个函数里来执行,这样的就可以使用装饰器来实现这个结果。
继续阅读“python装饰器”

​考核制度下的能人

A君、B君分别到A县、B县任县长。

A君励精图治,治理水利。
B君碌碌无为。

洪水至,A县无事,B县泽国。
B君月余亲躬灾区,与民同苦。

年终,B君获奖升职,A君无名。

考核制度下的能人。

当然,这是制度的不完善,考核内容片面的结果。不好的制度只会打击对工作的积极性,让人钻漏洞以获得好处,并形成一个不好的环境,恶性循环下去。

Django操作model更新时DateTimeField naive datetime错误问题

用Django做东西的时候,更新时间数据时报了错误,错误如下

RuntimeWarning: DateTimeField Customer.updated received a naive datetime (2016-06-19 07:18:21.118000) while time zone support is active

这是一个跟时区有关的问题,错误里说到datetime字段得到一个naive datetime,而不是支持time zone的active datetime
由于USE_TZ设置为True,Django会自动根据所设的时区对时间进行转换
继续阅读“Django操作model更新时DateTimeField naive datetime错误问题”

用PDFBox从PDF中提取图片

从PDF文件中提取图片,这个也用到了PDFBox。
将图片提取出来,PDF每一页中有多个图片时也可以提取出每个图片。

提取后发现有部分有带透明的图片提取后会有两个图片,一个有透明,一个背景为黑色,这个黑色背景的图片并不需要,要把它删掉。

于是将提取的图片分为两组,一组有透明的,一组没透明的。
再将透明的图片加上黑色背景,后与没透明的那组图片进行比较,相同的即是多余出来带黑色背景的图片,把它删掉,剩下的就是提取所要的图片了。
继续阅读“用PDFBox从PDF中提取图片”

PHP在FastCGI模式下htaccess文件设置php_value等配置无效

最近在部署一个网站时出了一个问题。
在本地运行没有问题的代码,上传到服务器后,打开直接就500了。

经过查找了解到服务器环境配置与本地的不同,本地php采用handle模式,而服务器采用fastcgi模式。
一般情况下应该是没有问题的,但这个网站用了htaccess文件进行php参数设置
继续阅读“PHP在FastCGI模式下htaccess文件设置php_value等配置无效”

顺利考过科目二

请了两天的假,连着周末两天的时间,开始备战科目二的考试。
连续3天时间,每天早上8点开始练车,中午休息1个多钟头,再继续练到下午6点结束回家。
这样比较集中的练习,使我在操控上有了很大的提高,不过还是会有出错,总是担心最后考试会出什么问题。
继续阅读“顺利考过科目二”