Monthly Archives: November 2012

Code Igniter

I. Thông tin chung:

CodeIgniter là một nền tảng ứng dụng web (web application framework) mã nguồn mở được dùng để xây dựng các ứng dụng web động tương tác với PHP. Nó cho phép các nhà phát triển xây dựng một ứng dụng web nhanh hơn – so với việc viết mã hỗn tạp – bằng cách cung cấp 1 bộ thư viện đầy đủ cho các tác vụ thông thường, cũng như cung cấp một mô hình tương tác đơn giản và dễ hiểu cho việc kết nối tới những bộ thư viện đó. Phiên bản chính thức đầu tiên của CodeIgniter được công bố vào 28 tháng 2 năm 2006. Phiên bản mới nhất cho tới bây giờ là 2.1.3 được công bố chính thức vào 8 tháng 10 năm 2012.


II. Nội dung chính:

– CodeIgniter khuyến khích các lập trình viên sử dụng mô hình model-view-controller (MVC) architectural pattern cho các ứng dụng web của mình.

– CodeIgniter cũng mang một số các khái niệm đặc thù và các tính năng cơ bản của các mô hình MVC khác như Ruby on Rails:

+ Hỗ trợ kết nối và tương tác đa nền tảng cơ sở dữ liệu

+ Tương tác với cơ sở dữ liệu thông qua active records

+ Session Management (quản lí Session)

+ Định dạng và chuẩn hóa form và dữ liệu đầu vào

+ Hỗ trợ Caching toàn trang để tăng tốc độ thực thi và giảm tải tối thiểu cho máy chủ.

+ Scaffolding

+ Hỗ trợ Template Engine hoặc sử dụng chính PHP tags để điều hướng trong Views

+ Hỗ trợ Hooks, các lớp ngoại (Class Extensions), và các Plugins

– So với các mô hình framework MVC khác, CodeIgniter có các ưu điểm sau :

+ Tương thích hoàn toàn với PHP 4. Nếu sử dụng PHP 5 sẽ dùng được các tính năng hữu ích khác như khả năng gọi phương thức dây chuyền (method chaining ability).

+ Mô hình code nhẹ cho hệ thống, cải thiện tốc độ thực thi (Đây là ưu điểm lớn nhất của CI, tốc độ tuyệt vời)

+ Đơn giản trong việc cài đặt, cấu hình và cấu trúc thư mục.

+ Error Logging

+ Mềm dẻo trong việc định tuyến URI (URI Routing)

– Framework này được mặc định tích hợp thêm vào một số lớp thư viện khác mà các framework khác chưa tích hợp mặc định:

+ Bảo mật và XSS(Cross-site scripting) Filtering

+ Gửi Email, hỗ trợ đính kèm, HTML/Text email, đa giao thức(sendmail, SMTP, and Mail) và các thứ khác.

+ Thư viện chỉnh sửa ảnh (cắt ảnh, thay đổi kích thước, xoay ảnh, v.v..). Hỗ trợ GD, ImageMagick, và NetPBM

+ Upload file

+ FTP Class – Tương tác với máy chủ thông qua giao thức FTP

+ Localization

+ Phân trang tự động

+ Mã hóa dữ liệu – Data Encryption

+ Đo lường tốc độ thực thi – Benchmarking

+ Application Profiling

+ Lịch – Calendaring Class

+ User Agent Class

+ Nén – Zip Encoding Class

+ Trackback Class

+ XML-RPC Library

+ Unit Testing Class

+ Search-engine Friendly URLs

+ Một lượng lớn các hàm hỗ trợ (helpers)

 

Chỉ với CI, bạn học khá nhiều thứ.

1. Mô hình MVC (OK, bạn có biết vô số ĐH ở VN này sử dụng .NET để yêu cầu SV làm bài tập, rất coi thường PHP nhưng vào năm 2008, MVC cho ASP.NET mới hoàn thiện và 2009 mới Microsft chấp nhận nó chính thức. MVC có trong PHP và JAVA từ thuở xưa như trái đất vậy)

2. Các library của CI. chỉ ở cách sử dụng, bạn sẽ thấy nó đơn giản hơn tất cả các framework khác nhưng hiệu quả không hề kém. Và với level starter thì cách dùng library của CI là phù hợp và dễ hiểu, từ đó bạn sẽ có mong muốn viết các library bổ sung hoặc nâng cấp – good for you.

