Friday, June 13, 2014

Tổng hợp nhạc Baroque kích thích trí não, giúp học tập và làm việc đạt hiệu quả cao

Đây là tổng hợp các nhạc Baroque có giai điệu, tần số phù hợp với sóng não giúp kích thích trí não, giúp học tập và làm việc đạt hiệu quả cao.

Tiến sĩ Georgi Lozanov, nhà tâm lý học nổi tiếng người Bulgaria, từng thực hiện một nghiên cứu trong đó ông cho những tình nguyện viên vừa học ngoại ngữ vừa nghe thể loại nhạc Baroque (nhạc Baroque là thể loại nhạc cổ điển thịnh hành vào thế kỷ 17-18 với các nhạc sĩ lỗi lạc như Bach, Vivaldi, ...) với nhịp điệu 60 nhịp một phút. Sau một ngày học ngoại ngữ, những học sinh này sẽ trải qua một bài kiểm tra. Kết quả cho thấy cho thấy chỉ trong một ngày các đối tượng nghiên cứu có thể học số lượng từ đến 1000 từ mà bình thường phải mất một học kỳ mới học được. Hơn thế nữa, những học sinh trên có thể nhớ đến 92% những gì đã được học. Chỉ bằng việc lắng nghe nhạc Baroque khi đang học, thời lượng cần thiết để thông thạo một ngoại ngữ được giảm từ 2 năm xuống 30 ngày. Và những sinh viên tham gia nghiên cứu trên có khả năng nhớ những từ mình đã học thậm chí sau 4 năm mà không cần ôn tập.



Những tập đoàn khổng lồ như IBM và Shell, cùng với một loạt các trường trung học và đại học nổi tiếng, đã và đang sử dụng âm nhạc để giảm thời lượng học và tăng cường khả năng truy xuất thông tin. Việc nghe nhạc còn làm tăng khả năng và năng suất làm việc một cách đáng kể. Nghiên cứu cũng cho thấy nghe nhạc Mozart và những bản nhạc Baroque giúp sinh viên cảm thấy bình tĩnh, tập trung hơn, và tăng cường khả năng trí tuệ.

Nhạc Baroque có những tác dụng cụ thể nào về mặt sinh lý học? Khi chúng ta lắng nghe theo nhịp điệu đều đặn của thể loại nhạc này, 60 nhịp một phút, nhịp tim, huyết áp và sóng não đều thư giãn theo điệu nhạc. Nhịp tim chậm lại, huyết áp giảm đi, sóng não beta giảm 6% trong khi sóng não alpha (thích hợp cho học tập và trí nhớ) tăng 6%. Âm nhạc giúp bạn đi vào trạng thái thư giãn nhưng tỉnh táo (relaxed alertness) -- trạng thái tối ưu cho học tập và làm việc.

Friday, June 6, 2014

Cách đếm số ký tự UTF-8 trong JAVA

Cách đếm số ký tự UTF-8 trong JAVA

