02 2012 档案

摘要:组织形态是指由组织中纵向的等级关系及其沟通关系,横向的分工协作关系及其沟通关系而形成的一种无形的、相对稳定的企业构架。它反映组织成员之间分工协作关系,体现了一种分工和协作框架。可以说,组织形态就是组织结构的“模式”。掌握组织结构模式,有助于构建通用的人员和组织结构模型 。本文介绍各种常见的组织形态。传统的组织结构模式最初为直线式,随着规模的不断扩大,逐步发展出直线职能式、事业部式;而随着外部环境的复杂化,在此基础上又扩展出矩阵式、多维结构等。 近年来随着企业外部环境的进一步复杂,企业间结成动态联盟,从而形成了“虚拟组织”。根据动态联盟成员之间关系的不同,虚拟组织的形态包括星型模式、互补模式和平 阅读全文
posted @ 2012-02-28 15:24 心内求法 阅读(13518) 评论(1) 推荐(1)
摘要:博客搬家,加上换办公区,Emacs的学习计划就耽搁了。可能是因为年纪大了,记性大不如以前,新学的很多Emacs快捷键/命令都记不住。所以要整理一个常用命令清单(与当初学习Vim一样),并且打印出来贴在电脑边。刚开始不可贪多,所以只整理了:Key Mapping,Important,Help,File, Cursor, Cut/Del/Copy/Paste, Buffer, Window, Undo/Redo, Search/Replace几个部分,控制在2页A4纸之内。附图如下:不知道谁能告诉我,博客园可以上传附件吗? 阅读全文
posted @ 2012-02-28 11:15 心内求法 阅读(5665) 评论(3) 推荐(0)
摘要:在python开源项目目录结构的基础上,进一步定义django的目录结构。根据django的特性,分成两部分:project结构和app结构。project结构这里定义的是python开源项目目录结构中的$PROJ_NAME目录内的内容,需要与python开源项目目录结构结合起来。PROJ_NAME/ __init__.py 这几个文件是django创建project所必须的,不做过多说明 manage.py settings.py urls.py apps/ 即使是“小”工程,也建议分成多个app,每个app足够简单,只解决某一个方面的问题 (注1) myapp1/ myapp2/ ext. 阅读全文
posted @ 2012-02-25 23:16 心内求法 阅读(17047) 评论(4) 推荐(0)
摘要:当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅:Zope,厚重的长枪。较早出现的武器形态。该武器非常之强悍,无坚不摧,无物不破。而且适合在军队中使用,排兵布阵集团作战效果更佳。然而要用好Zope要花上很长的时间,俗话说“月棍年刀一辈子枪”,可见其难度。TurboGears,威武的刀。快意江湖必备之物。其打造者熟知江湖规矩,颇有武林盟主之风,遇事通常拉帮结伙,分派任务,决计不会把所有事情都揽在自己身上。Django,飘逸的剑。非常内敛,据说使用该武器的高手通常是独行侠,他们的格言是:一剑在手,夫复何求?Web.py,小巧的匕首,刺 阅读全文
posted @ 2012-02-25 12:13 心内求法 阅读(15579) 评论(8) 推荐(8)
摘要:在企业IT整合的过程中,对于人员和组织机构信息的整合是一个重点。但是目前的解决方案中往往偏重于“系统用户”的整合,而对组织架构没有考虑或者考虑得很少,同时对于包含客户、合作伙伴等在内的虚拟组织往往支持不够。组织架构、岗位的设定等信息往往牵扯到权限,因此有必要探讨一种统一的人员和组织机构模型,既可以作为此类数据的统一数据源,也可以为之后的统一权限管理打下基础。 特别要注意的是,这里只是一个逻辑模型,要实现该模型还需要具体的设计。 阅读全文
posted @ 2012-02-24 16:07 心内求法 阅读(10239) 评论(18) 推荐(3)
摘要:每个真正的程序员,可能都会梦想着能够发布开源项目,让自己的代码被别人所用。 项目的目录结构应该遵循一定的规范。即使不是开源项目。 阅读全文
posted @ 2012-02-24 13:02 心内求法 阅读(27062) 评论(3) 推荐(4)
摘要:an open source project homepage 阅读全文
posted @ 2012-02-24 10:03 心内求法 阅读(2394) 评论(4) 推荐(0)
摘要:多线程编程必须理解的一些基本概念,适用于所有编程语言。内容: 并发式编程 多任务操作系统 多线程vs多进程 线程安全 线程的生命周期 线程的类型 阅读全文
posted @ 2012-02-23 20:11 心内求法 阅读(13482) 评论(3) 推荐(7)
摘要:“科学”一词,指发现、积累并公认的普遍真理或普遍定理的运用,已系统化和公式化了的知识。经过四百年的发展,科学取得了辉煌的成就。今天,任何国家,任何民族,任何信仰的人,都无异议地在学校里接受科学教育,以致于我们认为科学能够解决一切问题,并且把“是否科学”作为检验事物正确的标准。 其实“科学”是人们认识事物的一种方法,即通过实证的方式,由实践对理论进行检验。科学的方法不受主观意志的影响,我们暂且称其为“心外求法”。这种实证的方法具有普遍性、可靠性和实践性。 在科学产生以前,人类的知识来自宗教。通常僧侣和祭司是学识最渊博的智者。那是人们获取智慧的方式是通过渐修、顿悟等方式,通过内心的感悟来得到真理. 阅读全文
posted @ 2012-02-21 15:21 心内求法 阅读(2009) 评论(5) 推荐(3)
摘要:我终于明白,为什么CSDN关掉了metaweblog API,限制了对界面的定制,不能嵌入google analytics,甚至不允许以站外图片的方式嵌入一个计数器。我只能说,我不认同这种对商业价值的看重,对用户的态度,以及对竞争对手的评价。逃离CSDN,为了程序员心中的freedom!尽管,用windows的人比用linux的人多。 阅读全文
posted @ 2012-02-21 14:25 心内求法 阅读(29822) 评论(170) 推荐(54)
摘要:前面的内容已经基本上涵盖了Django开发的主要方面,我们从需求和界面设计出发,创建模型和修改模型,并通过scaffold作为开发的起点;在scaffold的基础上重新定制模板,并且通过Model类和Form类对用户输入的数据进行校验。我们也涉及到了单元测试。为了提高开发用户界面的效率,更好地实现模板,我们还讨论了对静态资源(css,js,image等)的管理,并通过模板继承的方式实现了整个站点的统一布局。作为web应用必不可少的部分,我们还演示了如何使用会话(session)。最后,我们还在这些基础上增加了RESTful web service,将jquery集成到Django,并实现了aj 阅读全文
posted @ 2012-02-19 23:03 心内求法 阅读(6975) 评论(4) 推荐(0)
摘要:继续上一节未完成的任务,现在让我们来通过ajax请求后台服务。当然首选要实现后台服务。关于“加入购物车”,我们需要的服务是这样定义的:[plain] view plaincopyurl:http://localhost:8000/depotapp/API/cart/items/post post数据:product=product_id 处理过程:根据product_id,将product加入购物车 返回:购物车中的所有条目 这个API的定义似乎不那么RESTful,但是暂且不去管它。实现这个服务需要为RESTful web service(depotapp/views.py中的RESTfor 阅读全文
posted @ 2012-02-19 23:02 心内求法 阅读(17146) 评论(7) 推荐(1)
摘要:曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style)。所以我们的选择变得很简单:前端ajax访问后端的RESTful web service对资源进行操作。 Django中有一些可选的REST framework,比如django-piston,django-tasypie。 但是我和google(呵呵,不好意思)推荐这个:Django REST framework。因为这个框架的几个特点: 1. 名字好!直入主题 2. 因为名字好,所以google搜索(Django REST/ Django RESTful)排名 阅读全文
posted @ 2012-02-19 23:00 心内求法 阅读(38687) 评论(2) 推荐(1)
摘要:上一节我们实现了一个”能看不能用“的购物车,现在我们来使用这个购物车。首先是产品目录界面中的”加入购物车“链接,我们希望点击这个按钮后,在购物车中添加该产品(添加的规则是如果购物车中已经有该产品就增加... 阅读全文
posted @ 2012-02-19 22:58 心内求法 阅读(6749) 评论(1) 推荐(1)
摘要:现在,我们有了一个产品目录界面,用户如果看到满意的产品,就可以将其放入购物车。下面就让我们来实现购物车的功能。首先要做一下简单的分析和设计。购物车应该显示一系列产品的清单,其中列出了买方选中的产品。... 阅读全文
posted @ 2012-02-19 22:53 心内求法 阅读(10666) 评论(4) 推荐(0)
摘要:针对上一节的新需求,界面设计师还为我们设计了一个新的界面,不仅仅是目录页,还包含了站点的整体风格,如下图:感谢界面设计师为我们提供的“又黑又硬”的工具条,这个看起来真的很酷。下面,让我们来享用她的工作... 阅读全文
posted @ 2012-02-19 22:48 心内求法 阅读(6663) 评论(2) 推荐(0)
摘要:我们已经实现了卖方的产品维护界面,根据最初的需求,还要为买方实现一个目录页:买方通过这个界面浏览产品并可以加入购物车。通过进一步需求调研,了解到产品有一个“上架时间”,在这个时间之后的产品才能被买方看... 阅读全文
posted @ 2012-02-19 22:44 心内求法 阅读(9090) 评论(9) 推荐(0)
摘要:尽早进行单元测试(UnitTest)是比较好的做法,极端的情况甚至强调“测试先行”。现在我们已经有了第一个model类和Form类,是时候开始写测试代码了。Django支持python的单元测试(un... 阅读全文
posted @ 2012-02-19 22:42 心内求法 阅读(10139) 评论(4) 推荐(0)
摘要:让我们完成上一节中的任务:1.验证price>0:需要在Form中验证; 2. 验证title唯一:在Model中验证; 3. 验证image_url的扩展名:在Form中验证,还可以顺便在Model... 阅读全文
posted @ 2012-02-19 22:39 心内求法 阅读(4023) 评论(4) 推荐(0)
摘要:rails有一个”简洁、完美的验证机制,无比强大的表达式和验证框架“。在《Agile Web Development with Rails 4th》一书的7.1节向我们展示了如何验证Product:c... 阅读全文
posted @ 2012-02-19 22:33 心内求法 阅读(4158) 评论(0) 推荐(0)
摘要:dudu,这个系列的第8——18篇搬家未成功,只好手工贴过来了!现在我们有了一个使用json格式的RESTful API,可以实现这样的功能了:为了避免在产品列表和购物车之间来回切换,需要在产品列表界面显示购物车,并且通过ajax的方式不刷新界面就更新购物车的显示内容。ajax框架的选择关于ajax框架的选择,看图不说话: 我不管你选的是什么,反正我是选了jquery。 在Django中使用jquery这个实在是简单得不能在简单了,在depot/static下面创建js文件夹,放入jquery库,如jquery-1.7.1.min.js。然后在模板界面中引入即可。我们假定所有的界面都使用jq. 阅读全文
posted @ 2012-02-19 22:00 心内求法 阅读(19997) 评论(4) 推荐(3)
摘要:从模型开始开发似乎是个好主意。一方面模型是整个应用的核心,实现了应用的业务数据和对业务数据进行操作的约束,而视图和模板只是向用户提供操作和展现这些数据的界面;另一方面模型相对于系统的其他部分更加稳定,将模型先确定下来有助于系统其他部分的实现。DDD(领域驱动设计)更进一步将模型中的核心对象抽取出来作为“领域模型”。从Depot应用来看,产品(Product) 应该是模型中的核心对象之一。就让我们先来实现Product模型。创建app我们可以从《Django第一步》中实现的工程开始。在继续之前,还要进行一些准备工作。 Django约定必须要创建app才能使用模型。这也是Django的哲学之一: 阅读全文
posted @ 2012-02-18 23:59 心内求法 阅读(12705) 评论(4) 推荐(2)
摘要:前面学习了Emacs的基本编辑功能。为了让编辑更有效率,还需要了解: 窗口管理 缓冲区管理 搜索和替换 批量处理 阅读全文
posted @ 2012-02-18 21:48 心内求法 阅读(5574) 评论(0) 推荐(0)
摘要:文件操作 光标定位 输入删除 复制粘贴 撤销重做 阅读全文
posted @ 2012-02-18 09:31 心内求法 阅读(7533) 评论(0) 推荐(0)
摘要:在《Django实战》系列中,简单的提到了Django + jquery 实现ajax,但总感觉“意犹未尽”,很多事情都没有说清楚。所以打算专门讨论一下这个话题。ajax可以用在web应用的方方面面,所以用“什锦小菜”的方式,用几个单独的例子来说明常见的使用情况。如果你一定要问为什么是jquery而不是别的什么ajax框架,请参考这里。根据Django官方的说法,Django没有提供内置的ajax支持,而仅仅提供了将python对象序列化(seriallize)成JSON和XML的工具,并推荐了一个库和工具。但我更倾向于使用原生的jquery,自己集成到Django中,这并不难,而且一切对你来 阅读全文
posted @ 2012-02-18 00:28 心内求法 阅读(8620) 评论(0) 推荐(1)
摘要:GNU的软件大多有丰富的帮助系统,学习GNU的软件时,首先学习如何使用其帮助系统,往往事半功倍。Emacs的帮助文档很多,并大部分都在C-h开头的组合键中。首先是C-h ?,关于帮助系统的“帮助”。改命令会打开一个新的Frame,如下图:从该文档中摘录常用的帮助功能如下:快捷键命令说明C-h ?关于帮助系统的帮助,可以通过SPC和DEL键滚动,通过ESC退出C-h tM-x help-with-tutorial进入 《Emacs 快速指南》C-h rM-x info-emacs-manualEmacs使用手册C-h iM-x info《Emacs说明》C-h aM-x apropos-comm 阅读全文
posted @ 2012-02-16 13:07 心内求法 阅读(6594) 评论(0) 推荐(1)
摘要:内容提要1.Emacs是什么2. Emacs能做什么3. Emacs的界面4.基本概念--命令5. 基本概念--快捷键6. 基本概念--模式Emacs学习笔记2: 初识Emacs1.Emacs是什么其实很难给Emacs下一个定义。正统的说法也许是"Emacs即Editor MACroS(宏编辑器),是一种文本编辑器"。最初人们认为Emacs是一个编辑器(Editor),与Vim一起并称为两大神器,据说Vim是编辑器之神而Emacs是神之编辑器,又据说世界上的程序员分三种,一种使用Emacs,一种使用vim,剩余的是其它。也有人认为Emacs是一个架构在编辑器上的集成环境,除 阅读全文
posted @ 2012-02-15 22:49 心内求法 阅读(13362) 评论(3) 推荐(6)
摘要:已经用了5年的vim,最近突然想试试Emacs。不要问我为什么,我自己也不是很清楚:),也许只是一时心血来潮,也许是对vim实在没有感觉,也许... 但不管怎么说,要想学习好一样东西,一定要有一个计划,并能够有效执行。参考了网上的众多资源,结合自己的实际情况,拟定了一个《Emacs初学者学习计划》 在开始学习之前,首先要确定一个原则就是: 随时用,尽量用。就好像当年学linux,彻底卸载了windows,斩断了退路,才能去解决遇到的一个个问题。学习Emacs应该也是一样,而且Emacs能做的事情很多,写文档,写代码,日程安排,收发邮件,浏览网页...在这些场景下都坚持使用,想必能收到很好的效. 阅读全文
posted @ 2012-02-15 13:14 心内求法 阅读(10135) 评论(1) 推荐(5)
摘要:Django的Model使用ORM来操作数据库,通常我们只需关注Model类本身,Django自己会处理到数据库的映射。但凡事总有例外,有时需要改变默认的映射行为。Django对此也提供了丰富的支持。1. 自定义字段名 默认的字段名与属性名相同,可以通过字段的db_column属性自定义,如 where = models.CharField(max_length=400, db_column='place')2. 自定义索引除了ID字段,其他字段默认不建立索引,可以通过字段的db_index属性自定义,如 publish_date= models.DateField(db_in 阅读全文
posted @ 2012-02-14 01:00 心内求法 阅读(5443) 评论(0) 推荐(0)
摘要:Django的Admin提供了强大的功能,很多人可能会基于Admin开发自己的应用。在Admin默认的管理界面中,Model类的显示名称可以通过国际化的方法来改变,其实app的名称也可以自己指定,你甚至可将同一个应用下的Model类分配到不同的app中去分组,如下图:以《Django实战》中的Model类为例,可以这样指定Order类显示的应用名称:class Order(models.Model): name = models.CharField(max_length=50) address = models.TextField() email = models.Email... 阅读全文
posted @ 2012-02-13 18:18 心内求法 阅读(11997) 评论(0) 推荐(0)
摘要:本文最新版已更新至:http://thinkinside.tk/2012/02/12/zen_of_python.htmlThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Speci 阅读全文
posted @ 2012-02-12 17:56 心内求法 阅读(518) 评论(0) 推荐(0)
摘要:《Rootless Root:The Unix Koans of Master Foo》, 《Unix编程艺术》一书的附录D,原作者不详导言《无根的根》这部心传的收录集在西山纯净的空气中得以保存数十年,它的发现在学术圈中掀起轩然大波。这些出土文稿是否为早期 Unix 教义的新发现?抑或仅是后世高明的赝品?那些半神秘的人物,像尊者 Thompson、Ritchie 和 Mcllroy,是否以此发展出我们所处时代的教义?答案无法确知。各方争论均被收入那本经典之作,《编程之道》(The Tao of Programming)。但是《无根的根》在论调风格上都与那本 James 松散诗化的逸闻译作有显. 阅读全文
posted @ 2012-02-12 17:45 心内求法 阅读(1669) 评论(0) 推荐(0)
摘要:内容提要 1. 回顾Django的视图函数(view function) 2. 在视图函数中使用模板 3. 简化视图函数的两个工具 4. 使用通用视图函数 5. Django提供的通用视图 阅读全文
posted @ 2012-02-12 00:57 心内求法 阅读(14045) 评论(3) 推荐(2)
摘要:我们已经实现了登录和注销功能,但是它还没有起作用。因为匿名用户还是可以通过直接输入url:http://localhost:8000/depotapp/product/list/ 访问到产品管理界面。这就好像你在门上加了把锁,却没有把窗户关上一样。所以我们还需要进行访问控制。我们这里实现最简单的控制,非登录用户禁止访问产品管理界面。在Django里面,只需要在相应的视图函数前面增加@login_required修饰符即可:from django.contrib.auth.decorators import login_required... ...@login_requireddef list 阅读全文
posted @ 2012-02-10 15:50 心内求法 阅读(11325) 评论(2) 推荐(1)
摘要:前一节我们实现了用户管理,本节对用户登录和登出进行处理。由于我们已经引入了django.contrib.auth应用,用户的登录和登出处理变得非常简单。我们已经可以在view函数中判断用户是否已经登录以及获取用户信息:if request.user.is_authenticated(): #判断用户是否已登录 user = request.user; #获取已登录的用户else: user = request.user; #非登录用户将返回AnonymousUser对象Django的User对象提供了一系列的属性和方法,其中pass... 阅读全文
posted @ 2012-02-10 10:29 心内求法 阅读(12432) 评论(1) 推荐(1)
摘要:前年写的,居然一直躺在草稿箱里。今天把它放出来。。。GTD(Getting Things Done) 是一种将繁重超负荷的工作生活方式变成无压力高效的时间管理系统(David Allen, 《Getting Things Done-The Art of Stress-Free Productivity》。其核心是把所有要做的事情都记录下来,然后整理组织,并逐一执行。也就是收集、整理、组织、回顾、执行五个过程,如下图:收集:把接收到的各种事件集中在一起;整理:对事件做出快速判断,决定直接抛弃、留存归档或是产生一个任务;组织:根据任务的不同属性将其归入不同的工作清单;回顾:定期检查工作清单,如果条 阅读全文
posted @ 2012-02-09 23:53 心内求法 阅读(3497) 评论(0) 推荐(0)
摘要:到目前为止,我们开发的所有功能都是匿名访问的,这显然不够安全。通常我们会要求注册的用户通过用户名和密码登录,只有登录后的用户才可以管理产品。套用专业的说法就是:第一步是认证,验证用户是否是他所宣称的那个人;第二步是授权,验证用户是否拥有执行某种操作的权限。Django已经提供了一个django.contrib.auth应用来处理登录、登出和权限验证,同时还提供了django.contrib.admin应用可以进行用户管理(admin应用还有很多其他的功能)。所以我们只需要将这些app插入到我们的站点,就可以实现登录和用户管理的大部分功能。本节先介绍如何进行用户管理。我们前面已经介绍过在Djan 阅读全文
posted @ 2012-02-09 23:44 心内求法 阅读(6441) 评论(4) 推荐(0)
摘要:在上一节我们实现了针对某个产品的订单订阅功能。但是我们可能需要直接在站点上查询所有的订单。显然,随着时间的增长订单会越来越多,所以分页(Pagination)是个好办法:每次只显示一部分订单。分页是Web应用常用的手法,Django提供了一个分页器类Paginator(django.core.paginator.Paginator),可以很容易的实现分页的功能。该类有两个构造参数,一个是数据的集合,另一个是每页放多少条数据。Paginator的基本使用如下:$python manage.py shell>>> from django.core.paginator import 阅读全文
posted @ 2012-02-09 20:33 心内求法 阅读(17309) 评论(2) 推荐(0)
摘要:在Zachman Framework之后,很多组织开始了对企业架构的研究。其中 Steven H. Spewak在1998年定义了企业架构计划(Enterprise Architect Planning,EAP)。Spewak将EAP定义为”制定信息架构以支持业务这一过程和实现该过程的计划“。从企业架构的概念来看,EAP更偏重于企业架构的动态部分,包括过程、计划、阶段的划分等。EAP将企业架构的过程分成四个阶段(EAP中叫做层级),如下图所示:Level1:开始启动。形成初步的计划。Level2:现状分析(As-Is)。分析当前的业务过程模型和系统/技术现状,作为实施计划的基线。Level3: 阅读全文
posted @ 2012-02-09 17:17 心内求法 阅读(3723) 评论(0) 推荐(0)
摘要:记得有人跟我说过,rails的has_many :through是一个”亮点“,在Django看来,该功能简直不值一提。rails中的many-to-many关联中,还需要你手工创建关联表(写migration的方式),而has_many :through的”语法“只不过是为了自定义关联关系:通过一个中间的、到两端都是many-to-one的模型类实现多对多关联。 在Django中,many-to-many的中间关系表是自动创建的,如果你要指定一个自己的Model类作为关系对象,只需要在需要获取对端的Model类中增加一个ManyToManyField属性,并指定though参数。比如现在我们 阅读全文
posted @ 2012-02-09 15:30 心内求法 阅读(3247) 评论(0) 推荐(0)
摘要:Zachman Framework 可谓是企业架构框架的鼻祖。早在1987年,IBM的Zachman就指出了信息系统架构的重要性,并提出了著名的企业架构的框架——Zachman framework。现在已经78岁(生于1934年)的Zachman老先生仍在担任Zachman International的CEO,并于2011年8月23日在加州的萨克拉门托发布了Zachman Framework最新的3.0版。向Zachman老先生致敬,并让我们来了解一下最新的Zachman Fraomework 3.0:在Zachman Framework之后,又发展出很多企业架构框架,比如在大型企业中非常流行 阅读全文
posted @ 2012-02-08 15:06 心内求法 阅读(4618) 评论(0) 推荐(0)