Introduction
提升Vim/vi的打字效率的一个技巧就是快速移动光标。或许你觉得这不值一提,用hjkl或者上下左右也能移动,不过相信我,我下面要介绍的移动光标技巧绝对物超所值。
Vim和Emacs作为两大神级文本编辑器各有利弊,本实战指南不加讨论的介绍Vim.
本实战指南不是教你按照Vim的键位图来编辑文本,而是从实战的角度,教你如何快速的用Vim来开发你的程序,节省你的开发时间。
为什么不用IDE?IDE固然强大,但并不是每一个环境都有现成的IDE可用,尤其是SSH远程计算机,就一个bash解析器可以使用,完全没有图形化界面。IDE的另一个弊端就是需要反复的安装升级更新。
当然IDE也有省事的时候,例如开发Java和C#,IDE自带的debug调试工具,可以非常便利的调试程序。
但是在类Unix系统上开发,我还是推荐学习熟练地使用Vim。何为熟练?完全舍弃你的鼠标,只使用键盘快速的进行开发即为熟练。
Database design最简单的设计模型就是E-R模型,E-R建模工具有很多,最简单方便的当属Microsoft Office Visio。
E-R模型图由实体Entities以及关系Relationship组成,其中实体Entities可能包含属性Properties/Attributes。E-R图反映了现实世界中的一些现象,如客户和书店、供销商和书店之间是供求关系,而客户、书店和供销商之间,各自又存在属性,如名称、电话等。
关系不一定是一对一,也可能是一对多、多对一、多对多关系,如一本书可以对应多个作者,而一名作者也可以对应多本书。这类情形也可以由E-R图反映。
In this assignment, you are designing an online bookstore database. The storekeeper wants to record the publishers, books and buyer. For each publisher, the storekeeper records the email address, phone number and book genres. For each book the storekeeper records the ISBN, book title, authors and price. For each buyer the storekeeper records the name, phone number, and purchase amount in total.
Note that the storekeeper doesn’t want to record which book is bought by which buyer. You should to drow an E-R diagrams to demonstrate your database design.
AJAX全称叫Asynchronous JavaScript and XML,也就是异步的JavaScript和XML技术。所谓异步,就是和传统的同步Web相比,在客户端和服务器交互之间,采取异步而不是同步通信,进而减少了服务器的响应时间,同时增加了用户体验。
AJAX并不单纯的指采用JavaScript和XML的通信模型,其泛指一系列的异步通信技术。XML也可由JSON替代,进一步减少传输的数据量。
AJAX最大的优势就是,客户端向服务端发起请求后,不需要更新整个页面,仅仅需要更新一部分信息。数据内容由XML/JSON传输存储,而逻辑展示部分由JavaScript处理。
当然,AJAX也不是万能的,对于流媒体型的数据,AJAX的体验并不如Java Applet和FLASH等。
此外,由于AJAX采用JavaScript编程,因此客户端浏览器对于JavaScript的支持程度,也会影响到用户体验。
In this assignment, you need to
Hotel booking application,在软件工程中叫做Hotel reservation system,也就是酒店管理系统。这类系统的开发工作量,主要是根据需求,来实现其业务逻辑部分。
一个成熟的酒店管理系统,还可以接入或被接入其他系统。只要做好接口设计,给出稳定、可拓展的接口,这类系统便可以反复利用。
当然,对于酒店管理系统的重构,也是十分头疼的一件事。由于要逐个梳理需求,在重构中要避免需求的落下。
Below are the features of this project that you should implement in this course.
This application will use a txt file to load the user’s information. The file should contains the following properties:
LastName, FirstName, Gender, Age, Email, CreditCardNumber, BillingAddress, ExpriyDate.
高大上的Elections,特别是在大选中,投票往往会采用电子选箱,也就是智能选举系统。
相比纸质选票,电子计票有着快速计票、实时计票、节省人工成本、计票可回收利用等优点。尤其是差额票,对于候选人较多的情况,电子计票的优势就更大了。
电子计票系统中,最重要的部件就是识别有效选票、鉴别无效选票、统计选票,对识别器质量已经算法有较高的要求。
There are so many different kinds of voting systems, especial electronic voting system in the world. In this assignment you will be comparing four of them: Approval Voting; Plurality, also known as First Past the Post; Copeland’s Method and the Borda Count. You will be simulating Canadian elections, where voters are choosing between the four major federal parties (New Democratic Party, Green Party, Liberal Party, Conservative Party).
第一代Galaxian游戏在1979年登场,之后在1981年推出了升级版Galara,以及1984年的加强版Gaplus。作为早期电子游戏,Galaxian在街机市场是十分火爆的。
相比同时代的Space Invaders,由于Galaxian采用了当时的最新技术,游戏体验有了质的飞跃,是当时最受欢迎的街机游戏之一。
In this assignment you develop an arcade style name Galaxian. The game needs to be implemented in OpenGL engine. You should define your own game objectives, such as final goals and the level of player interaction. Lives and scoring should also be planned.
The difficulty lies in how to manage the objects on the screen, the enemy flight path, in particular, and how they can track the ship. The algorithm can avoid the enemy collisions between each other, and how to aim at the player’s position.
Your program provide the following functions:
市场上有一些成熟软件可以做Digital image process,如Matlab和R。这两款软件提供了丰富的图像处理函数,以及优秀的交互,和简易的调试功能,因此受到图像处理工程师的青睐。
C++虽然也可以使用二维数组的存储方法来存储图像,并实现等同于Matlab和R的算法。但是编程的复杂性远远大于前者。
虽然说,用C/C++编出的图像处理软件性能会超过Matlab和R,但是这种差异需要大规模的图像才会体现出来。而目前业内对于大规模的图像处理,往往会采用云计算分布式的做法,而不是单纯的使用一台计算机进行运算。
In this assignment, you are required to build a simple software framework for digital image processing.
Your program should be able to read and write PPM / PGM image files (either binary or ASCII), and perform color or geometric transformation.
The programming language is C/C++. The preferred programming environment is Visual C++ (VC) 2012. If you choose to use a different platform, your submitted source code should be compatible with a Visual C++ .Net compiler, i.e., one can build a working executable for Windows from your source code.
工程编程中,Sorting通常都是出现在三方库中直接调用。Sorting的种类繁多,有下面几类:
Straight Insertion Sort,直接插入排序
Shell’s Sort,希尔排序
Simple Selection Sort,简单选择排序
Heap Sort,推排序
Bubble Sort,冒泡排序
Quick Sort,快速排序
Merge Sort,归并排序
Radix Sort,桶排序/基数排序
掌握以上几种基本排序算法的原理和实现,是每个工程师的基本功。刚开始的时候可以先研究其中一两个感兴趣的算法,自己动手画排序图,并编写简单代码来实现。
同时,可以使用一些三方算法库,来进行实际的编程操练。
Implement void quicksort(unsigned int *a, int n) as a “C” style function in the file quicksort.cc
Implement void radixsort(unsigned int *a, int n) as a “C” style function in the file radixsort.cc
AVL Tree也就是AVL树,是早的自平衡二叉查找树。其任意节点的两颗子树最大高度差仅为1,因此也被称为高度平衡树。
相对红黑树,AVL树目前的应用场景已经非常下了,大部分还是用于学习和研究。
AVL树最大的特点是,树的查找、插入和删除在平均和最坏情况下都是O(log n),但增加和删除节点可能需要旋转这颗树,使其重新平衡。
Implement a C++ AVL Tree class AVLTree in files AVLTree.h and AVLTree.cpp