3. Một chút về bảo mật, form, session, url. Riêng cơ chế session của CI cũng đủ để Joomla chào thua (không phải joomla authors làm không được mà vì không dùng vì Joomla không tính tới mức độ mở rộng của ứng dụng tới mức như vậy) và cơ chế lấy dữ liệu được submit bằng POST và GET của CI cũng đã là bảo mật hơn cho người coder.

(FYI – các framework khác chọn cách để ngỏ khả năng xử lý dữ liệu nhập của người dùng thay vì kiểm soát chặt chẽ, nó là tốt với những người coder có kn nhưng khá nguy hiểm nếu cứ chỉ dùng khơi khơi như vậy).


III. Kết luận:
Đây là 1 framework tốt và dễ dùng nhất từ trước tới giờ. Nó khá đơn giản nhưng không hề yếu, mà lại chạy rất nhanh. Bất cứ 1 framework nào được viết lên khi nghĩ tới speed đều muốn so với CI. Tuy nhiên, CI hơi khó kiếm cơm và nhất là với những nhu cầu “mỳ gói” ở VN này thì không thể cạnh tranh về tính năng (không phải do mình viết nhưng vẫn tính tiền khách hàng được) của Joomla ! CI rất rốt nhưng để viết các ứng dụng lớn hay duy trì lâu dài, phải nâng cấp thường và có nhiều thay đổi là khá khó.

Advertisements

Shaking Dice Showing

Chương trình cho phép chạy ảnh như ảnh động bằng cách dùng biến NSTimer kết hợp với nhiều hình ảnh để tạo ảnh động giả
– Xử lý kết quả:
+ Thêm tiền cược nếu thắng
+ Bớt tiền nếu thua
+ Không bắt đầu nếu không đủ tiền cược
– Lưu dữ liệu của người dùng:
+ Lưu lại dữ liệu tiền của người dùng (sử dụng user default để lưu dữ liệu lại mỗi khi có sự thay đổi) có thể load lại khi bật lại chương trình.
– Quản lý giao diện:
+ Khóa giao diện: Khóa giao diện không tương tác khi xí ngầu quay
+ Mở khóa giao diện: Sau khi xí ngầu đã có điểm cố định
+ Cập nhật giao diện: Cập nhật lại giao diện khi có thay đổi

* Các control:
– Chương trình đưa vào để cho các đối tượng khác tham khảo về cách sử dụng hàm delegate.
– Cách viết một
* Những điểm lưu ý của chương trình:
– Đây là Xcode 4.5.2 nên có những điểm mới so với Xcode 4.2 và 4.3
– Việc khai báo lại biến ở file .m là không cần thiết, các lớp đã được khai báo ở file .h có thể được gọi lại khi thêm (_) ở phía trước. Cải tiến này rất đáng giá khi thêm bớt những thuộc tính trong một view không cần phải xóa khai báo ở nhiều nơi nữa.
– Các controller giờ có các canh theo vị trí tương đối dễ dàng hơn cho việc xử lý và thể hiện giao diện
* Giao diện của chương trình:
– Một hình ảnh (ImageView) để thể hiện hình ảnh của Xí ngầu (Dice)
– Button

III. Kết luận:
– Đây là chương trình mẫu có thể phát triển lên mạnh mẽ hơn nữa trong tương lai để có thêm những chương trình mạnh mẽ hơn do Việt Nam tự viết.
– Chương trình có thể được nâng cấp lên vớu nhiều trò chơi và chức năng mạnh mẽ hơn nữa để đem lại sự tham khảo tốt hơn cho những lập trình viên mới vào nghề chưa có kinh nghiệm trong việc phát triển chương trình.

* Coding:
File.h

