GHOST's Blog


  • 首页

  • 归档

  • 标签

  • 分类

  • 关于我

  • 搜索

重构:改善既有代码的设计

发表于 2017-02-24   |   分类于 日志   |   暂无评论

摘自前言

从前,有位咨询顾问造访客户调研其开发项目。系统核心是个类继承体系,顾问看了开发人员所写的一些代码。他发现整个体系相当凌乱,上层超类对于系统的运作做了一些假设,下层子类实现这些假设。但是这些假设并不适合所有子类,导致覆写(override)工作非常繁重。只要在超类做点修改,就可以减少许多覆写工作。在另一些地方,超类的某些意图并未被良好理解,因此其中某些行为在子类内重复出现。还有一些地方,好几个子类做相同的事情,其实可以把它们搬到继承体系的上层去做。

这位顾问于是建议项目经理看看这些代码,把它们整理一下,但是经理并不热衷于此,毕竟程序看上去还可以运行,而且项目面临很大的进度压力。于是经理说,晚些时候再抽时间做这些整理工作。

顾问也把他的想法告诉了在这个继承体系上工作的程序员,告诉他们可能发生的事情。程序员都很敏锐,马上就看出问题的严重性。他们知道这并不全是他们的错,有时候的确需要借助外力才能发现问题。程序员立刻用了一两天的时间整理好这个继承体系,并删掉了其中一半代码,功能毫发无损。他们对此十分满意,而且发现在继承体系中加入新的类或使用系统中的其他类都更快、更容易了。

项目经理并不高兴。进度排得很紧,有许多工作要做。系统必须在几个月之后发布,而这些程序员却白白耗费了两天时间,干的工作与要交付的多数功能毫无关系。原先的代码运行起来还算正常,他们的新设计看来有点过于追求完美。项目要交付给客户的,是可以有效运行的代码,不是用以取悦学究的完美东西。顾问接下来又建议应该在系统的其他核心部分进行这样的整理工作,这会使整个项目停顿一至二个星期。所有这些工作只是为了让代码看起来更漂亮,并不能给系统添加任何新功能。

阅读全文 »

OpenCascade初探

发表于 2017-01-23   |   分类于 日志   |   暂无评论

因为工作的缘故,接触了一下OpenCascade。

OpenCascade一个三维造型引擎。

https://www.opencascade.com/doc/occt-7.1.0/overview/html/occt__tutorial.html

CEGUI编辑器: CEED

发表于 2017-01-23   |   分类于 日志   |   暂无评论

CEED: CEGUI Unified Editor

学习OGRE时接触到一个界面库:CEGUI。

CEED是一个CEGUI资源编辑器,使用Python和PySide(Qt for Python)写的。

Qt有两个Python绑定,一个是PyQt,另一个是PySide。

这么优秀的源代码对于学习Python是个不可多得的资源啊,记录一下。

https://bitbucket.org/cegui/ceed

MySQL 5 权威指南

发表于 2016-12-22   |   分类于 日志   |   暂无评论

SQL参考:http://www.w3school.com.cn/sql/

MySQL 5 权威指南

Lisp,Scheme,函数式编程

发表于 2016-12-07   |   分类于 日志   |   暂无评论

看《程序员的呐喊》、《软件随想录》的时候,大师们常常会提到一门古老的编程语言Lisp。今天有兴趣学习了一下Scheme的语法。Scheme是Lisp的一种方言。

另外,摘一段《软件随想录》中很有意思的一段话:

顺便说一句,我有充分理由在这里说,那些使用grep命令过滤简历的招聘经理真是荒谬可笑。我从来没有见过哪个能用Scheme语言、Haskell语言和C语言中的指针编程的人,竟然不能在两天里面学会Java语言,并且写出的Java程序的质量竟然不能胜过那些有5年Java编程经验的人士。不过,是无法指望人力资源部里那些平庸的懒汉听进去这些话的。

参考:
Scheme 语言概要(上)
Scheme 语言概要(下)
函数式编程初探

JavaScript权威指南

发表于 2016-11-29   |   分类于 日志   |   暂无评论

之前在 http://www.w3school.com.cn 网站上看过JavaScript的教程,现在找来一本书系统地学习一下。这本书感觉太棒了,所有想知道的尽在其中。

JavaScript权威指南

Docker初探

发表于 2016-11-18   |   分类于 日志   |   暂无评论

