Thursday, October 23, 2014

As a developer, what will you do (or will you be) when you are 40?

I received that question last night that makes me think a lot about it. It is not a simple question, its a big question that I rarely think about.
I think if some of you are being asked that question, you will have different answers. But let me guess, the most answers will be: “I want to become a manager”. Dont get me wrong, I have heard that saying from many people, most are my colleagues who are working on software outsourcing industry playing different roles: developer, business analyst, quality control.
Why do people prefer becoming a manager to a professional on the area they are working on? IMHO, it depends on the current situation of Vietnam. Vietnam is still a developing country and almost companies operating in software development earn money from building software for foreign countries – which is called outsourcing – because it has a benefit of low cost. Being part of outsourcing projects, as a developer, you have to constantly learn various technologies to meet technical specification. That’s good if you – a developer – are learning cutting edge technologies to build software but it’s also not so good that you are assigned to project which uses old technologies and all you have to do is to maintain and to enhance that legacy system. As an example, imagine your skill is .NET but the system have been built using VB6. Or you are very good at ASP.NET 3.5 but the system you are going to build uses ASP.NET1.1 or even worse, standard ASP. As a business analyst, you have to learn various business domains to understand software requirement, some are good since you are having a chance to learn new business domain which might take a very long time to be available in Vietnam such as Healthcare, e-commerce,… but it is not so good that that knowledge cant be applied in Vietnam at the time we finished building that software.  As a quality control engineer, you have to learn from testing Windows application to Web application and even embedded system or mobile platform as well to master tools to perform automation/performance testing. What if one day you find that your learning ability reaches its limitation that you cannot learn any more or not as fast as you ever were able to?
This leaves you behind people/technologies and you will become not suitable for the job. The ‘solution’ to escape that situation is to become a manager! The other reason for the answer – I mean ‘to become a manager’ – is because vnes people still have an ‘old’ thinking from themselves or their parents that becoming a manager – or ‘boss’ – showing that they have a successful career, or life.
But my answer is: ‘I will be coding, if I cannot code anymore, its a disaster’. Why? the reason is simple, I love coding. Funny huh? Being a developer means you are writing code to get the computer does what you want it to do. However, let the computer does what you want it to do is not the last shot, you have to do it beautifully that someone calls it ‘the art of programming’ and you have to be continuously improving youself to become an ‘artist’. Have you ever felt excited when the software you build not only runs smoothly but also the code you write is easy to read, to understand and is extendable? Have you ever felt happy when someone reviewed your code and said: “Its a beautiful code I’ve ever seen. It applies many good practices out there”? If your answer is ‘Yes’ then you know why I love to be a programmer – and I will when I am 40.
I once worked on a project which my client was a group of technical guys (5 ones, as I recalled) who were very passionate on coding. Some of them were almost over 40, one of them was over 50. What really inspired me was they loved coding crazily. Working with them made me love programming and becoming a professional programmer much more. Well, you might say since they live in a modern country and that their job is more respected, and well paid, compared to in Vietnam that makes them not worry about changing their career path to become a manager. I totally agree and respect your opinion. But please, follow your heart, do what you love to do, live your life, not others.
But if you still want to become a manager, please think about this a bit: skills to manage a software project still need to constantly be improved. It’s  obvious that the software world is changing too fast, not only technical people have to learn new technologies day by day but managers also need to learn new development process and methodologies as well how to apply it effectively, learn how to work with the team of members who are passionate, highly self-respected, learn how to inspire and encourage them, show how you recognize and appreciate their effort. This not only makes an effectively team, but also brings great successes.
Source http://huyrua.wordpress.com/2010/07/04/what-will-you-do-or-will-you-be-when-you-are-40/

Monday, July 21, 2014

LuckyTel SMS - Phần mềm gửi tin nhắn SMS 'đặc biệt'

Xin giới thiệu thêm 1 app cho phép gửi các tin nhắn SMS "đặc biệt" trên HĐH Android. Tin nhắn SMS "đặc biệt" là các tin nhắn ko thể gửi đc theo cách thông thường, làm nhiều người cảm thấy rất ngạc nhiên, không nghĩ lại có thể làm được, vì không cần cài thêm bất kỳ phần mềm ở máy đích (máy người nhận).


Mỗi tin nhắn SMS sẽ được gởi theo 1 gói tin PDU, và HĐH Android sẽ viết 1 hàm gởi tin nhắn SMS theo gói tin PDU, và các phần mềm thông thường sẽ gọi hàm này để gởi bình thường.

Nhưng trong 1 số HĐH Android cũ từ 2.2 đến 4.0 có hỗ trợ thay đổi gói PDU bởi hàm "sendRawPdu" nên chúng ta có thể gởi SMS theo 1 cách đặc biệt