//
//  MainMindViewController.h
//  ShakingDiceShowing
//
//  Created by Huy Nguyen on 11/21/12.
//  Copyright (c) 2012 HuyNguyen. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MainMindViewController : UIViewController
{
int TongTienHienCo;
int TienCuoc;

NSTimer *timer;
}
@property (retain, nonatomic) IBOutlet UIImageView *XiNgauMot;
@property (retain, nonatomic) IBOutlet UILabel *lblDiemCuoc;
@property (retain, nonatomic) IBOutlet UILabel *lblTongTienHienCo;
@property (retain, nonatomic) IBOutlet UISegmentedControl *segDatCuoc;
@property (retain, nonatomic) IBOutlet UILabel *txtNoiDungThongBao;
@property (retain, nonatomic) IBOutlet UIButton *btnShake;
@property (retain, nonatomic) IBOutlet UIButton *btnSet50;
@property (retain, nonatomic) IBOutlet UIButton *btnSet100;
@property (retain, nonatomic) IBOutlet UIButton *btnGetMoney;

– (IBAction)Set50:(id)sender;
– (IBAction)Set100:(id)sender;
– (IBAction)GetMore:(id)sender;

– (IBAction)DoXiNgau:(id)sender;

– (void) LockScreen;
– (void) UnLockScreen;
– (void) UpdateScreen;
@end

File.m

//
//  MainMindViewController.m
//  ShakingDiceShowing
//
//  Created by Huy Nguyen on 11/21/12.
//  Copyright (c) 2012 HuyNguyen. All rights reserved.
//

#import “MainMindViewController.h”

@interface MainMindViewController ()

@end

@implementation MainMindViewController

static int count;

– (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

– (void)dealloc {
[_XiNgauMot release];
[_lblDiemCuoc release];
[_lblTongTienHienCo release];
[_segDatCuoc release];
[_txtNoiDungThongBao release];
[_btnShake release];
[_btnSet50 release];
[_btnSet100 release];
[_btnGetMoney release];
[super dealloc];
}

– (IBAction)Set50:(id)sender {
_lblDiemCuoc.text = @”50″;
}

– (IBAction)Set100:(id)sender {
_lblDiemCuoc.text = @”100″;
}

– (IBAction)GetMore:(id)sender {
TongTienHienCo += 100;
[self LuuTruMoney];
[self UpdateScreen];
}

– (IBAction)DoXiNgau:(id)sender {
if (TongTienHienCo <= 0){
UIAlertView *thongBao = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”You don’t have enough money to bet!!” delegate:self cancelButtonTitle:@”OK” otherButtonTitles:nil];
[thongBao show];
return;
}

TienCuoc = [[NSString stringWithFormat:_lblDiemCuoc.text] intValue];

if (TienCuoc > TongTienHienCo){
UIAlertView *thongBao = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”You don’t have enough money to bet!!” delegate:self cancelButtonTitle:@”OK” otherButtonTitles:nil];
[thongBao show];
return;
}

if (TienCuoc == 0){
UIAlertView *thongBao = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”You need to bet something!!” delegate:self cancelButtonTitle:@”OK” otherButtonTitles:nil];
[thongBao show];
return;
}

timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(QuayXucXac) userInfo:nil repeats:YES];
}

– (void) QuayXucXac {
[self LockScreen];

int diemSoRandomMot = arc4random()%6 +1;

NSString *hinhXucXacMot = [NSString stringWithFormat:@”%i”,diemSoRandomMot];

_XiNgauMot.image = [UIImage imageNamed:hinhXucXacMot];

int ChonDatCuoc = [_segDatCuoc selectedSegmentIndex];

count++;

if (count >=9){
count = 0;

[timer invalidate];
int soDiem = diemSoRandomMot;

if (ChonDatCuoc == 0){
if (soDiem > 3){
_txtNoiDungThongBao.text = [[NSString alloc] initWithFormat:@”Win: %i”, TienCuoc];
TongTienHienCo = TongTienHienCo + TienCuoc;
UIAlertView *thongbaoThang = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”Win” delegate:self cancelButtonTitle:@”Get money” otherButtonTitles:nil];
[thongbaoThang show];
} else {
_txtNoiDungThongBao.text = [[NSString alloc] initWithFormat:@”Lose: %i”, TienCuoc];
TongTienHienCo = TongTienHienCo – TienCuoc;
UIAlertView *thongbaoThang = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”Lose” delegate:self cancelButtonTitle:@”Let’s bet again” otherButtonTitles:nil];
[thongbaoThang show];
}
} else {
if (soDiem < 3){
_txtNoiDungThongBao.text = [[NSString alloc] initWithFormat:@”Win: %i”, TienCuoc];
TongTienHienCo = TongTienHienCo + TienCuoc;
UIAlertView *thongbaoThang = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”Win” delegate:self cancelButtonTitle:@”Get Money” otherButtonTitles:nil];
[thongbaoThang show];
} else {
_txtNoiDungThongBao.text = [[NSString alloc] initWithFormat:@”Lose: %i”, TienCuoc];
TongTienHienCo = TongTienHienCo – TienCuoc;
UIAlertView *thongbaoThang = [[UIAlertView alloc] initWithTitle:@”Notice” message:@”Lose” delegate:self cancelButtonTitle:@”Let’s bet again” otherButtonTitles:nil];
[thongbaoThang show];
}
}