第一本Docker书

简介

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。

Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户可以尽可能充分地利用系统资源。

Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性,从而降低那种“开发时一切都正常,肯定是运维的问题”的风险。

Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。

容器是镜像的实例。容器是基于镜像启动起来的。镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

阅读全文 »

工作中的感悟

发表于 2016-11-02   |   分类于 日志   |   暂无评论

糟糕的是代码规范一直没有被严格地执行,导致编码风格各种的不一致,要命的是我还有强迫症,看到不同的编码风格特别别扭。见过一个函数近1000行代码,一行注释也没有。算法类的代码没有注释没有文档,读起来那是相当费劲。就像根据别人的呕吐物去猜别人吃了什么。

Leader必须清楚每个人写的代码的算法、流程,加强代码审查,防止员工离职带来的代码维护问题,必要的文档还是要有的,特别是算法性比较强的代码一定要有文档。

修改代码时要保持代码和注释、变量名或参数名保持一致。比如曾经遇到过,半径改成了直径,代码中是按直径使用的,但是变量名还是叫radius,函数名还是getRadius。

有的任务不适合拆分,人越多效率越低。关于这一点,《人月神话》中貌似讨论过。

有些特性需要尽早考虑,后期再加入会影响已有的架构,造成不必要的麻烦。

数据库由专人专门负责设计和维护,以免造成混乱。

阅读全文 »

探索PyGithub

发表于 2016-11-02   |   分类于 日志   |   暂无评论

PyGithub是GitHub API的Python版,玩了一下,还是蛮有趣的。最初是在chromium-source-tarball项目中一个Python脚本里发现的,竟然能通过Python操作GitHub,再一次证明Python太强大了,TM简直啥都能做,哈哈。

写个小工具,GitHub里Follow我的,我也Follow回敬一下,礼尚往来。

安装PyGithub:

pip install pygithub

完整脚本

#!/usr/bin/env python
# coding: utf-8

# GitHub
# Follow我的, Follow之
# 未Follow我的,从Following中删除之
# 即同步互Follow关系

import getpass
from github import Github

# 始终Follow的大神
ALWAYS_FOLLOW = [
    'torvalds',
    'michaelliao',
    'zcbenz',
    'ruanyf',
]

def sync():
    username = raw_input('Username:')
    password = getpass.getpass()
    print 'Please wait...'

    g = Github(username, password)
    me = g.get_user()

    followers = me.get_followers()
    following = me.get_following()
    followers_names = [x.login for x in followers]
    following_names = [x.login for x in following]

    all_is_ok = True  # 意思是已是同步状态,无需操作
    for user in following_names:
        is_my_follower = user in followers_names
        in_always_list = user in ALWAYS_FOLLOW

        if (not is_my_follower) and (not in_always_list):
            me.remove_from_following(g.get_user(user))
            print 'User \'%s\' has been removed from following list!' % user
            all_is_ok = False

    for user in followers_names:
        if user not in following_names:
            me.add_to_following(g.get_user(user))
            print 'New user \'%s\' has been followed!' % user
            all_is_ok = False

    if all_is_ok:
        print 'All is OK!'

if __name__ == "__main__":
    sync()

还可以再完善一下,比如还没有加上异常处理。

物理机安装Fedora遇到的问题

发表于 2016-10-27   |   分类于 日志   |   暂无评论

前几天为电脑新加了块硬盘,并且将Fedora安装到了新硬盘上。以下是安装使用过程中遇到的问题,在此记录一下。

新加硬盘后Windows无法启动

网上搜了之后,据说是数据线的问题,于是换了根数据线,谢天谢地,好像是很久以前组装电脑买的主板带了两根数据线。换了另一根数据线后成功开机了,1T的硬盘分了500G给Windows,剩下的留给Linux。

安装Fedora时提示自动分区失败

原因是从光盘启动时,启动项选择的是UEFI模式,不使用UEFI模式则自动分区成功,安装一切顺利。安装光盘是使用Fedora官网下载的Fedora-24-Xfce-Live镜像刻录的。

阅读全文 »

12345
GHOST

GHOST

使命召唤

50 文章
1 分类
59 标签
CSDN Gitee GitHub
友情链接
阮一峰的网络日志Hanny's Blog
© 2023 GHOST   京ICP备15044070号-1
Typecho
主题 - NexT.Pisces