Iterative and Incremental development

I – Giới thiệu
Iterative and Incremental development là phương pháp cốt lõi của tiến trình phát triển phần mềm theo chu kỳ. Iterative and Incremental development được phát triển nhằm bù đắp lại những điểm yếu của phương pháp waterfall model. Phương pháp này thường bắt đầu bằng một kế hoạch khởi tạo ban đầu và kế thúc bằng việc triển khai cùng với những tương tác giữa những chu kỳ.
--- đọc tiếp bên dưới ---



-----
welcome mọi feedback của các pạn ^ ^
================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
site: http://h3dgroup.com
blog: http://kattyflea.co.cc
================================================

TimeBoxing là gì ?

timeboxing là một kỹ thuật lập kế hoạch phổ biến trong việc lên kế hoạch cho 1 project( chủ yếu được dùng trong phát triển phần mềm), trong phương pháp này thì schedule được chia thành một số giai đoạn nhỏ ( mỗi giai đoạn được gọi là một timebox, thông thường thời gian cho các giai đoạn này là tư 1 tuần tới 6 tuần), mỗi giai đoạn sẽ phải có deliverable, deadline và budget cho nó.

- trong RAD( rapid application development ) thì timebox được xem như là thành phần cốt lõi để lên kế hoạch phát triển phần mềm.

- timebox được sử dụng như là hình thức quản lý rủ ro, đặc biệt là những công việc mà có khả năng mở rộng hoặc kéo dài thời gian deadline => thời gian deadline trong việc nên kế hoạch ko nên thay đổi bởi vì nó sẽ ảnh hướng tới ngày delivery sản phẩm.

- khi một deadline mà bị trễ thì những giải pháp sau có thể được áp dụng
---------- bỏ đi những requirement mà ảnh hưởng ít tới project
---------- làm việc OT để bù lại khoảng thời gian đã mất
---------- di dời deadline

================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: hoang.nguyen@h3dgroup.com
site: http://h3dgroup.com
blog: http://kattyflea.co.cc
================================================

TimeBoxing là gì ?

[CakePHP]HasAndBelongsTo trong cakephp

một chút về quan hệ many-to-many trong cakephp thể hiện dưới dạng hasAndBelongsTo

==============



================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

Đặc trưng của smarty

1- Biến modifiers
- khi hiển thị nội dung trên 1 website, chúng ta có thể muốn thay đổi một số thứ theo thời gian hoặc thay đổi định dạng của 1 dòng text, thêm dòng text => với smarty chúng ta ko cần phải vào modify code mà chỉ cần thay đổi nội dung của biến

2-

[CakePHP][Ebook] Begining CakePHP From Novice to Professional by David Golding

Với Practical CakePHP Projects đòi hỏi pạn phải biết một chút về CakePHP
nhưng với Beginning CakePHP From Novice to Profesional của David Golding
thì những bạn chưa có nền tảng về CakePHP sẽ dễ dàng đọc hơn trước khi đến với
Practical CakePHP

Không dài dòng, lôi thôi => hãy download tài liệu này tại đây để bổ sung vào kho sách của mình một trong những tài liệu hay về CakePHP

Let's enjoy !!!!


================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP][Ebook] Practical CakePHP Projects

Practical CakePHP projects là cuốn sách rất hay
giúp bạn tạo những trang web thực tế
ngoài ra, với những kiến thức mà cuốn sách cung cấp
pạn có thể dễ dàng lắm bắt cakephp để tự xây dựng một website cho chính mình
hoặc thậm chí xây dựng một CMS hoàn chỉnh.

download tại đây

hoặc qua server megaupload tại đây

Let's enjoy CakePHP through this book !!!

================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP]Sử dụng Tree behavior trong CakePHP

1. Yêu cầu
Để sử dụng được tree behavior, thì database của bạn phải có 3 field sau:
parent – tên mặc định là parent_id, nó được dùng để lưu trữ id của parent
left – tên mặc định là lft, để lưu trữ giá trị trái của hàng hiện tại
right – tên mặc địnhl là rght, được dùng để lưu giá trị phải của hàng hiện tại

========== đọc tiếp bên dưới ==========


================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

Lưu trữ dữ liệu phân cấp trong table database ( hierarchical data in table database )