Có nhiều kiểu gởi SMS đặc biệt mà những tài liệu không công bố rộng rãi như:

1. Replaceable Message - có thể thay thế tin nhắn SMS cũ của máy đich mà không cần cài thêm bất kỳ phần mềm trên máy đich, chỉ có hạn chế là thời gian sẽ cập nhật theo lần nhận cuối cùng, mình tìm tại liệu mô tả PDU, nhưng ko thấy nói cách kiểm soát được thời gian của tin nhắn SMS

2. Flash Message - khi máy đích nhận được tin nhắn SMS dạng này sẽ hiển thị ngay trên điện thoại, vì vậy bắt buộc người nhận tin nhắn phải đọc tin này.

Ngoài ra còn có những kiểu khác, nhưng mình chưa viết

3. SMS Marketing - Thêm một hỗ trợ trong phần mềm này là gởi môt danh sách tin nhắn SMS từ 1 link nào đó, mà mình có thể tạo link này một danh sách tin nhắn SMS theo định dạng JSON 

{
"results":{
"sms_list":[
{
"sms":{
"ID":"111063",
"SourceAddress":"",
"DestinationAddress":"84123456789",
"MsgContent":"Test 1\nNoi dung 18\/07\nTu LuckyTelSMS",
"Status":"checked",
"Created":"2014-07-19 15:46:14",
"LastUpdate":"2014-07-19 15:46:14"
}
},
{
"sms":{
"ID":"111064",
"SourceAddress":"",
"DestinationAddress":"84123456789",
"MsgContent":"Test 2\nNoi dung 18\/07\nTu LuckyTelSMS",
"Status":"checked",
"Created":"2014-07-19 15:46:24",
"LastUpdate":"2014-07-19 15:46:24"
}
},
{
"sms":{
"ID":"111066",
"SourceAddress":"",
"DestinationAddress":"84123456789",
"MsgContent":"Test 3\nNoi dung 18\/07\nTu LuckyTelSMS",
"Status":"sent",
"Created":"2014-07-19 15:46:24",
"LastUpdate":"2014-07-19 15:46:24"
}
}
],
"total_rows":"3",
"current_rows":3,
"rows_per_page":"3",
"error_msg":"",
"error_code":""
}
}

Cách này có thể hữu ích khi chúng ta cần gởi thông báo đến 1 danh sách số di động nào đó, hay nhu cầu gởi một mã xác nhận cho việc đăng ký thông tin nào của 1 website.

Ưu điểm: không cần mua những thiết bị không cần thiết như những phần mềm gửi tin SMS đồng loạt hiện nay là phải mua GSM Modem, mà chúng ta có thể sử dụng ngay những chiếc điện thoại Android đã trở nên phổ biến hiện nay để thực hiện.

Cải tiến: trong tương lai sẽ hỗ trợ cải tiến trả lời tự động theo những từ khoá định nghĩa sẵn trước đó, điều này không khác gì so với một tổng đài dịch vụ như hiện nay.

DOWNLOAD: https://play.google.com/store/apps/details?id=com.vietdoor.android.sendsms

Wednesday, July 2, 2014

Lập trình viên 2014: Những kỹ năng cần có?

(GenK.vn) - Là một lập trình viên, bạn cần có những kỹ năng quan trọng để có thể thích nghi với xu hướng mới của ngành công nghệ, để không trở nên lạc hậu và chậm tiến.

Tóm tắt bài viết:
- Công nghệ thông tin đang ngày càng phát triển một cách chóng mặt. Những gì bạn học hôm nay có thể nhanh chóng lạc hậu khi bạn tỉnh dậy vào ngày mai.
- Là một developer, bạn cần có những kỹ năng quan trọng để có thể thích nghi với xu hướng mới của ngành công nghệ, để không trở nên lạc hậu và chậm tiến.

Mỗi giây mỗi phút làm việc là cơ hội nhận được đầu tư đối với các nhà phát triển phần mềm lại tăng lên. Trong quá trình làm việc và cống hiến, các developer này hoàn toàn có thể quyết định cho riêng mình tiếp tục phát triển tri thức hay thỏa mãn với những gì mình đã có được. Đáng buồn thay, trong bối cảnh nền công nghệ thông tin phát triển nhanh chóng, vượt bậc như ngày nay thì lại có rất nhiều các lập trình viên cảm thấy thỏa mãn với những gì mình đang có, không có ý định học hỏi cái mới trong khi những kiến thức họ có được, thì ngay ngày hôm sau đã có thể trở nên lạc hậu.
Lập trình viên 2014: Những kỹ năng cần có?