[self UnLockScreen];
[self UpdateScreen];
}

_lblTongTienHienCo.text = [NSString stringWithFormat:@”%i”, TongTienHienCo];
[self LuuTruMoney];
}

– (void) LuuTruMoney{
int tienNguoiChoi = TongTienHienCo;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:tienNguoiChoi forKey:@”TienNguoiChoi”];
[defaults synchronize];
}

– (void) LockScreen{
_btnShake.enabled = NO;
_segDatCuoc.enabled = NO;
_btnSet50.enabled = NO;
_btnSet100.enabled = NO;
}

– (void) UnLockScreen{
_btnShake.enabled = YES;
_segDatCuoc.enabled = YES;
_btnSet50.enabled = YES;
_btnSet100.enabled = YES;
}

– (void) UpdateScreen{
_lblTongTienHienCo.text = [NSString stringWithFormat:@”%i”, TongTienHienCo];
}

@end

* Cuối cùng đây là code mẫu cho mọi người tham khảo:

Source for this: http://www.mediafire.com/download.php?svd1naicqw9a1dn

Google Drive Link: https://docs.google.com/open?id=0B38uO5_VDZL4N015VkMtVmUxSGM

Product: LapKan Company Product (LK)
Coder: Huygamer
Blog: huygamer.wordpress.com

Dự án PHP và những vị trí cần thiết trong đó

* Những vị trí cần thiết trong một dự án PHP:

1. Database:

* Thiết kế database

– Thiết kế các bảng (Table, View)

– Các ràng buộc trong từng bảng (primary key, null, default value)

– Các mối quan hệ giữa các bảng trong database

– Nâng cấp các tính năng trong từng bảng (partition table, trigger, cluster)

2. General Code:

– Chuẩn của những form (Trừ những form chuyên dụng)

– Các phần chung nhất ở bên ngoài:
* Menu
* Connection
– Hệ thống phân quyền:
* Hiển thị trên menu
* Các phần về phân quyền (trả về giá trị được truy cập hay không)

3. Code HTML:

– Cụ thể hóa ra từng form trong chương trình
– Standard Script
– Thiết kế Script
– Nhìn lượng công việc có thể thấp hay cao phụ thuộc vào độ lớn và tài năng của các General coder, nếu general coder làm tốt thì việc lập trình của các HTML coder sẽ rất dễ dàng và nhanh chóng.
4. Report và documentary:

– Đưa nội dung vào trong website

– Thiết kế report

– Report data

5. Thiết kế xử lý: (Design Processing)

– Cách thức mỗi bảng và form liên kết với nhau.

– Luồng đi của dữ liệu

– Làm sao để chương trình chạy trơn tru và chính xác (lưu vết và chạy không bị lỗi) đó chính là nhiệm vụ của các designer Processing)

 

Website PHP thường là một hệ thống trung bình nên việc phân chia công việc cho từng người thực sự rất quan trọng, Mỗi người làm tốt trách nhiệm của mình sẽ khiến cho website hoàn tất rất nhanh chóng và có hiệu quả cao nhất. Tuy nhiên tại Việt nam, việc tiết kệm chi phí chưa đi vào chuyên môn hóa làm cho mỗi người phải đảm nhận nhiều vị trí khiến cho công việc tiến triển không nhanh và hiệu quả cũng không cao. Điều này do văn hóa của các nước phương Đông thiếu tinh thần trách nhiệm lại không có tính đoàn kết chỉ muốn một mình làm và chịu trách nhiệm suốt một khâu mà thiếu đi tính cộng tác giữa các thành viên.

 