1. Giới thiệu
Bất cứ khi nào chúng ta muốn xây dựng forum, gửi các message từ mail list trên website, viết CMS: sẽ có một lúc nào đó chúng ta sẽ muốn lưu trữ dữ liệu phân cấp trong 1 database ( trong tài liệu này dữ liệu phân cấp sẽ được hiểu là : hierarchical data ).
Việc lưu trữ có thể thực hiện thông qua XML ( một kiểu lưu trữ dữ liệu theo kiểu cấu trúc phân cấp), rất phù hợp với dữ liệu phân cấp. vậy còn đối với table database thì sao, rõ ràng như chúng ta thấy thì tables không phải là kiểu lưu trữ dữ liệu phân cấp mà nó lưu dưới dạng các mối quan hệ giữa các bảng => tables chỉ là kiểu flat list.
Vậy thì làm sao chúng ta lưu được dữ liệu kiểu phân cấp trong một table, trong bài hướng dẫn này chúng ta sẽ cùng tìm ra cách để làm chiện đó )
Lưu trữ dạng cây là một vấn đề hết sức phổ biến với những giải pháp lưu trữ khác nhau. Nhưng vẫn có 2 cách tiếp cận việc lưu trữ dữ liệu dạng cây mà hay được sử dụng đó là:
+ mô hình danh sách kế cận ( the adjacency list model )
+ thuật toán duyệt cây theo thứ tự đã được định trước đó..
..............[đọc tiếp theo bên dưới]....



================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP] Sử dụng behavior trong cakephp

Làm thế nào để 1 behavior được attach vào trong model

** behavior được attach vào trong model thông qua biến của lớp model $actsAs
class Category extends AppModel {
var $name = 'Category';
var $actsAs = array('Tree');
}
?>

** Ví dụ sau giải thích làm thế nào để model Category có thể được quản lý trong một cấu trúc dạng cây bằng cách sử dụng TreeBehavior.
Một khi một behavior được xác định, thì chúng ta có thể sử dụng các method được thêm vào trong model bởi behavoior như là method
của chính model đó

// ví dụ
$this->Category->id = 42;
// sử dụng phương thức children của behavior
$kids = $this->Category-> children();

** Ngoài ra, một số behavior có thể yêu cầu hoặc cho phép chung ta thiết lập một số thuộc tính cơ bản trước khi attach nó vào trong model,
Ví dụ bên dưới, chúng ta rename lại "left" và "right"
class Category extends AppModel {
var $name = 'Category';
var $actsAs = arry('Tree' => array('left'=>'left_node', 'right'=>'right_node'));
} ?>

** Chúng ta có thể attach một số behavior cho 1 model.
ví dụ;
class Category extends AppModel {
var $name='Category'';
var $actsAs=array('Tree' => array('left'=>'left_node','right'=>'right_node'), 'Translate');
} ?>

** Khi chúng ta muốn tháo behavior ra khỏi model thì dùng phương thức detach
ví dụ:
$this->Category->Behaviors->detach('Translate');

** Nếu chúng ta chỉ muốn disable:
ví dụ:
$this->Category->Behaviors->disable('Translate');

** Chúng ta có thể attach behavior lúc runtime
$this->Category->Behaviors->attach('Translate');

================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP] Tips xây dựng ứng dụng với CakePHP ( phần 1 )

Các tips cơ bản để bạn làm quen với cakephp cũng như là để xây dựng cho mình một site dựa vào core cakephp.
Hãy feedback để hoàn thiện hơn bản draft này :)



================================================
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP] Model

I- Model là gì ?
- Model đại diện cho dữ liệu và được sử dụng trong các ứng dụng CakePHP cho việc truy xuất dữ liệu.

- 1 model thường đại diện cho 1 table nhưng có thể được dùng để truy cập bất cứ loại lưu trữ dữ liệu nào như : files, LDAP, CSV....

- 1 model có thể được kết hợp với các model khác.


II- Code
- giả sử chúng ta có 1 table với tên là 'recipes'( cột id, title, body ) thì tên của model sẽ là : Recipe ở trong file: /app/models/recipe.php
<?php
class Recipe extends AppModel {

public $name = 'Recipe';

}
?>

III- Plugin của model

- Nếu là một plugin của model, thì bạn nên đặt nó trong thư mục /app/plugins/recipes/models/

- một ví dụ về plug in của model
<?php
class RecipesController extends AppController {

public $uses = array(
'Recipe', // 'Recipes.Recipe' if it is from Recipes plugin
);

public function view($id) {
// retrieve record with ID 123 from recipes table
$recipe = $this->Recipe->findById(123);

// set the $recipe variable so it can be used by views later
$this->set('recipe', $recipe); // or $this->set(compact('recipe'));
}

}
?>

================================================
---
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk or kattyflea.co.cc
blog: mathhoang.tk or mathhoang.blogspot.com
================================================

[CakePHP] Basic controller

Controller

I- Introduction
II- App controller
III- Pages controller
IV- Các thuộc tính của controller
V- Các phương thức của controller