Trong khi đó, vẫn còn rất nhiều các lập trình viên xác định được rõ mục tiêu của mình và quyết tâm đầu tư thời gian cho những mục tiêu đã đặt ra. Dẫu vậy, công nghệ phát triển như vũ bão, những developer cần mẫn này không thể chỉ chăm chăm vào học kiến thức mới mà còn phải biết nắm bắt xu hướng, hiểu rõ được những gì cần thiết, những gì sẽ trở thành công cụ đắc lực trong tương lai. Trong một cuộc nói chuyện và phỏng vấn các ứng viên, David Tucker, Giám đốc nghiên cứu và phát triển tại Universal Mind, đã chia sẻ một số kỹ năng mới mà lập trình viên năm 2014 cần có.
Nắm chắc kiến thức về một nền tảng di động nhất định
Di dộng đang và sẽ trở thành xu hướng của tương lai. Có rất nhiều cách cho các lập trình viên có thể phát triển các ứng dụng trên di động, từ việc thiết kế các website tối ưu cho di động ( web app ), phát triển ứng dụng lai dựa trên HTML ( hybrid app ) cho đến viết các ứng dụng gốc cho nền tảng ( native app ). Mặc dù có nhiều phương pháp để phát triển một ứng dụng cho di động nhưng chúng đều có một điểm chung đó là chạy trên mã gốc của một nền tảng nhất định. Do đó, khi một tổ chức muốn phát triển ứng dụng chạy trên một nền tảng nào đó, họ sẽ thường tuyển dụng các ứng viên có kiến thức chuyên sâu về nền tảng được yêu cầu, hiểu rõ các lớp, các thành phần của nền tảng dù cho ứng dụng có được phát triển theo kỹ thuật nào đi chăng nữa.
Lập trình viên 2014: Những kỹ năng cần có?

Với sự dẫn đầu của một số nền tảng phổ biến hiện nay trên thế giới như iOS, Android hay Windows Phone, các lập trình viên hoàn toàn có thể chọn cho mình một nền tảng ưng ý và thực sự tập trung học hỏi chuyên sâu về nền tảng đó trước khi chuyển sang các nền tảng khác.
Hiểu rõ về quy trình phát triển phần mềm Agile ( phát triển nhanh gọn )
Nói về quy trình phát triển phần mềm, thuật ngữ này không hẳn chỉ dành cho các quản lý dự án như nhiều người vẫn nghĩ. Một lập trình viên cũng cần phải hiểu được quá trình phát triển của một phần mềm như thế nào, theo dõi các tác vụ, tiến độ ra sao, làm việc với các lập trình viên khác như thế nào thì hiệu quả… Kể cả khi một lập trình viên "chiến" một mình một dự án thì cũng cần hiểu rõ về vấn đề này. Agile là một process giúp cho việc phát triển phần mềm được nhanh gọn và linh hoạt hơn do đó, nếu như các developer nắm bắt được process này và áp dụng một cách hiệu quả, quá trình phát triển phần mềm sẽ được rút ngắn và tinh gọn đi rất nhiều.
https://d262ilb51hltx0.cloudfront.net/max/812/1*9DkPsjO0lc5CsufTvnsGOw.png

Quy trình phát triển phần mềm nhanh gọn ( agile ) có rất nhiều phương pháp khác nhau như Scrum, Kanban, XP…và các lập trình viên cần chọn cho dự án của mình một phương pháp phù hợp dựa trên các tiêu chí đánh giá về dự án. Các bộ công cụ được cung cấp để có thể phát triển theo hướng agile một cách hiệu quả cũng rất nhiều, có thể kể đến như Pivotal hay Trello, giúp cho việc phát triển phần mềm được rõ ràng, nhanh gọn hơn so với các phương pháp truyền thống.
Biết tính toán, ước lượng một cách hiệu quả
Quá trình tính toán, ước lượng các công việc là một trong những giai đoạn yêu cầu cả nhóm làm việc chặt chẽ với nhau. Việc một dự án có thành công hay không không chỉ phụ thuộc vào các thuật toán, giải pháp… mà còn phụ thuộc rất nhiều vào độ chính xác của việc ước lượng, tính toán với công việc. Các developer mới vào nghề thì thường xem nhẹ quá trình ước lượng, tính toán này trong khi đối với các “lão làng”, đây là một trong những phần đáng lo ngại nhất và cẩn phải được xem xét kỹ lưỡng.
Lập trình viên 2014: Những kỹ năng cần có?

