软件产品的报价

在一个开发者论坛中看到了这段话,感受很深,摘录到这里,希望以后需要对软件开发报价的时候有个参考。

来源:http://goo.gl/yMfu7

如果发包者认为某个事情“简单”,通常您需要谨慎了,因为收不到钱或者收到很少钱的可能性很大。
即便是一个里面只要求嵌入一个固定网址,打开就显示网页的这种程序,可能是最最简单的iPhone程序,都要有如下工作要做:

1 开发环境,因为你需要苹果电脑,装上Leopard或者雪豹,并下载2G多的SDK。这要求你会Mac OS的基本操作。

2 调试环境:你需要至少有一个iPod Touch。

3 你至少需要了解UIWebview的作用,否则你都不知道嵌入网页要用UIWebview还是用别的什么。

4 如果要用Interface Builder,你需要了解什么是IBOutlet,如果用代码创建,你需要了解View的层级,你需要了解如何使用AddSubview,你需要知道ViewController是干嘛用的。

5 你需要会查文档,你需要知道Delegate是干嘛的。

6 你需要了解NSURLRequest,以及NSString的基本功能和用法。

7 你需要会用Reachability,需要知道如何修改Info.plist来检测网络是否联通。你要知道怎么弹出AlertView。

8 你需要了解Default.png是干嘛用的,你需要了解小图标的尺寸,你需要了解大图标的尺寸,你需要了解如何修改Info.plist不显示高光。

9 如果让你帮着提交,你还要会用iTunes Connect。

简单吗?简单。不简单吗?不简单。

如果是这样一个只嵌入一个网页的程序,如果让我来做外包,最少我也要给人家报1-2万,觉得简单你自己做,想省多少钱都行。

Python精简版笔记

  1. 基础知识
    1. 变量没有类型。不需要提前声明
    2. 变量在赋值时出现,不再使用时则会消失
    3. 赋值使用 = 运算符完成,如:x = 42
      注:判断相等用 == 运算符完成
    4. 可以一次对多个变量赋值,如:x,y,z = 1,2,3 或者 a = b = 123 再或者 first, second = second, first
    5. 语句块只能通过缩进来表示
      注:没有Begin/End语句或者括号
    6. for循环等同于其它语言中的foreach
      注:可以使用range函数来实现基于数字索引的循环,如: for value in range(10): 换行符 缩进 print value
    7. 注释语言以 # 开头
    8. 使用input函数获取用户输入
    9. List 对象用中括号实现,可以自由嵌套,如:x = [[1,2,3],[y,z],[[[]]]]
    10. List 可以通过索引和分片来访问内部元素
      索引使用中括号,第一个元素的索引为0,如:names[1]
      分片可以指定起始和截至的索引,使用冒号分隔,如:names[5:8]
      注:截至索引是不包含在结果中的,如果缺少起始索引,默认从0开始;如果缺少截至索引,默认到结尾结束
      索引可以使用负数,如:names[-3]表示倒数第三个元素
    11. Dictionary 类似 List,但是内部元素是无序的,使用每个元素自己的键值做访问索引,如:names = {“name”:”张三”, “age”:30},可以访问names["name"]或者names["age"]来访问内部元素
    12. 所有的值都可以用作逻辑值,空值,如False、[]、0、“”和None表示逻辑假,其它为逻辑真
    13. 支持短路逻辑判断,如:print a or b
    14. 条件表达式的写法:print a if a else b
  2. 函数
    1. 使用关键字 def 定义函数,如:def square(x): 换行符 缩进 return x * x
    2. 使用关键字 return 返回函数值
    3. 对于 List 和 Dictionary 类型的参数,在函数体内修改参数值时影响外部变量值;其它类型参数不会改变
    4. 函数支持命名参数和参数默认值
    5. 支持函数引用,如:square是一个函数,queeble = square 换行符 缩进 print queeble(2)
  3. 对象
    1. 使用关键字 class 定义类,如:class person:
    2. 对象的方法调用方式:object.method(arg1, arg2)
    3. repr 函数可以将对象转换成它的字符串表达形式
    4. __init__为构造函数
    5. __str__定义对象作为字符串时的输出
    6. 继承语句:class SpamBasket(Basket):
    7. 允许多重继承
  4. 其它
    1. 模块是以.py为扩展名并包含Python代码的文本文件,导入语句为:import math 或者 from math import sqrt
    2. 所有模块内的代码都会在导入时运行,可以用 if __name__ == “__main__”: main() 来避免这个情况
    3. 如果是在*nix中创建可执行的脚本,可以使用:#!/usr/bin/env python
    4. 可以使用try/except语句处理异常
    5. pass 语句表示什么都不做
    6. enjoy source code

IE6下的几个CSS问题 [转载]

以下内容全部转载自 http://goo.gl/m4Pg,作为笔记记录一下,方便以后查看

ie7和firefox都较为严格的遵循w3c的标准, 不存在太大的兼容性问题. ie6存在很多bug, 我就此说说我的一些经验, 仅仅是经验,毫无科学依据, 尽量避免使用hack

其一, 去掉<?xml version=”1.0″ encoding=”utf-8″ ?>
只要存在这个玩意,ie6就不买帐
配合严格或者兼容的xhtml dtd

其二, 浮动双边距,以下任选
1.用padding
2.使margin和float方向不同
3.使用_margin

其三, 使用margin-top实现文本,表单元素,图片一行内垂直居中对齐.

其四, 多猪
由注释引起,小心使用注释
使用margin-right:-3px;定义最后的元素
PS: 这里有完整的测试多猪问题的过程 http://goo.gl/3Tlx

其五, 注释
不要在连续的float元素之间插入注释
建议在元素内部定义该元素的注释

其六, margin,padding的自动赋值问题
定义margin-left,就算margin-right定位0,有时候也会莫名奇妙的margin-right=margin-left
暂无解决办法,只有牺牲点美观换取兼容

其七, 默认div高,
定义font-size<=height