I- Introduction
1 controller được sử dụng để quản lý logic của 1 ứng dụng
Hầu hết các controller được sử dụng để quản lý logic cho 1 single model. Ví dụ, nếu bạn đang buid một site cho một trang bakery thì yêu cầu application của bạn phải có: 1 RecipesController và 1 IngredientsController để quản lý các recipes và các ingredients.
Recipe model được xử lý bởi RecipesController, Product model được xử lý bởi ProductsController …
Các lớp controller kế thừa từ lớp AppController của CakePHP ( AppController kế thừa lớp Controller trong CakePHP – đây là một thư viện của CakePHP). Lớp AppController có thể được định nghĩa trong /app/app_controller.php và nó chứa các phương thức được share giữa các controller trong ứng dụng.
Controller có thể bao gồm các phương thức actions( Actions là các phương thức mà chỉ được sử dụng để hiển thị lên view → các phương thức action này nằm trong controller )
theo mô hình MVC thì dispatcher sẽ gọi action khi có 1 yêu cầu từ user tương ứng.
Quay trở lại ví dụ trang backery của hồi đầu, RecipesController có thể chưa view(), share() và search(). Controller này có thể nằm trong /app/controllers/recipes_controller.php và có thể có code như bên dưới:

# /app/controllers/recipes_controller.php

class RecipesController extends AppController {
function view($id) {
//action logic goes here..
}

function share($customer_id, $recipe_id) {
//action logic goes here..
}

function search($query) {
//action logic goes here..
}
}
?>

II- App controller
Như đã giới thiệu ở trên, lớp AppController là một lớp cha của tất cả các lớp controller trong ứng dụng. Bản thân AppController kế thừa lớp Controller trong thư viện CakePHP. AppController được định nghĩa trong /app/app_controller.php :
class AppController extends Controller {
}
?>
Vì lớp AppController là lớp cha của các lớp controller trong ứng dụng, do đó mà các thuộc tính và các method trong lớp AppController sẽ có thể được share và sử dụng bởi các lớp kon.