Chẳng có phương pháp ước lượng nào có thể hiệu quả cho tất cả các dự án. Các lập trình viên cần phải đưa ra các ước lượng dựa trên tình hình của dự án, đánh giá các tiêu chí, tham số… để đưa ra kết quả cuối cùng. Hơn thế nữa, không chỉ tính toán, ước lượng về các công việc của cả project, mỗi lập trình viên cũng cần phải biết ước lượng đối với các công việc của mình được giao. Với người mới, việc tính toán, ước lượng ban đầu có thể có sự chênh lệch lớn so với thực tế, tuy vậy, nếu như biết chăm chỉ luyện tập, rút kinh nghiệm thì sau mỗi lần đánh giá, độ chính xác của việc tính toán, ước lượng sẽ ngày càng được gia tăng.
Thông thạo Javascript
Cách đây vài năm thì có thể lời khuyên này không thực sự chính xác, nhưng trong bối cảnh hiện nay, javascript là một công cụ đắc lực trong việc phát triển phần mềm và dịch vụ. Với javascript, các lập trình viên hoàn toàn có thể viết ứng dụng di động, ứng dụng server, tạo blog và rất nhiều thứ khác nữa.
Lập trình viên 2014: Những kỹ năng cần có?

Không những thế, Javascript còn thường được sử dụng như tầng xử lý logic chung có khả năng chia sẻ giữa nhiều nền tảng như iOS và Android, giúp cho lập trình viên không phải viết lại code nhiều lần khi port ứng dụng sang nhiều nền tảng khác nhau.
Biết ít nhất một ngôn ngữ server-side
Thông hiểu ngôn ngữ server-side có thể được coi là một trong những yếu tố rất quan trọng. Dù bạn có là một lập trình viên chuyên phát triển các ứng dụng front-end ( phía người dùng ) thì bạn vẫn cần phải biết và hiểu rõ mọi thứ hoạt động như thế nào ở phần back-end ( phía server ). Khả năng có thể tạo ra các chuỗi liên kết từ phía ứng dụng front – end, thông qua API rồi truyền đến database ở phía server là một kỹ năng quan trọng.
Lập trình viên 2014: Những kỹ năng cần có?

Trong lĩnh vực này, các lập trình viên có rất nhiều lựa chọn để chọn cho mình một công nghệ phù hợp như sử dụng Java, .NET, Python hay PHP. Nếu một lập trình viên đã thông thạo ngôn ngữ javascript trước đó và nay muốn bắt tay vào tìm hiểu về back-end, NodeJS là một sự lựa chọn hoàn hảo. Bộ công cụ này cho phép các lập trình viên có thể thực hiện một số công việc cơ bản như tạo máy chủ web, chạy dịch vụ thử nghiệm cho ứng dụng di động cũng như triển khai ứng dụng lên đám mây với các dịch vụ như Heroku hay Nodejitsu.
Trang bị kiến thức về HTML và CSS
Công nghệ web đã quá phổ biến trên Internet và nó có mặt gần như khắp mọi nơi. Hầu hết các nền tảng phổ biến hiện nay đề có khả năng nhúng và xử lý nội dung web. Vì vậy, dù cho bạn không phải là một web developer thì việc hiểu biết về HTMl hay CSS cũng vẫn sẽ đem lại nhiều lợi ích cho bạn sau này. Hơn thế nữa, mỗi developer nên có cho mình một trang blog riêng giới thiệu về tiểu sử, trình độ, kinh nghiệm.. và khi cần tạo các trang blog như thế này, bạn sẽ không phải mất nhiều thời gian để xây dựng khi đã có sẵn trong đầu các kiến thức về web, đặc biệt là HTML và CSS.
Lập trình viên 2014: Những kỹ năng cần có?

Biết cách tìm kiếm thông tin nhanh chóng
Chẳng có ai cái gì cũng biết, nhưng có những thứ bạn không biết mà người khác lại biết. Internet sinh ra để gom những kiến thức lại đó giúp người dùng có thể truy cập dễ dàng hơn khi cần. Hơn ai hết, một lập trình viên cần phải có kỹ năng tìm kiếm thông tin và phải là tìm kiếm một cách có hiệu quả. Điều này giúp các lập trình viên có thể rút ngắn rất nhiều thời gian thu nạp kiến thức và có thể tập trung được nhiều hơn vào việc phát triển phần mềm. Việc tham gia vào các cộng đồng dành cho các nhà phát triển thậm chí còn rút ngắn thời gian tìm kiếm của lập trình viên hơn nữa thay vì chỉ tìm kiếm trên các công cụ phổ thông như Google hay Bing.
Lập trình viên 2014: Những kỹ năng cần có?