1. Thiết kế database: Thiết kế cấu trúc dữ liệu:

+ Thiết kế các bảng

+ Trigger

+ Store procedure

+ View

* Standard: Thiết kế cơ sở dữ liệu quan hệ đầy đủ theo cấu trúc quan hệ giữa các bảng với nhau, bảng chứa đầy đủ các thông tin cần thiết cho việc lập trình và ghi dấu.

* Master: Sử dụng được các công cụ mạnh của SQL chứ không đơn thuần chỉ là tạo ra table. Các table có thể được chia làm các partition để lấy những dữ liệu cần thiết nhanh chóng hơn rất nhiều so với việc phải gọi toàn bộ bảng (table) ra trong một lần.

– Các replication (nhân rộng) rất có lợi trong việc kết nối và chia sẽ dữ liệu giữa các database. Các backup sẽ có lịch trình hẳn hoi và giảm thiểu khả năng mất mát dữ liệu. Các bảng (table) được liên kết chặt chẽ giúp cho việc lập trình trở nên vô cùng thuận lợi tránh sai sót ùừ chính database (lớp cuối cùng).


2. Cấu trúc: Đây có thể coi là kiến trúc sư của toàn nhà. Thiết kế cấu trúc của hệ thống và quản lý người dùng
+ Hệ thống quản lý người dùng
+ Hệ thống cấp quyền
+ Luồng đi của hệ thống
+ Các cách thức giải quyết vấn đề
* Standard: Đưa được ra cấu trúc chuẩn, lập trình viên chỉ việc lập trình phần nội dung (Content) mà không cần quan tâm đến những phần khác. Nếu tất cả đúng theo chuẩn do người cấu trúc tạo thì chương trình sẽ chạy vô cùng ổn định.
* Master: Lường trước hết mọi tình huống có thể xáy ra để làm cho lập trình viên phải làm ít việc nhất có thể.
Cấu trúc hệ thống tốt có thể tái sử dụng rất nhiều làm cho các lập trình viên
Các luồng đi và cách xử lý nếu được hoàn chỉnh sớm sẽ rất có lợi cho chương trình khi phát triển.

3. Template designer: Những người bắt nguồn từ thiết kế để làm trang web đẹp nhất có thể. Thiết kế trang web và những phần chung nhất của trang web:
+ Header
+ Footer
+ Banner
+ Hình ảnh động (Flash)
+ Datagrid, table
* Standard: Trang web đẹp hay xấu là do người thiết kế này
* Master: Website đẹp và có hình ảnh

4. Nội dung văn bản: Người viết nội dung của trang web
+ Giới thiệu về công ty
+ About us

+ Thông tin liên lạc

+ Các thông tin phụ (Giải thưởng, bằng chứng)  

+ Các nội dung chính

+ SEO (optional)

* Standard: Nếu như hình thức do template designer thiết kế thì người lo phần nội dung chính là người sẽ thu hút người sử dụng tiếp tục sử dụng website

* Master: Nội dung website có thể thu hút được người đọc. Có thể tối ưu hóa website (SEO) để tăng lượng truy cập.
5. Lập trình viên: Cách thức hiển thị và tính toán
* Standard: Viết cho chương trình chạy được theo đúng yêu cầsu
* Master: Có thể tạo ra các function và include các.
* Lập trình viên có thể chia làm 2 phần:
– Những người chuyên về những phần lập trình các thứ chuyên biệt: JavaScript và các phần chuyên biệt của chương trình
–  Những người chuyên về làm việc với các form chung.

Lập trình IDevice không khó

Genk với bài viết cực kì ngu xuẩn về lập trình Iphone:

Tạp chí  The New York Times  chia sẻ quá trình viết ứng dụng của đôi vợ chồng trẻ Shawn và Stephanie Grimes, 32 tuổi.

Năm 2011, Shawn, một chuyên gia về bảo mật, rất sốc khi công ty cho thôi việc trong đợt cắt giảm nhân sự. “Tôi làm việc chăm chỉ và cống hiến những gì tốt nhất nhưng rõ ràng, mọi thứ không nằm trong tầm kiểm soát của tôi”, anh chia sẻ. Sau đó, Shawn xin vào Google, nơi tiếp nhận nhận 2 triệu đơn xin việc mỗi năm, và bị từ chối.