III- Pages Controllers
CakePHP hỗ trợ chung ta Pages Controller ( cake/libs/controller/pages_controller.php). Trang chủ( home page ) mà bạn thấy sau khi cài đặt là được tạo ra bằng cách dùng controller này. Page controller thường được dùng để tạo ra các trang tính.
Ví dụ: bạn tạo trang About. ( bạn tạo 1 file view /app/views/pages/about_us.ctp, bạn truy cập nó bằng cách sử dụng đường dẫn http://example.com/pages/about_us
để sử dụng Pages controllers, chúng ta chỉ cần copy pages_controllers.php từ core của CakePHP đến ứng dụng của mình.
IV- Các thuộc tính của controller
1- $name
→ được dùng để thiết lập tên của controller
→ thông thường thì đây là hình thức số nhiều của tên model mà controller sử dụng
Ví dụ:
# $name controller attribute usage example

class RecipesController extends AppController {
var $name = 'Recipes';
}

?>

2- $components, $helpers and $uses
ví dụ:
class RecipesController extends AppController {
var $name = 'Recipes';

var $uses = array('Recipe', 'User');
var $helpers = array('Ajax');
var $components = array('Email');
}
?>
3- $layout
→ sử dụng $layout để chọn layout cho chương trình /app/views/layouts( $layout sẽ lưu tên của layout trong /app/views/layouts )
→ nếu giá trị này ko được thiết lập thì layout mặc định sẽ được sử dụng cho ứng dụng của bạn: default.ctp
ví dụ:

// Using $layout to define an alternate layout

class RecipesController extends AppController {
function quickSave() {
$this->layout = 'ajax';
}
}

?>
4- $params
→ được sử dụng để cung cấp quyền truy cập vào các thông tin về request hiện tại:
4.1- form : → $this->params['form'];
4.2- admin : → $this->params['admin'];
4.3- bare : → $this->params['bare'];
4.4- form : → $this->params['isAjax'];
→ and so on.....


V- Các method của controller
1- Tương tác với View
1.1- set( string $var, mixed $value)
chuyển dữ liệu từ controller tới view.
Ví dụ:
$this->set('title_for_layout', 'This is the page title');
?>

1.2- render
render(string $action, string $layout, string $file)
Dùng để render các view tương ứng
Ví dụ:
class RecipesController extends AppController {
function search() {
// Render the view in /views/recipes/search.ctp
$this->render();
}
}

2- Flow control
2.1- redirect
redirect(mixed $url, integer $status, boolean $exit)
ví dụ:
function placeOrder() {

//Logic for finalizing order goes here

if($success) {
$this->redirect(array('controller' => 'orders', 'action' => 'thanks'));
} else {
$this->redirect(array('controller' => 'orders', 'action' => 'confirm'));
}
}

2.2- flash
flash(string $message, string $url, integer $pause, string $layout)
được dùng để redirect đến 1 trang. Phương pháp này khác với phương pháp redirect() ở chỗ là nó hiển thị 1 message trước khi chuyển tới 1 url khác

3- Callbacks
3.1- beforeFilter()
được thực thi trước mỗi action của controller
3.2- beforeRender()
được thực thi sau mỗi action của controller( nhưng trước khi view được gọi )
3.3- afterFilter()
được gọi sau mỗi action và sau rendering được hoàn tất
3.4- Các callback trong scaffold
_beforeScaffold($method)
_afterScaffoldSave($method)
afterScaffoldSaveError($method)
_scaffoldError($method)
4- Một số phương thức khác
- constructClasses(), referer(), disableCache(), postConditions(), paginate(), requestAction(), loadModel().

[CakePHP] View convention

View convention in CakePHP
[ qui ước đặt tên view trong cakephp ]

////////////////////////////////////////////////////////////
Conventions
////////////////////////////////////////////////////////////
View template files are named after the controller functions they display,
in an underscored form

the basic pattern is:
/app/views/controller/underscored_function_name.tcp

////////////////////////////////////////////////////////////
Examples
////////////////////////////////////////////////////////////
the getReady() function of the PeopleController class will look
for a view template in /app/views/people/get_ready.ctp



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
final convention example
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Database table: "people"
Model class: "Person", found at /app/models/person.php
Controller class: "PeopleController"found at /app/controllers/people_controller.php
View template, found at /app/views/people/index.ctp


---
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk
---

[CakePHP] controller convention

Controller convention in CakePHP
[ qui ước đặt tên controller trong cakephp ]

////////////////////////////////////////////////////////////
Conventions
////////////////////////////////////////////////////////////
Controller classnames are plural, CamelCased, and end in Controller
classnames are CamelCased


note:
+ the first method that you write for a controller might be the index() method.
- when a request specifies a controller but not an action, the default CakePHP
behavior is to execute index() method of that controller.
+ Example:
- http://www.dekvn.rps/razor maps to call index() method of the RazorController,
whereas http://www.dekvn.rps/razor/view/ maps to call on the view() method of RazorController

Change the visibility of controller by prefixing the name with underscoress

////////////////////////////////////////////////////////////
Examples
////////////////////////////////////////////////////////////
Controler classnames:
PeopleController
LatestArticlesController

Change controller visibility
classnames NewsController extends AppController{
function latest() {
$this->_findNewArticles();
}

function _findNewArticles() {
//logic to find the latest news article
}
}
?>

--> while the page: http://wwww.example.com/news/latest would be accessible
to user as usual, but http://www.example.com/news/_findNewArticles would get an error

---
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://tech-vnit.tk
---

[CakePHP] model and database convention

model and db convention in CakePHP
[qui ước tên model và database trong CakePHP]

////////////////////////////////////////////////////////////
Conventions
////////////////////////////////////////////////////////////
Model classnames are singular and CamelCased
Table names corresponding to CakePHP model are plural and underscored

////////////////////////////////////////////////////////////
Examples
////////////////////////////////////////////////////////////
Model classname: Person, Bigperson

respectively, we have table names:
+ people
+ big_people

---
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://kattyflea.co.cc
or: http://tech-vnit.tk
---

[CakePHP] file name convention

file name convention will summarize convention of filename in CakePHP
[qui ước tên file trong cakephp]

////////////////////////////////////////////////////////////
Conventions
////////////////////////////////////////////////////////////
filenames are underscored
classnames are CamelCased

////////////////////////////////////////////////////////////
Examples
////////////////////////////////////////////////////////////
classname: MyNiftyClass
filename : my_nifty_class.php

++++ Examples for the Controller ++++
classname: KissesAndHugsController
filename: kisses_and_hugs_controller.php

++++ Examples for the Component ++++
classname: MyHandyComponent
filename: my_handy.php

++++ Examples for the Behavior ++++
classname: EspeciallyFunkableBehavior
filename: especially_funkable.php

++++ Examples for the View ++++
classname: SuperSimpleView
filename: super_simple.php

++++ Examples for the Helper ++++
classname: BestEverHelper
filename: best_ever.php

---
name: hoang nguyen
nickname: mathhoang
Y!M: vietnam_hoangminhnguyen@yahoo.com
mail: vietnam_hoangminhnguyen@Yahoo.com
site: http://kattyflea.co.cc
or: http://tech-vnit.tk
---
Related Posts Plugin for WordPress, Blogger...