/**
 *
 * @author HuanLT
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here+
        String g = "lê";
       
        System.out.println("" + countUTF8Length(g));
    }


    // count utf-8
    public static int countUTF8Length(String str)
    {
        int count = 0;
        for (int i = 0; i < str.length(); ++i)
        {
            char c = str.charAt(i);
            if (c < 0x80)
            {
                count++;
            } else if (c < 0x800)
            {
                count +=2;
            } else if (c < 0x8000)
            {
                count +=3;
            } else {
                throw new UnsupportedOperationException("not implemented yet");
            }
        }

        return count;
    }
}

Monday, June 2, 2014

Agile Software Development - Phát Triển Phần Mềm Linh Hoạt



1. Thực trạng

Các Công Ty outsource ở việt nam khách hàng chủ yếu là Nhật bản, xu thế các dự án ngắn hạn, thời gian triển khai dự án gấp rút, khách hàng thực hiện việc thiết kế và code đồng thời dẫn đến việc spec luôn thay đổi.

Làm oursource có lẽ  Coder luôn bị ám ảnh về việc Spec thay đổi, là Coder bản thân tôi cũng thường đau đầu với việc khách hàng thay đổi spec nhưng ngược tiến độ lại không được co dãn, có khi vừa hoàn thành xong thì khách hàng bỏ đi, thêm mới, thay đổi CSDL ... bla bla, tất cả điều này đều làm ảnh hưởng tới tâm lý của Coder, Teamleader. Lãnh đạo thì không kịp trở tay để update plan theo những thay đổi mới, nếu quản lý thay đổi không tốt dự án có NGUY CƠ bị failure là điều hoàn toàn có thể xảy ra.

2. Đối mặt

Để đối mặt với thực trạng nêu trên thì  Agile software development  là lựa chọn hoàn hảo để đề xuất vào lúc này.

Thuật ngữ "Agile" chính thức được sử dụng rộng rãi theo cách thống nhất kể từ khi “Tuyên ngôn Agile” được giới thiệu ra công chúng năm 2001. Nhờ tính linh hoạt, đa dạng và hiệu quả cao, các phương pháp Agile ngày càng trở thành sự lựa chọn hàng đầu của các khách hàng, nhà phát triển, các công ty phát triển phần mềm. Theo khảo sát của hãng nghiên cứu thị trường Forrester, mức độ phổ biến của Agile hiện đang ở mức cao nhất nhờ việc đem lại hiệu quả cao gấp nhiều lần so với các phương phán truyền thống.

Tuyên ngôn của Agile




Cá nhân và tương tác hơn là Quy trình và công cụ.

Phần mềm chạy tốt hơn là Tài Liệu đầy đủ.

Cộng tác với khách hàng hơn là Đàm phán hợp đồng.

Phản hồi với thay đổi hơn là Bám sát kế hoạch.


A. Giới thiệu -  Agile software development
 
Agile software development is a group of software development methods based on iterative and incremental development, in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen tight iterations throughout the development cycle.  http://en.wikipedia.org/wiki/Agile_software_development

Về cơ bản thì phát triển phần mềm Linh Hoạt dựa trên nguyên lý Tiến Hóa và Lặp, luôn thay đổi để tốt hơn, công việc chia theo chu kỳ, mỗi chu kỳ cho ra một sản phẩm hoàn chỉnh, chu kỳ sau cho ra sản phẩm tốt hơn, hoàn chỉnh hơn chu kỳ trước đó, khuyến khích sự phản ứng nhanh, thay đổi kế hoạch linh hoạt để đáp ứng thay đổi và các chu kỳ vẫn cứ được lặp đi lặp lại, cứ tiến hóa cho đến khi kết thúc dự án.
B. Đặc trưng Agile

Tính lặp (Iterative)

Dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại. Các phân đoạn (được gọi là Iteration hoặc Sprint) này thường có khung thời gian ngắn (từ một đến bốn tuần). Trong mỗi phân đoạn này, nhóm phát triển thực hiện đầy đủ các công việc cần thiết như lập kế hoạch, phân tích yêu cầu, thiết kế, triển khai, kiểm thử (với các mức độ khác nhau) để cho ra các phần nhỏ của sản phẩm. Các phương pháp agile thường phân rã mục tiêu thành các phần nhỏ với quá trình lập kế hoạch đơn giản và gọn nhẹ nhất có thể, và không thực hiện việc lập kế hoạch dài hạn. 



Tính tiệm tiến (Incremental) và tiến hóa (Evolutionary)

Cuối các phân đoạn, nhóm phát triển thường cho ra các phần nhỏ của sản phẩm cuối cùng. Các phần nhỏ này thường là đầy đủ, có khả năng chạy tốt, được kiểm thử cẩn thận và có thể sử dụng ngay (gọi là potentially shippable product increment of functionality). Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các phần chạy được này sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu của khách hàng được thỏa mãn.

Xem việc thay đổi Spec chỉ là tất yếu (thích nghi – adaptive)

Do các phân đoạn chỉ kéo dài trong một khoảng thời gian ngắn, và việc lập kế hoạch cũng được điều chỉnh liên tục, nên các thay đổi trong quá trình phát triển (yêu cầu thay đổi, thay đổi công nghệ, thay đổi định hướng về mục tiêu v.v.) đều có thể được đáp ứng theo cách thích hợp . Ví dụ, trong Scrum – phương pháp phổ biến nhất hiện nay – trong khi nhóm phát triển sản xuất ra các gói phần mềm, khách hàng có thể đưa thêm các yêu cầu mới, chủ sản phẩm (Product Owner) có thể đánh giá các yêu cầu này và có thể đưa vào làm việc trong phân đoạn (được gọi là Sprint trong Scrum) tiếp theo. Theo đó, các quy trình agile thường thích ứng rất tốt với các thay đổi.

Nhóm tự tổ chức và liên chức năng

Cấu trúc nhóm agile thường là liên chức năng(cross-functionality) và tự tổ chức(self-organizing). Theo đó, các nhóm này tự thực hiện lấy việc phân công công việc mà không dựa trên các mô tả cứng về chức danh (title) hay làm việc dựa trên một sự phân cấp rõ ràng trong tổ chức. Các nhóm này cộng tác với nhau để ra quyết định, theo dõi tiến độ, giải quyết các vấn đề mà không chờ mệnh lệnh của các cấp quản lý. Họ không làm việc theo cơ chế “mệnh lệnh và kiểm soát” (command and control). Nhóm tự tổ chức có nghĩa là nó đã đủ các kĩ năng (competency) cần thiết cho việc phát triển phần mềm, do vậy nó có thể được trao quyền để tự ra quyết định, tự quản lí và tổ chức lấy công việc của chính mình để đạt được hiệu quả cao nhất.
3. Kinh nghiệm bản thân
Công nghệ Agile cung cấp rất nhiều phương pháp luận, quy trình và các thực nghiệm để cho việc phát triển phần mềm trở nên nhanh chóng và dễ dàng. Hiện nay tại Việt Nam, quy trình này đang được thử nghiệm tại các đội phát triển phần mềm của một số công ty lớn. 


Có nhiều phương pháp Agile, nhưng phổ biến nhất là Scrum cho hiệu quả cao nếu áp dụng đúng, điều mà mình thấy tâm đắc nhất ở đây đó là kế hoạch, Linh Hoạt nhưng vẫn đảm bảo rõ ràng.

Hàng ngày mỗi nhóm sẽ có một buổi họp nhanh khoảng 15 phút và mọi người sẽ trả lời 3 câu hỏi:
Hôm qua bạn làm gì?
Hôm này bạn sẽ làm gì?
Bạn gặp trở ngại gì?

Nhóm trưởng ghi và cập nhật vào bản kế hoạch để theo dõi tiến độ công việc của đội và chia sẻ kế hoạch đó cho toàn đội.

Việc quản lý nhóm + kết hợp lập trình cặp + clearn code sẽ cho kết quả cao, đẩy nhanh tiến độ và chất lượng sản phẩm được cải thiện rõ.

Mình xin chia sẻ thêm một số kinh nghiệm mình note lại trong quá trình làm việc xin chia sẻ và rất mong nhận được sự đóng góp chia sẻ ý kiến của mọi người để cùng nhau phát triển.

Hỏi ngay nếu tồn tại vấn đề bạn chưa rõ, còn băn khoăn.
Tái cấu trúc lại mã bẩn ngay khi có thể.
Lập trình cặp, bug đơn giản bạn tìm không ra nhưng đồng nghiệp của bạn thì có.
Tối ưu sự tương tác trong nhóm.
Thực hiện đúng chuẩn viết mã.
Mỗi lần commit code cần tìm thứ gì đó để thay đổi, tìm ra một tên biến đặt sai chuẩn, xắp xếp lại các logic cho gọn gàng, xóa các dòng code vô ích hoặc căn chỉnh lại format code trước khi commit sẽ giúp code của bạn tinh gọn hơn.

source: sưu tầm, tổng hợp, kinh nghiệm bản thân .

Sunday, June 1, 2014

Hướng Dẫn Triển Khai Ứng Dụng Java - Phần 1

Đối với các bạn mới vào nghề chắc hẳn không khỏi thắc mắc "Sau khi code xong, người ta triển khai ứng dụng JAVA như thế nào? Cần những gì để triển khai một ứng dụng Java?"

Để giải đáp thắc mắc trên, hôm nay mình xin phép viết bài chia sẻ  một trong nhiều cách Triển khai một ứng dụng Java trong môi trường thực tế như thế nào.

Trong thực tế có nhiều cách để triển khai một ứng dụng Java, tùy vào sở trường và Ứng dụng cụ thể, vậy nên mình rất mong nhận được sự góp ý của bạn bè, anh em coder, programmer chia sẻ nhiều cách hay cho mình cùng mọi người cùng tham khảo.

Lúc sinh viên có lần mình ứng dụng timer trong java để viết ứng Health Care Yourself để hiển thị cảnh báo Nguy Cơ Bị Tâm Thần khi người dùng máy tính trên 8 tiếng, nghe có vẻ căng nhỉ :D (thời gian có thể đặt giống như hẹn giờ vậy).
- Sau một thời gian tìm tòi code kéo, chạy trên Netbean ngon lành nhưng không biết làm sao để cho nó chạy ngầm cùng với windows được? câu hỏi đặt ra như vậy.
- Tiếp tục tìm hiểu thì hiểu rằng: Vấn đề mình cần làm là biến hóa nó từ code thành một ứng dụng service chạy cùng với các service khác của Windows hoặc Centos. Vậy làm như thế nào?
- Tìm hiểu tiếp thì hóa ra là nó đơn giản như thế này các bạn ạ :) 

B1: Clearn and  Build ứng dụng, rồi vào thư mục dist theo đường dẫn /project/dist/

Đây là thư mục chưa file chạy dưới dạng .jar cùng thư mục lib chưa các thư viện dùng trong ứng dụng, nhưng nếu chạy file .jar này ứng dụng chạy rồi bị tắt ngay trong màn hình command.

B2: Down và cài tool đóng gói ứng dụng Java 
(nếu là ứng dụng web thì sẽ sinh file .war, triển khai được luôn trong tomcat ... sẽ có bài hướng dẫn sau)


B3: Sau khi cài đặt xong, khởi chạy ứng dụng và làm các bước theo hình sau




Bạn có thể chọn Icon cho ứng dụng, vào trang https://www.iconfinder.com/ có rất nhiều icon đẹp


  
Mình buil service lên không chọn cài đặt theo kiểu screen

Sau khi build xong nhận được 1 file .exe, file này thì mình bắt đầu thấy quen quen


B4: Triển khai ứng dụng trong Windows, đối với Centos sẽ có bài tiếp theo :D

Mở cmd, kéo thả file .exe vừa tạo ra vào màn hình cmd gõ --install là câu lệnh để thực thi việc cài đặt service


Kiểm tra service



 Để gỡ ứng dụng, bạn kéo thả file cài đặt .exe vừa tạo vào cmd, gõ --uninstall để gỡ cài đặt


Done.

Trên đây mình chụp screen quá trình build ứng dụng monitor directory để giám sát thư mục, Nếu có 2 hoặc nhiều hơn máy tính kết nối trong cùng 1 hệ thống mạng, người sử dụng hoàn toàn có thể tiến hành chia sẻ file dữ liệu và thư mục, qua đó người khác có thể truy cập, sử dụng, thêm, sửa, xóa và copy về máy của họ nếu muốn. => phần mềm giúp quản lý và giám sát thư mục ra đời :). 

Chúc các bạn ngày nghỉ cuối tuần vui vẻ Thanks.