StackOverFlow là một trong những cộng đồng các nhà phát triển đông đảo nhất trên thế giới. Ở đây, bạn hoàn toàn được tự do học hỏi, đặt ra các thắc mắc và cộng đồng phát triển trên toàn thế giới sẽ trả lời giúp bạn. Tuy vậy, hãy nhớ tìm kiếm xem câu hỏi của mình đã được đề ra trước đó chưa và có ai trả lời chưa. Nếu như bạn có thể tìm kiếm câu trả lời mà không cần tự đặt câu hỏi, điều đó thực sự rất tuyệt.
Code có tầm nhìn
Trong quá trình phát triển dự án có rất nhiều điều có thể xảy ra. Ví dụ, sau vài năm phát hành một ứng dụng nào đó, có thể vào một ngày đẹp trời bạn quyết định biến nó thành ứng dụng mã nguồn mở cho cả cộng đồng có thể học hỏi, sử dụng; hay bạn hoàn toàn có thể phát triển thêm phiên bản Windows Phone cho ứng dụng của mình sau khi phát hành trên Android và iOS chỉ đơn thuần vì bạn nhận thấy tiềm năng của nền tảng này. Có rất nhiều yếu tố quyết định đến số phận của dự án mà bạn, một developer cần phải nắm được. Với tư cách là một nhà phát triển, điều quan trọng ở đây là bạn phải hiểu những lựa chọn của mình ảnh hưởng như thế nào để khả năng port ứng dụng sang nền tảng khách hay khả năng mở rộng ứng dụng trong tương lai dựa trên những gì đã được hoàn thiện. Do đó, chính bạn, developer cần phải nắm rõ được mình đã code những gì và những dòng code đó sẽ đóng vai trò như thế nào đối với tương lai, số phận của dự án.
Thông thạo về Git
Git là một công cụ phổ biến đối với hầu hết các cộng đồng phát triển phần mềm và có phần vượt trội so với các công cụ khác. Git không chỉ là một hệ thống kiểm soát phiên bản ( Version Control System ) bình thường mà hơn thế nữa, nó còn tác động đến cả quy trình phát triển phần mềm thông qua mô hình “git-flow”. Mô hình này có thể làm việc hoàn toàn hiệu quả đối với những dự án chỉ có từ vài người đến vài chục người, thậm chí là một developer cân cả dự án. Để hiểu rõ hơn về “git-flow”, bạn có thể xem sơ đồ dưới đây
https://d262ilb51hltx0.cloudfront.net/max/800/1*1gasDspx1urXbHPXqgjVGw.png

Sử dụng các công cụ quản lý tác vụ và lỗi
Việc kiểm soát các tác vụ và lỗi phát sinh là một công việc rất đỗi bình thường mà các developer vẫn thực hiện hàng ngày. Cộng đồng các nhà phát triển thường sử dụng các công cụ miễn phí nhưng hiệu quả như Github Issues hay Bitbicket cũng như các hệ thống phức tạp hơn như JIRA. Việc kiểm soát tác vụ và lỗi phát sinh là công đoạn rất quan trọng, do đó, các developer cần học cách sử dụng các công cụ hỗ trợ công việc này. Việc nắm bắt được quy trình kiểm soát tác vụ và lỗi phát sinh sẽ giúp rút ngắn thời gian phát triển một cách đáng kể.
http://icons.iconarchive.com/icons/danleech/simple/1024/github-icon.png

Đừng bao giờ nghĩ rằng nếu bạn là một nhà phát triển ứng dụng, 100% trách nhiệm của bạn sẽ dồn vào những dòng code bạn viết. Để trở thành một nhà phát triển lão luyện, bạn cần phải có những kỹ năng trải khắp từ kiến thức về công nghệ, quy trình và sử dụng các công cụ hỗ trợ công việc. Với nhu cầu kỹ thuật số ngày càng gia tăng, công nghệ thông tin ngày càng lan rộng thì bạn, một developer, với những hành trang đầy đủ về kỹ năng và kiến thức bắt kịp xu hướng sẽ nhanh chóng nhận được những yêu cầu tuyển dụng ưng ý. Chúc các bạn thành công!
Tham khảo: medium.com

Saturday, April 19, 2014

Cảm nhận khi lên Windows Phone 8.1

- Có chứ trọng đến phần Cloud, xem mấy file đồng bộ với OneDrive (hồi trước là SkyDrive)
- Nhiều option để chỉnh sữa màn hình chờ
- Có thêm phần hiển thị những thông báo của các app
- Có thêm phần setting nhanh mấy cái cơ bản
- Gõ dc TELEX
- Camera cũng có nhiều option để chụp

Nhưng có vài cái cơ bản cho chức năng phone mà lại thiếu như:
- Duration của 1 cuộc gọi
- Xem số di động của 1 contact vừa gọi (nếu contact đó có 2 số)
- Khi gọi, user gõ số hay tên, nó ko gợi ý những danh sách contact