Shawn quyết định dành thời gian viết ứng dụng hoạt động trên iPhone. Anh không ảo tưởng mình sẽ trở nên giàu có mà chỉ hy vọng có một cuộc sống đầy đủ trong nền kinh tế bấp bênh. Stephanie, vợ anh, cũng nghỉ việc ở nhà trẻ để hỗ trợ chồng với quyết tâm “được ăn cả, ngã về không”.


Shawn và Stephanie Grimes tiêu tốn 200.000 USD để viết ứng dụng và đầu tư công nghệ.

 

Tuy nhiên, với hàng trăm ứng dụng xuất hiện mỗi ngày trên App Store, Shawn sớm nhận ra mảnh đất này đang quá đông đúc và chật chội. Cả hai dự định viết mỗi tháng một ứng dụng, nhưng tiến độ đang chậm lại. Trong tháng 3 vừa qua, tất cả các chương trình của họ chỉ mang lại khoảng 20 USD mỗi ngày. Ngược lại, họ đầu tư khá lớn cho công nghệ như mua iMac 24 inch, màn hình cinema 24 inch, hai máy MacBook Air 13 inch, một MacBook Pro 15 inch, hai iPad 2, hai Apple TV, 2 iPhone 4S và một iPhone 3GS. Khi iPhone 5 ra đời, họ lập tức sắm hai máy vì “chúng tôi cần mua để thử nghiệm ứng dụng”.

Cuối cùng, Shawn nhận thấy anh cần có một công việc ổn định nên xin làm chuyên gia phát triển ứng dụng cho một công ty ở Oregon (Mỹ) dù vẫn dành thời gian cho sự nghiệp riêng.

Gần 2 năm theo đuổi giấc mơ lấy đi của gia đình Grimes gần 200.000 USD. Họ đã bán xe hơi, một số tài sản và chuyển từ căn hộ 6 phòng ngủ sang căn hộ 2 phòng ngủ. Đổi lại, 8 ứng dụng mà họ viết ra mang đến cho họ vỏn vẹn 4.964 USD.

“Tôi sẽ không dừng lại cho tới khi chết”, Grimes quả quyết.


Giống như đợt bùng nổ dot-com hơn một thập kỷ trước, ứng dụng di động là nguồn cảm hứng mới cho các doanh nhân trẻ. Họ coi smartphone và tablet như công cụ để khám phá, sáng tạo và chinh phục thế giới. iPhone và iPad hiện có hơn 700.000 ứng dụng, từ Instagram cho tới Angry Birds. Chỉ riêng kho trực tuyến App Store cũng đã tạo ra hẳn một ngành kinh tế tiền tỷ: Apple đã trả hơn 6 tỷ USD cho các chuyên gia phát triển. Instagram được Facebook mua lại vào tháng 4 với giá 1 tỷ USD.  

Nhiều câu chuyện khởi nghiệp được đăng tải về những công ty non trẻ với văn phòng chỉ vài người và hoạt động ngay trong bếp ăn nhưng kiếm về hàng triệu USD nhờ viết ứng dụng. Tuy nhiên, những tấm gương như Foursquare, Angry Birds, Instagram, Ninja Fruits hay Cut The Ropes chỉ chiếm tỷ lệ nhỏ trong số hàng trăm nghìn ứng dụng đang tồn tại trên thế giới.

Ngay cả tác giả của những ứng dụng triệu đô cũng gặp khó trong việc trình làng các ứng dụng thành công tiếp theo. (Đơn giản là vì họ bị dính cứng lấy phần mềm đầu, không nâng cấp thì mất khách, nâng cấp thì không có thời gian phát triển phần mềm mới)

Viết được một phần mềm hay đã khó, duy trì được thành công còn khó hơn. Ethan Nicholas, 34 tuổi, từng là một chuyên gia của Sun Microsystems. Là cha của hai cậu con trai, anh cần thêm nguồn thu nhập ngoài. Vì thế, cuối năm 2008, anh dùng thời gian rảnh viết game pháo binh trên iPhone – khi đó vẫn là một sản phẩm đầy mới mẻ với khoảng 11 triệu máy được tiêu thụ (so với con số 270 triệu ngày nay). iShoot bán được 17.000 bản giá 3 USD chỉ trong ngày Chủ nhật 11/1/2009. Sang ngày thứ Hai, anh nghỉ việc. Đến tháng 3 năm đó, Nicholas kiếm được hơn 1 triệu USD.

