“Test code is just as important as production code. It is not a second-class citizen. It requires thought, design, and care. It must be kept as clean as production code….It is unit tests that keep our code flexible, maintainable, and reusable. The reason is simple. If you have tests, you do not fear making changes to the code! Without tests, every change is a possible bug. No matter how flexible your architecture is, no matter how nicely partitioned your design, without tests you will be reluctant to make changes because of the far that you will introduce undetected bugs.”
This is a free, ready-to-use, PHP-based REST framework by Sheldon C.C. Senseng, currently a tech lead at Ripple Edge Development. And since this is the quote I saw on his Google+, I thought it proper to share.
Anyway, you can access the code here below. I asked him why it wasn’t on GitHub, and he said he preferred subversion…
When I asked him why he made it, he said it was because he was lazy. Umm..yeah right. So basically, you get to rest extra, and code less, because of this opensource REST server! It’s free and open anyone to use, but just know that it is under the MIT License.
Since I last pulled the code, the install script is only for Linux, so I had to use a VM.
In your terminal:
1) Install subversion:
sudo apt-get install subversion
2) Create a folder and go there. In my case, I made www:
cd /var/www (or whatever folder)
3) Check out the code:
username/password is guest/guest
4) Install PHP, APACHE, MySQL:
sudo apt-get install php5 php5-mysql msql-server
5) Some configuration :
sudo a2enmod rewrite
sudo vi /etc/apache2/sites-available/default
Change AllowOverride None to AllowOverride All
6) Restart server :
sudo /etc/init.d/apache2 restart
7) Run the install script:
Dev like a Diva,
I have an exam tomorrow about risk management, so I thought I might as well post my notes about it. (So this post will be “raw” without much thought for grammar and punctuation.) These are my notes on this Lecture – Lesson 02, courtesy of Professor Rolly Torio.
First, a recap:
Software Project Management – concerned with making sure that software is delivered within schedule, within budget, and within the requirements specified by the organization.
Software dev is constantly facing budget and schedule changes
Product is intangible , flexible
Most are one-off projects
Not standardized, recognized with same status as other engineering disciplines (although software does share the many similarities with other complex systems)
PM’s deal most with planning, scheduling, and estimating.
Management Activities include:
Project planning and scheduling
Project monitoring and review
Report writing and presentation
Personnel selection and evaluation
On Project Staffing
Main problems include: lack of budget to hire great people, or lack of great people.
Can be remedied by training.
Most time consuming
Iteratitive, should be regular updated as more info comes in
Focuses on schedule and budget
Types of Project Plans (QVCSM)
The Project Plan includes
1. resources available
2. work breakdown
Project Plan Structure
Hardware and software requirements
Monitoring and reporting mechanisms
Milestones: end points(most visible with waterfall)
Delivarables: project results
Steps in Requirements Engineering + their corresponding deliverables (FRPDR)
Feasibility Study -> Feasibility Report
Requirements Analysis -> User Requirements
Prototype Dev – > Evaluation Report
Design -> Architectural Design
Requirements Specification ->System Requirements
Tips on Project Schedule
1. Use tools to eliminate time wasted for waiting for processes that do not need to be waited on. Some tasks can be done concurrently. Minimize dependencies to avoid delays.
2. Split project into tasks (1-2 weeks length) that you can easily estimate for time and resources needed.
3. Estimating is hard, but improves with experience.
4. Productivity is not based on how many people are on your team. In fact, adding someone new will make a project later (mongolian horde).
5. Always have a contingency plan.
6. Involves graphs: activities, durations, and staff
Activity Path vs. Bar Charts
Activity paths show dependencies and the critical path.
Bar charts show time against a calendar.
-consists of identifying risks and plans to minimize/avoid/deal with their effects.
“A risk is a probablity that some adverse circumstance will occur.”
Risks affect the schedule, resources, quality, performance, and the business making/buying the software.
Types of Software Risks
The Risk Management Process (IAPM)
Risk Identification: project, product, or business?
Ex. Technology, people, organizational, requirements, and estimation risks
Risk Analysis: assess likelihood and their effects
Probability: very low, low, medium, etc.
Effects: catastrophic, tolerable, insignificant, etc.
Risk Planning: create plans to avoid/minimize
1. Avoidance strategies: how to avoid altogether
2. Minimization strategies: reduce impact
3. Contingency plans: how to move forward/deal with the risk
Risk Monitoring: should be done throughout the project
Regularly check if probability and/or effects are changing.
First time designing an app? Freak not! I bring you the four steps to easy design.
1. Think about what activities your customer will be doing. Instead of thinking on a feature-based paradigm, think of how your users will accomplish activities. Make the flow as easy and intuitive as possible.
2. Make up imaginary characters that you want to use your app. Can x person with x background find her way easily in your app? How about a less technical guy y with y experience?
3. Time to mockup? Use paper and post-it’s for the time being (they’ll be able to focus more on the actual flow vs. the design). Brainstorm with your team and come up with as many designs as you want. Show these to future users.
Plus, here are a few more resources:
1. Prototyping for non-techies, Women 2.0
2. The ultimate guide to wireframing, Six Revisions
Hope that helps!
I plan to read all 75 books on Joel Spolsky’s Fog Creek MBA program reading list. However, between my 15 units (plus another 12 I’m taking from other places), plus my writing gigs, I’m not quite sure how long it’s going to take me. Enter Plan B — book summaries. I will be posting links here as I find them (and relevant articles too).
Posting 1-10 for now… I gotta study for my automata theory exam!
4. Dec is Dead, Long Live DEC: The Lasting Legacy of the Digital Equipment Corporation
For now, a review and insights
5. Applied Cryptography (review)
For now, a summary of the field of cryptography
6. Philip and Alex’s Guide to Web Publishing (entire book)
7. Testing Computer Software
8. Design for Community
10. The Non-designer’s Design Book (review + quick summary)
12. Measuring and Managing Performance in Organizations (review + quick summary)
18. The Difference between God and Larry Ellison
22. Random Excess: The Wild Ride of Michael Cowpland and Corel
24. The Leap
Article from the New York Times
A video on the author and the mistakes start-ups make
Excerpt from a Stanford course site (has more resources on the general topic as well)
You might be interested in a summary of Founders at Work. A better one here.
I’ve always been keenly interested in Software Project Management; this semester, I finally had the chance to take a class! In this “evolving” post, I plan to dump my notes, musings, and links to resources and other interesting things I find on the Web. I also plan to put up a list of the books I plan to read (and their summaries, I hope!).
Lesson 1, Introduction (My notes based on Project Management by Jeffrey K. Pinto and discussions in class)
Definition of a Project:
- A temporary endeavor that seeks to achieve a goal in mind (deliver a quality product/service to a customer), with the constraints of a schedule, budget, and resources.
- “A project is a temporary endeavor undertaken to create a unique product or service.” – PMBook 2000
- “A project is a unique venture with a beginning and an end, conducted by people to meet established goals within parameters of cost, schedule and quality.” – Buchanan & Boddy 92
- “Projects are goal-oriented, involve the coordinated undertaking of interrelated activities, are of finite duration, and are all, to a degree unique” – Frame 95
The Elements of a Project: complex, limited resources, clear goal, and customer-focused.
The main differences between between a process and a project are as follows:
1. Processes are routine, repeated tasks, while projects are a one-time thing.
2. A Process has several objectives, while projects have one goal.
3. Processes are ongoing, while projects are terminated upon successful completion.
4. Processes are done by people of the same department/skills set (homogeneous), while a project requires people from diverse skills sets and roles to be successful (heterogeneous).
5. A process has systems to integrate efforts, while systems need to be created for a project.
6. Processes have known factors such as time, cost, etc., while these are estimated for a project.
7. Processes use established practices and maintain the status quo, while projects create new practices and upsets the latter.
Why software project management?
We need SPM because software itself is intangible, as well as flexible. A customer may change his mind about the requirements. On top of that, the process of creating software is subject to constraints, such as schedule, budget, and resources. Furthermore, the practice of software engineering is not standardized (unlike other branches of engineering), posing the need for something that will push for quality at all times.
Activities of a SP manager may include:
1. Proposal writing
2. Project planning and scheduling
3. Project costing
4. Project reviewing and monitoring
5. Project evaluation and selection
6. Report writing and presentation
Concerns on Project Staffing
There may be a lack of budget to hire the people with the required skill set.
Or there may be a lack of people with the skill sets needed. Training recruits is always an option, as well.
-Takes the most time.
-Iterative and evolving.
-Evolves constantly, from initial concept to final delivery.
-Mostly concerned with budget and schedule. (A note on schedules… Most schedules track a maximum of 1 year, 2 years for very complex projects.)
Types of project plans include the quality, validation, configuration management, maintenance, and staff development plans. (We’ll talk about these in detail soon…)
The Importance of Projects
-shorter product life cycles
-helps out with shorter windows for a new product launch
-gives concerted effort for creating complex products
-better collaboration in a global market
The Project Life Cycle
1. Conceptualization. Initial requirements gathering, brainstorming, design. Roles that may be active include the project manager, systems analyst, business analyst, or senior developers/software architects. Deliverables include the business requirement spec, the statement of work, the request for proposal, and the proof of concept/prototype.
2. Planning. Details of the project are finalized. By this stage, you should know exactly what the project should accomplish. Developers, QA, everyone needs to be included in the discussion, as they alone will be able to give an accurate idea of how long this will take, possible problems, etc. Deliverables include the WBS breakdown, the schedule, budget, and a myriad of plans (see above).
3. Execution. Where most of the work happens. Designers design, coders code, QA tests, etc.
4. Termination. The product is handed over to the customer, and resources are assigned to different projects. Deliverables include documentation.
The Constraints of a Successful Project
To be successful, a project must stick to its budget and schedule (as much as possible), without compromising performance. The final product must satisfy the customer.
The Domains of a Successful Project
-Pleasing to customer
-Planning for the future
(Efficient product wows customer. The product drives revenue to the customer or simplifies their company processes. They are so happy with this that they go back to your company for future transactions.)
Project milestones – Predictable stages where management can review the status of the product/project.
Risk Management – There may business, product, or project risks. Risk management tries to foresee those risks in order to minimize their impact or avoid them altogether.
Books I am currently reading:
Just posting resources from my Software Management Quality class.
1) Lectures (thank you to Professor Rolly Torio, iACADEMY)
2) Draft 1 of a software critiquing paper: draft 1
Just posting some materials for PHP beginners. This is material from the PHP Roadshow workshop from held at iACADEMY July 2010.
Bootcamp/Workshop (Hands-on) Style
8:00 – 8:10 Opening Remarks
For PHP Roadshow requests, please contact Edison Go Tan thru firstname.lastname@example.org (e-mail) or +639178019685 (mobile)
A special thank you to Mr. Ridvan Lakas and Ms. Cherrie Ann Domingo for letting me share these files.
Special thanks to the creators of the following PowerPoints, my great friends (and even greater programmin’ chickas) Aela Garong and KC Arabit. Check out their blogs too! Kc (kcarabit.wordpress.com) … Aela…(mugSHARE.me)
They had this great idea to print screen the steps as they set up their “stuff.” Great for future reference. Told ya that they ARE awesome.
1. A Tutorial on Pointers and Arrays in C (Ted Jensen).
I only put one link…because it is simply, hands down, the best one I’ve found in the net.