Wednesday, June 19, 2013

Haier HXT, Dongle and Sm@rt Eye Android: Smart TVs with Android OS

Bên dưới là bản tin tiếng Anh về 1 sản phẩm phần cứng Smart TV, hy vọng là sẽ có phần mềm của mình được nhúng trên những thiết bị này.

----------------

The Chinese manufacturer Haier has presented some of its new products for the first half of 2013 in Las Vegas CES. The first is the adapter Dongle Android, a device that allows you to convert virtually any TV on market into a Smart TV. It is followed by new series of Haier HXT Android TVs with Android 4.2 OS, Qualcomm Snapdragon quad-core processor up 55 inches and a handy remote control multi-purpose screen. Meanwhile, the new Sm@rt Eye Android TV camera combines a Full HD integrated features Smart TV, also running through version Android 4.2 or Jelly Bean, to enjoy the benefits of connected TV any screen with HDMI port and USB.
Dongle Android is a device that allows you to convert virtually any TV market on a Smart TV

The new Haier Dongle Android Adapter comes as a Smart TV that connects to the HDMI port and USB for Haier TVs or other brand, always having these connections. The Dongle works with Android version 4.1 Jelly Bean. It is equipped with an ARM Cortex A9 dual core 1.6 Ghz processor. It has 1 GB of memory RAM, 4 GB of storage and GPU Mali 400. As for connectivity, the Haier Android Dongle incorporates an HDMI port, USB 2.0, card reader Micro-SD, infrared, WiFi and DLNA. It also comes with a standard gyroscopic remote control for easy menu navigation and management of applications. Haier announced the availability of new Android Dongle from April 2013, with a suggested retail price of 130 USD.

The new Haier Android HXT TV is a Smart TV that incorporate Qualcomm Snapdragon processor and quad core MPQ8064 run under the operating system Android 4.2. These new Smart TV look very elegant, with virtually no screen frame and a support base or flat. The display, with LED backlight offers resolution Full HD, supports 3D images, and is available in sizes up to 55 inches.

The new Haier Android HXT TV is a Smart TV that incorporate Qualcomm Snapdragon processor and quad core MPQ8064 run under the operating system Android 4.2. These new Smart TV look very elegant, with virtually no screen frame and a support base or flat. The display, with LED backlight offers resolution Full HD, supports 3D images, and is available in sizes up to 55 inches.
the Haier Android Dongle incorporates an HDMI port
With network connectivity and WiFi, the Android Haier HXT have all the benefits of access to Internet for thousands of available applications, such as games or information services, access to social networks and music and movies. It also includes a complete multipurpose remote control, besides the usual functions of TVs it also allow to use it as a joystick, microphone or keyboard to control the Android applications. These interesting televisions will reach the market next October, at a price to be determined.

Finally, the Haier Sm@rt Android TV combines the functionality of Smart TV with Android OS and an integrated camera with resolution Full HD (1920 x 1080 pixels). Just as HXT televisions, the Sm@rt Android TV uses the operating system Android 4.2, and the same Qualcomm Snapdragon quad-core processor, graphics card with Adreno 320. It also includes multipurpose remote, and the panel shall find an outlet connections HDMI port, one USB, WLAN WiFi and DLNA. The Haier Sm@rt Eye Android will arrive in the month of April, and its price is recommended retail of 200 USD.

Sunday, May 31, 2009

Cuộc chiến của các máy tìm kiếm - Nhìn từ một góc độ khác!

Đọc bài viết trên blog thầy Duy, thấy một "chiêu" thật hay của Google làm phân tán sự chú ý vào "quảng cáo" của các đối thủ. Đúng là một tuyệt chiêu cần học hỏi.

James

http://ledduy.blogspot.com/2009/05/cuoc-chien-cua-cac-may-tim-kiem-nhin-tu.html

Như vậy là sau Cuil, Wolfram Alpha, đến lượt Microsoft Bing lại làm xôn xao cộng đồng những người dùng Internet về cuộc chiến với Google. Tại sao Google lại có nhiều "kẻ muốn tấn công" như vậy? Lí do chính đó là lợi nhuận. Thị trường quảng cáo trực tuyến hiện nay chiếm từ 10%-15% tổng giá trị của thị trường quảng cáo nói chung (bao gồm quảng cáo trực tuyến, trên tivi, báo chí, pano, ...). Trong năm 2008, theo IDC thì chi phí quảng cáo trực tuyến toàn cầu lên đến 65 tỉ USD. Theo số liệu vào tháng 03.2009, thì Google chiếm trên 63% số lượng tìm kiếm ở US, với hơn 293 triệu lượt tìm kiếm mỗi ngày. Nói một cách khác, miếng bánh béo bở của thị trường quảng cáo trực tuyến đang được Google "nuốt" phần lớn!