“Cực kỳ may mắn, ra đời đúng nơi, đúng thời điểm”, anh tổng kết lại nguyên nhân thành công.

Anh cùng với bạn là Brent Miller thành lập công ty với tham vọng tạo ra một ứng dụng triệu đô nữa. Nhưng không có trò chơi nào sau này của họ được như iShoot và cả hai phải chuyển hướng. Họ thành lập echoBase với 14 nhân viên chuyên phát triển ứng dụng cho bác sĩ theo dõi, cập nhật bệnh án.

EchoBase thu hút 4 triệu USD từ các nhà đầu tư nhỏ, trong đó Nicholas và cha con nhà Miller đóng góp 1 triệu USD. “Mọi tiền tiết kiệm và tiền hưu trí của tôi đã ra đi”, bố của Brent Miller nói. Họ bắt đầu kiếm được doanh thu khi thu hút 3.200 bác sĩ đăng ký, nhưng vẫn còn một chặng đường dài phía trước nếu muốn sinh lời.

“Tôi đã may mắn với iShoot bởi thời điểm đó, một ứng dụng khá cũng có thể thành công. Nhưng với sự cạnh tranh khốc liệt ngày nay, khá là chưa đủ”, Nicholas khuyến cáo các đồng nghiệp rằng cái thời kiếm tiền dễ dàng từ ứng dụng đã qua.
Link: http://genk.vn/kinh-doanh/lam-giau-tu-viet-ung-dung-iphone-khong-don-gian-20121119035731391.chn

III. Kết luận:
Sự ngu xuẩn của những tờ báo mạng đã góp phần tạo nên những bài viết bá láp và nhảm nhí như thế này đây. Genk là một trong những tờ báo lá cải và có nhiều bài viết với những tuyên bố cực kì ngu xuẩn.
Nào chúng ta hãy cùng nhau đánh giá bài viết ngu xuẩn của lũ genk này trước:
– Cặp vợ chồng này đã xạo quá đáng về số tiền đã bỏ ra để viết phần mềm. Họ đã bỏ ra bao nhiêu tiền cho việc phát triển?
– Sự đầu tư không kiểm soát cũng như những lối đi sai lầm trong cách thức làm việc mới chính là thứ làm cho họ không thể giàu được chứ không phải việc kiếm tiền từ việc viết phần mềm Iphone khó.
– Sự lựa chọn phát triển sai lầm. Chồng là chuyên gia bảo mật nhưng không phải là lập trình viên, vợ làm việc ở nhà trẻ, chuyên môn không hỗ trợ gì cho việc phát triển phần mềm (cần lập trình viên, thiết kế,…)

1. Sự đầu tư ngu xuẩn:
– Việc viết một phần mềm cho AppStore cần phải biết được bạn nhắm vào cái gì, thị trường nào. Cặp vợ chồng này mua tất cả những gì có thể từ Iphone cho tới Ipad và hầu như tất cả các hệ máy của Apple. Rút cuộc, họ muốn phát triển phần mềm cho máy nào? Iphone, Ipad hay Mac? Hoàn toàn không có chủ đích cho việc phát triển.
– Nên nhớ là những người này sống ở Mỹ, việc mua những iDevice rất dễ dàng và không bị đội giá như ở Việt Nam vậy toàn bộ cái đống phần cứng mà những người này liệt kê liệu có tới được 20,000$ không? Trong khi đó phần mềm của Mac dành cho việc phát triển phần mềm là miễn phí (Xcode, Cocoa).
– iMac 24 inch (Cái này thì để lập trình)

– Màn hình cinema 24 inch (Cái này làm cái gì?)

– Hai máy MacBook Air 13 inch (Mac Air không phải là máy tính tốt để lập trình)

– Một MacBook Pro 15 inch (Cái này cũng được nhưng mà quá dư thừa)

– Hai iPad 2 (1 cái là đủ cần gì 2 cái)