Với mỗi máy tìm kiếm mới ra đời, câu hỏi đầu tiên luôn được mọi người quan tâm là nó có phải là "Google killer" hay không? Trả lời câu hỏi đó, có nghĩa là phải làm nổi bật lên điểm mạnh nhất, điểm khác biệt nhất so với Google hiện tại. Và những điểm nổi bật này, thông thường sẽ được quá trình marketing, PR của các công ty thực hiện, để thu hút sự chú ý của công chúng.

Nếu bạn là Google, chắc chắn là bạn sẽ không ngồi yên để "kẻ thù" (competitor) tấn công mà không có động thái gì. Bên cạnh không ngừng cải tiến chất lượng và tính hiệu quả của hệ thống, những chiêu thức khác ngoài chuyên môn cũng có thể được triển khai.

Theo thống kê của Mark [3], những sự kiện có vẻ như rất "tình cờ" sau của Google, rất làm cho người ta tin rằng Google không ngồi yên trước những đối thủ cạnh tranh.

- Ngày 28.07.2008, Cuil ra mắt với tuyên bố đã đánh chỉ mục hơn 120 tỉ trang web, và cho rằng con số này gấp 3 lần các máy tìm kiếm hiện có. Tuy nhiên, trước đó 3 ngày, 25.07.2008, Google đã tuyên bố trên blog của họ rằng, họ đã đánh chỉ mục hơn 1,000 tỉ trang.

- Ngày 25.02.2009, Cuil giới thiệu tính năng đoạn trích (snippet) cho mỗi kết quả tìm kiếm dài hơn. Ngày 24.03.2009, Google giới thiệu hai cải tiến mới, trong đó có đoạn trích dài hơn.

- Gần đây nhất, ngay trong ngày Wolfram Alpha ra đời, nhấn mạnh tính năng tổ chức dữ liệu để trả lời cho câu hỏi của người dùng, Google cũng đưa ra tính năng tương tự.

- Và cuối cùng, ngay trong ngày 28.05.2009, khi mà Steve Ballmer giới thiệu về cỗ máy tìm kiếm mới Microsoft Bing ở San Diego thì ở gần đó, tại San Francisco, Google giới thiệu về Wave.


Đằng sau các sự tình cờ đó là gì, người ta suy đoán rằng, có hai lí do chính:

- Thứ nhất, Google muốn phân tán sự chú ý của người dùng với các đối thủ cạnh tranh. Với vị thế của Google, thì bất cứ thứ gì Google công bố, đều có sự thu hút nhất định. Đó là lí do mà trong ngày 28.05.2009 vừa qua, sự chú ý tới Bing không hoàn toàn trọn vẹn như mong đợi.

- Thứ hai, Google muốn khẳng định với người dùng rằng, họ vẫn liên tục cải tiến và những gì đối thủ của họ cho là điểm mạnh thì họ cũng có. Do đó, ko có lí do gì để chuyển từ Google sang đối thủ của họ.


Trong một bài phản biện lại các "nghi ngờ" về "động cơ của Google" trong các sự kiện trên, Matt Cutts (nhân viên Google) đã lí giải rằng mọi chuyện đều ngẫu nhiên mà thôi. Ví dụ chuyện Cuil, Matt cho rằng Google đã dự định công bố việc đánh chỉ mục được 1,000 tỉ trang web từ giữa tháng 6, nhưng sau đó công bố này bị hoãn lại hơn 1 tháng. Hay trong chuyện của Wolfram Alpha thì là lí do em bé của blogger ra đời sớm hơn dự định làm bài blog lẽ ra được dự định công bố sau nhưng lại công bố trước và trùng ngày công bố của Wolfram Alpha.

Không ai có thể nghi ngờ một sự thật: những gì đối thủ của họ làm được, Google cũng sẽ làm được! Thậm chí Google còn làm được sớm hơn cả đối thủ của họ (trường hợp của Cuil là một ví dụ). Nhưng nếu là bạn, bạn có tin vào những giải thích về sự "tình cờ" kia không? Tại sao việc công bố kích thước chỉ mục lại bị dời đến hơn 1 tháng, và rất gần với ngày ra đời của Cuil, nhắm đúng vào điểm mạnh mà Cuil muốn "bố cáo" với thiên hạ? Tại sao sự kiện em bé sinh sớm lại đẩy việc công bố tính năng tương tự như Wolfram Alpha đúng vào ngày Wolfram Alpha ra đời. Cũng nói thêm ở đây là tính năng tương tự đó chỉ mới thực hiện được trên 2 tập dữ liệu mà thôi, nghĩa là vẫn chưa đủ hoàn hảo như của Wolfram Alpha. Danny Sullivan thậm chí còn cho rằng, Google đã không chỉ một lần làm như vậy.