– Hai Apple TV: 99 $ (Cái này dùng để làm gì? Coi TV trong lúc lập trình à?)

– 2 iPhone 4S: (Lại 2 cái, chắc để 2 vợ chồng ngồi nói chuyện với nhau cho dễ hay sao vậy?)

– iPhone 3GS (Cái này dùng làm cái gì vậy?)

– Khi iPhone 5 ra đời, họ lập tức sắm hai (Lại 2, vợ chồng nhà này làm riêng à?)

=> Nhiêu đây mà 200,000$? Mạ vàng à?
– Đầu tư xa xỉ trong khi chưa có doanh thu để nuôi sống là điều tối kị trong kinh doanh trừ phi bạn hiểu rõ công việc đó và có kinh nghiệm rồi. Đầu tư quá lớn trong khi chưa biết thu về bao.
– Những gì bạn cần đầu tư chưa tới 2000$ bao gồm:
* 1 máy Mac ~1400$
* 1 Ipod hay 1 Iphone 500$ (chưa kể mua bên Mỹ với hợp đồng nhà mạng chỉ chưa đầy 100$)
* 1 account develop 99$
=> Đó là tất cả những gì cần để phát triển phần mềm cho Mac

2. Cách thức sai lầm trong việc phát triển
3. Tài năng yếu kém mà lại có suy nghĩ độc lập:
– Làm việc 2 năm mà càng làm chương trình càng chậm đó là điểm yếu kém của gia đình này. Trong khi với kinh nghiệm 2 năm thì việc phát triển phần mềm sẽ tiện lợi hơn rất nhiều vì rất nhiều những thứ sử dụng ở chương trình trước có thể xài lại và tiếp tục phát triển ngày càng đẹp và mạnh hơn
* Bài viết còn có những sai lầm ở chỗ
1. Sai lầm về vị trí địa lý và kinh tế:
– Công nghệ thông tin (IT) là một ngành thật sự rất đặc biệt. Nó không liên quan đến vị trí địa lý, không bị ảnh hưởng bởi nước mà bạn đang ở. Những ngành khác đó là đặc điểm có sức ảnh hưởng kinh khủng. Anh quét rác ở Việt Nam, lương 1 triệu nhưng anh quét rác ở Mỹ thì lương anh phải 2000$. Những người này đã làm được phần mềm có thể đem về hơn 600$ tháng thì nó đã đủ cho một lập trình viên ở Việt Nam sống rồi. Lúc đó chỉ cần phát triển thêm nữa mà thôi thế thì có gì là lỗ ghê gớm như những gì mà bài báo nói

2. Đưa ra ví dụ sai lầm:

– Đừng nhìn vào những người cao nhất, hãy biết vị trí mình ở đâu trong thế giới. Bạn đòi bước đi theo những người triệu đô vào thời điểm ngay khi bạn chưa bắt đầu. Đó đã là điều sai lầm của bạn. Những người triệu phú chỉ có 2 loại: Đúng thời hoặc làm việc vì đam mê. Mà họ đã thành công lớn nghĩa là thời cơ đã không còn to như lúc họ mới tham gia nữa, bạn nhắm theo đam mê vị thì đừng nhìn vào những người đó nữa.

– Chỉ biết phát triển phần mềm để bán mà không theo xu thế hiện tại, quảng cáo và các dạng thu tiền trong game hiện tại mới đúng là hướng đi chủ đạo, chăm chăm vào việc bán phần mềm theo dạng cũ (mua đứt 1 lần thì làm sao mà  khá cho nổi). Sự sai lầm trong chọn nghề nghiệp, bản thân người trong ví dụ không phải có chuyên môn là lập trình mà lại tham gia lập trình (ông chồng là chuyên gia bảo mật, bà vợ làm việc ở nhà trẻ) thế thì hỏi làm sao ra được một chương trình đàng hoàng cho được?

Upload chương trình Iphone lên AppStore

Upload một chương trình iphone lên trên AppStore cần phải qua rất nhiều bước để xác nhận quyền sở hữu và các phần liên quan tới máy Mac của bạn

Đây là link hướng dẫn những bước cần thiết để upload một chương trình Iphone đã hoàn chỉnh lên trên AppStore:

http://mobiforge.com/developing/story/deploying-iphone-apps-real-devices