Vậy mới thấy, cuộc chiến với Google không đơn giản chút nào. Có những việc tưởng như rất nhỏ, không ai để ý đến, nhưng đều tiềm ẩn những "tuyệt chiêu" để làm yếu đối thủ.

Tham khảo:
1. Quảng cáo trực tuyến
http://vietnambranding.com/thong-tin/chuyen-de-thuong-hieu/6618/Anh-chi-phi-quang-cao-truc-tuyen-tang-manh
http://www.vnmedia.vn/newsdetail.asp?CatId=35&NewsId=135802#
http://quangbawebsitevn.wordpress.com/2007/12/29/qu%E1%BA%A3ng-cao-tr%E1%BB%B1c-tuy%E1%BA%BFn-s%E1%BA%BD-la-ngu%E1%BB%93n-thu-l%E1%BB%9Bn-c%E1%BB%A7a-microsoft/

2. Thị phần tìm kiếm của Google
http://blog.usaseopros.com/2009/04/15/google-reaches-293-million-hits-per-day-in-march-2009/

3. Thảo luận về chiêu "chơi trội" (steal other's thunder)
http://www.marksonland.com/2009/04/google_likes_to_steal_others_t_1.html
http://www.mattcutts.com/blog/stealing-thunder/
http://www.techcrunch.com/2009/05/28/what-just-happened-thursday-was-supposed-to-be-bing-day/?awesm=tcrn.ch_2oM&utm_campaign=techcrunch&utm_content=techcrunch-autopost&utm_medium=tcrn.ch-twitter&utm_source=direct-tcrn.ch
http://searchengineland.com/did-google-cleverly-upstage-microsofts-bing-20185

Lê Đình Duy

Thursday, May 7, 2009

Vài điều suy ngẫm khi viết phần mềm và tối ưu hoá code

Trong lập trình, bình thường ta viết code chủ yếu là làm sao đáp ứng được yêu cầu của khách hàng. Từ khâu phân tích những yêu cầu, có cái nhìn tổng quan. Sau đó các manager của dự án sẽ giao việc cho các thành viên viết những phần nào đó của dự án. Các thành viên sẽ nắm bắt bản thiết kế, hiểu ý nghĩa của từng class, module, để xây dựng những hàm đáp ứng yêu cầu.

Quá trình phát triển thành sản phẩm, các tester và khách hàng sẽ "duyệt" qua sản phẩm của chúng ta và đưa ra những bugs (nếu tìm thấy) cũng như họ muốn những yêu cầu khác để sản phẩm tốt hơn (mà trước đây họ chưa hình dung ra được).

Điều này đã làm các thành viên viết phần mềm phải chỉnh sữa lại code của mình để đáp ứng yêu cầu đó. Thời gian này, manager và programers nhiều lúc lo chỉnh sữa để kịp tiến độ mà quên đi theo đúng cấu trúc, ý nghĩa của mô hình đã phân tích. Cũng có thể manager đã ko lường trước hết vấn đề, nhưng thực tế cũng có nhiều thứ mà chúng ta không thể biết hết được.
Đó là một trong những trở ngại mà chúng ta hay gặp khi viết phần mềm. Nhiều lúc đã làm dự án chúng ta thất bại. Cũng có trường hơp chúng ta phải xây dựng lại và có tham khảo đến mô hình đã thất bại.

Một điều nữa là khi viết code, chúng ta không chú trong để cách viết, gây khó khăn cho những thành viên khác cùng tham gia viết một lớp, module với mình. Vì ko có standard code. Đã có nhiều bài viết về quy định chuẩn cho việc viết code rồi (nên không nói ra ở đây).

Và nếu viết những ứng dụng thời gian thực, chúng ta cũng cần để ý cách viết sao cho tối ưu. Code của lệnh if, vòng lặp, đệ quy cần phải chú ý, vì đó sẽ là những phần tốn nhiều thời gian xử lý. Đối với những compiler ngày nay, họ cũng đã chú ý nhiều đến vấn đề này, nhưng cũng có nhiều trường hợp phải có sự hỗ trợ của programmer. Có một thư viện hỗ trợ cho CPU của Intel dựa trên tập lệnh MMX, SSE, SEE2, SEE3. Có một bài nói về vấn đề này tại đây. Và tận dụng tối đa CPU bởi việc lập trình song song (VS2005 hỗ trợ lập trình song song với OpenMP)

Trên đây là vừa điều mà tôi đã gặp phải trong quá trình viết phần mềm.

James