Showing posts with label News. Show all posts

Mời sử dụng Tool Import dữ liệu lên Wocommerce siêu tốc


thuvienwinform - Woo của bạn import chậm? Hay sử dụng tool team mình thiết kế có thể đáp ứng nhu cầu import hơn 30k sản phẩm/1 tiếng và không thay đổi chút cấu trúc nào của Woocomerce cũng như Wordpress, ngoài ra đi theo tool còn được tặng plugin import link ảnh mà không cần tải lên host (giúp host cực nhẹ, load ảnh cực nhanh)
Video giới thiệu chi tiết: https://www.youtube.com/watch?v=nv5709MiXoE
Mình xin phép được giới thiệu qua tool
 Hệ thống bao gồm Importer tool và Web Hook, không can thiệp vào cấu trúc chuẩn Woocommerce vì vậy không làm ảnh hưởng tới các theme và plugins đang hoạt động trên Woocoomerce
 Tool cho khả năng import file CSV nặng tới vài trăm MB, có thể import nhiều file theo trình tự
 Tốc độ import nhanh gấp hàng trăm lần so với tính năng Import trên Woocommerce
 Sử dụng link ảnh nhúng ở ngay trong csv, không tải ảnh về lưu tại server / hostting chứa web giúp tối ưu dung lượng hostting
 Siêu phù hợp với hệ thống tool Crawler tại page (Shopify, Woocoomercer, Shopbase, Merchinze, Amazon, Ebay, Etsy, AliExpress, Teechip, Teepublic)
Giá k / phiên bản vĩnh viễn sử dụng trên 50 domains -- giảm ngay 500k cho 10 phiên bản đầu tiên mua qua https://facebook.com/ngochoaitn/ hoặc https://www.facebook.com/buiducduy111
3/27/2020
Đăng bởi :
Nhãn : , ,

Mời tải về phần mềm tăng tương tác YouTube chỉ với 14k/tháng

thuvienwinform - Xin chào các anh, chị, để phục vụ nhu cầu tăng tương tác cho kênh, tài khoản YouTube hoặc quảng cáo dựa trên các video nhiều lượt view, chúng emhân hạnh giới thiệu đến các anh chị phần mềm YouTube Care, giúp tăng tương tác cho tài khoản, kênh bằng cách xem, like, comment dạo chỉ với 14.000vnđ/tháng (chưa bằng 1 chiếc bánh mỳ).



YouTube Care có gì:
- Chạy trực tiếp trên trình duyệt Cốc Cốc, Chrome, không lo bị khóa tài khoản do đăng nhập ở nhiều nơi.
- Like, commen dạo linh hoạt bằng tài khoản đăng nhập trên trình duyệt.
- Tốn cực ít tài nguyên, chạy cả ngày đêm không gây ảnh hưởng đến máy.
- Sử dụng đơn giản, chỉ với 1 thao tác click chuột đã có thể tăng 200% tương tác cho tài khoản YouTube, giúp nhiều người đến với kênh của anh chị hơn.

Vậy em không dài dòng nữa:
- Mời anh chị tải phần mềm YouTube Care tại: http://bit.ly/YouTubeCare2019
- Xem video hướng dẫn cài đặt, sử dụng tại: https://www.youtube.com/watch?v=WUcRRMisUck

Chúc anh, chị và gia đình một ngày thật tốt lành!

Chúng em gửi anh chị bảng giá YouTube Care:


Một số hình ảnh từ phần mềm:
Xem tự động

Nhận xét tự động

Giao diện chính

Cài đặt bình luận



Bất đồng bộ với Entity Framework, tại sao không?

thuvienwinform - Chỉ với một thay đổi nhỏ, phần mềm sẽ thay đổi đáng kể về hiệu suất cũng như tương tác với người dùng. Dòng chữ "Not Responding" sẽ đi vào dĩ vãng, người dùng sẽ có thêm thời gian để làm nhiều công việc hơn, tán gái chẳng hạn :D khi mà phần mềm của bạn chạy một cách trơn tru, mượt như bôi Neptune vậy.

Bất đồng bộ và câu chuyện bắt cá 2 tay
Trong khi người yêu lúc nào cũng kè kè bên cạnh thì làm sao bạn có thể tán tỉnh cô gái khác, thậm chỉ là lên Facebook, Instagram ngắm vài em xinh tươi cũng là cả một thử thách khó khăn. Nhưng nếu bạn điêu luyện, bạn sẽ sử dụng 2 tay của mình một cách hiệu quả. Một tay ôm ấp vuốt ve con gấu nằm cạnh cho nó tê còn một tay sẽ thoải mái mà vuốt cái màn hình điện thoại để ngắm các em xinh tươi và code :v. Với lập trình bất đồng bộ thì việc bắt cá 2 tay này vô cùng đơn giản, trong khi tiến trình chính đang try hart và chương trình đáng lẽ bị treo (như việc người yêu bạn kè kè bên cạnh vậy) và các code khác sẽ phải ém mình chờ đến lượt mình chạy (các em gái khác sẽ phải né mình chờ đến lượt được vuốt ve). Những tác vụ nặng, chiếm tài nguyên sẽ được đẩy ra một luồng xử lý khác, tiến trình chính vẫn được thực hiện, chương trình không hề bị treo. Hay tương tự như Windows vậy, trong khi code vẫn có thể nghe nhạc, xem phim, quay tay,...

Trong lập trình đồng bộ, các đoạn code được thực hiện tuần tự, code đứng sau chỉ được thực hiện khi code trước nó được thực hiện xong. Nhưng trong bất đồng bộ, code đứng sau có thể được thực hiện khi code đứng trước nó chưa thực hiện xong. Việc này có thể được thực hiện bằng việc tạo các thread nhưng trong .NET Framework 4.5 thì chỉ cần 2 từ khóa asyncawait thôi, bạn muốn mọc bao nhiêu tay cũng được.

Bạn đã thật sự biết cách ngoại tình khi sử dụng Entity Framework
Các phiên bản EF gần đây đã hỗ trợ bất đồng bộ cho một số hàm (những hàm, thủ tục kết thúc bằng Async) như LoadAsync, SaveChangesAsync,...tham khảo thêm tại đây.
Vấn đề đáng sợ nhất của làm việc nhóm là thay đổi công nghệ, tin mình đi. Để các coder sử dụng công nghệ mới sẽ mất cả năm trời, sản phẩm sẽ trở nên rời rạc, không ăn khớp nhưng với async, await thì code sẽ chỉ thay đổi một chút rất ít. Thay vì Load() nay chỉ cần tthay thế bằng await LoadAsync()
 
private async Task NapDuLieuAsync()
{
    XuLyDaLuong.ThayDoiTextLabel(lblTrangThai, "Đang tải dữ liệu...", Color.Red);
    _db = new QLTTTNModel();
    _dbCheck = new QLTTTNModel();

    //Load
    await _db.tbNguoiYeu1.Where(p => p.IdCuocTinh == _idCuocTinh).LoadAsync();
    await _db.tbNguoiYeu2.LoadAsync();
    await _db.tbNguoiYeu3.LoadAsync();
    await _db.tbNguoiYeu4.LoadAsync();
}
private async void frm_Load(object sender, EventArgs e)
{
    await this.NapDuLieuAsync();
}

Chỉ cần thêm async và await thôi, thay đổi không nhiều về lượng nhưng chất đã biến đổi. Phần mềm của bạn sẽ đốn tim hầu hết khách hàng với sự mượt mà của nó.
Hay sống thật vui và yêu thật nhiều :D
5/17/2017
Đăng bởi :
Nhãn : ,

Mời dùng thử phần mềm chuyển định dạng font chữ CF3

thuvienwinform - Sau nhiều năm quy định bảng mã Unicode làm bảng mã chuẩn thì yêu cầu chuyển font chữ không còn nhiều như trước nữa, tuy vậy thì đôi lúc vẫn rất cần thiết và làm ta tốn nhiều thời gian. Chính vì vậy thuvienwinform viết ra phần mềm CF3 này nhằm chuyển định dạng font chữ cho các tệp word, excel,...giúp hỗ trợ người dùng chuyển đổi font chữ nhanh hơn tiết kiệm thời gian hơn.

Tải về:
Phiên bản thử nghiệm 1.0 beta: https://www.dropbox.com/s/97d02fw9e9ya32x/CF3%20Setup.exe?dl=0 (8MB)

Giao diện chính

Các chức năng chính:
- Chuyển định dạng font chữ cho các tệp Word, Excel, tệp văn bản,...

Ưu điểm:
- Chuyển được định dạng theo tệp.
- Với excel có thể lựa chọn các sheet cần chuyển và chuyển cả font của công thức.
- Với word có thể chuyển font toàn bộ nội dung tệp, cả chữ ở trong bảng, trong shape,..

Nhược điểm:
- Chức năng chuyển toàn bộ font chữ chưa hoạt động tốt.
- Chỉ chuyển được định dạng font chữ chứ chưa phát hiện được ký tự lỗi. Ví dụ chuyển từ TCVN3 sang Unicode:
ô (font TCVN3) -> ô (font Unicode)
å  (font TCVN3)-> å (font Unicode)
Tức là sẽ dữ nguyên ký tự, chỉ chuyển ký tự của bảng mã này -> sang bảng mã khác thôi
Vì vậy để chuyển đúng thì đầu tiên các ký tự ở tệp cần chuyển phải hiển thị đúng (đọc được) đã!

Rất mong nhận được ghóp ý của các bạn để phần mềm theo hoàn chỉnh.

9/05/2015
Đăng bởi :

Tạo mã kích hoạt cho phần mềm



thuvienwinform - Mình là mình kịch liệt phản đối việc những phần mềm đòi mã kích hoạt để tiếp tục sử dụng nhé! Biết chúng mày giỏi rồi lại còn đòi tiền, mịa nghĩ cũng cay. Nhưng làm ra được mấy cái (tạm gọi là phần mềm :v) thì cũng thấy mình phải nhận lại được cái gì đấy. Ví dụ như "Đã hết thời gian dùng thử. Vui lòng mua mã kích hoạt để tiếp tục sử dụng" || "hãy soạn tin nhắn theo cú pháp XXX 69 gừi 9669 để sử dụng phần mềm" || đơn giản chỉ là tăng lượt truy cập vào trang web để người ta biết đến mình :D "Truy cập ngay 69xxx96.com để nhận nhận mã VIP", bla bla...


Ảnh minh họa

Thường thì yêu cầu của những mã này là mỗi máy một mã kích hoạt riêng. Chả biết người ta làm thế nào nhưng từ ngày xửa ngày xưa, lúc mà người già không nhớ, trẻ con chưa biết, xưa lắm, thì máy tính ra đời và được gắn các mã số cố đĩnh như mã ổ cứng, card mạng,...thì đơn giản có thể dùng chính những mã này làm mã kích hoạt :)) 

if(MaNhapVao == MaOCung())
{
     ThongBao("Kích hoạt thành công!");
     //
}


Mạnh hơn thì viết ra các hàm mã hóa các mã này thành dạng khác

if(MaNhapVao == MaHoa(MaOCung()))
{
     ThongBao("Kích hoạt thành công!");
     //
}

Hoặc các hàm sinh mã theo thời gian: mã có tác dụng trong 69 phút chẳng hạn...

Khá là nhiều cách. Nhưng làm sau mà mỗi lần cài đều phải có một mã kích hoạt riêng mới hay :))

Hay hiện nay có một số phần mềm cần kết nối mạng để kích hoạt thì sẽ so sánh mã nhập vào với mã trên máy chủ cung cấp xem có đúng không, nếu đúng phần mềm sẽ được kích hoạt và xóa mã đó đi. Cách này sẽ có thể thực hiện đồng bộ hóa với máy chủ thông qua tài khoản người dùng => sau khi cài lại chỉ cần đăng nhập sẽ sử dụng được.

Chém vậy thui chứ nếu làm dự án lớn thì cái này có cả một đội chuyên nghiên cứu vấn đề này, đồng tiền bát gạo mà. Nhưng trên đây là những cách khá là đơn giản và cũng khá là hiệu quả cho những chương trình nho nhỏ.

Xin mời để lại ý tưởng cũng như ý kiến về vấn đề này ở phần bình luận.
3/20/2015
Đăng bởi :

Hot!! TeamViewer Full Crack!!!

Cài đăt TeamViewer dùng miễn phí



Cảm ơn đã xem ảnh!

Tải Teamviewer: http://www.teamviewer.com/vi/download/currentversion.aspx

Nếu dùng cho máy cá nhân thì chọn như hình sẽ được dùng MIỄN PHÍ! Các bạn cứ chọn Company với cả Bolth...thì nó chả đòi đống tiền :v

Nếu ai mà hỏi hoặc nhờ crack teamviewer hộ thì bạn cứ gỡ ra rồi cài lại và chọn như trong hình là xài ổn!

Cảm ơn các bạn đã đọc bài, cảm ơn Monitis đã tạo ra teamviewer, cảm ơn blogspot facebook đã giúp tôi mang tấm hình này đến mọi người, cảm ơn những người sinh thành nên tôi thì tôi mới có cơ hội được sử dụng teamviewer và chia sẻ đến mọi người! Cảm ơn Viettel đã cung cấp 3G để tôi truy cập mạng và chia sẻ tấm hình quý giá này,...

CHÂN THÀNH CẢM ƠN CÁC BẠN SẼ CHIA SẺ VÀ THÍCH HÌNH NÀY!
Đăng bởi :
Nhãn :

Thread trong C#

thuvienwinform - Thread cho phép thực hiện cùng lúc nhiều công việc song song với nhau mà không bị đơ, lag (lác :D), gián đoạn. Nó đặc biệt quan trọng trong lập trình mạng, các ứng dụng đỏi hỏi thực hiện công việc nặng nhọc, duyệt vòng lặp lớn (lặp vài trăm nghìn lần như duyệt các thư mục), nếu không dùng thread thì chương trình sẽ không thể tương tác được, có thể rơi vào trạng thái không phản hồi (Not Responding - Cái này quen quen). Nhờ có Thread mà ứng dụng trở nên mượt hơn, hạn chế đơ, lag, sử dụng CPU hiệu quả hơn với lập trình winform.



- Để sử dụng thread ta khai báo using System.Threading;
- Số thread tối đa cho 1 chương trình:
+ Với .NET2.0 là 25.
+ Với .NET3.5 là 250.
+ Với .NET4.0 (32bit) là 1023.
+ Với .NET4.0 (64bit) là 32768.
+...

1/ Tạo thread mới để chạy 1 hàm, thủ tục
- Cho hàm, thủ tục không có tham số truyền vào

Thread t1;
t1 = new Thread(ThuTuc1);
với ThuTuc1 là một thủ tục (void) không có tham số truyền vào

Các ví dụ dưới đây sẽ dùng thread t1 này là ví dụ ạ

- Cho hàm, thủ tục có tham số truyền vào (Sử dụng Lambda Expresstion)

t1 = new Thread();
t1 = new Thread((ThreadStart) =>
    {
        ThuTuc2("Truyen vao");
    });
2/ Chạy thread đó
- Sau khi tọa được thread rùi ta có thể cho nó bắt đầu chạy:

t1.Start();

3/ Dừng thread

t1.Abort();

4/ Tạm dừng thread

t1.Suspend();
Tạm dừng cho đến khi
t1.Resume();


5/ Mức độ ưu tiên của thread (Thread Priority)
- Khi sử dụng nhiều thread thì ta cài đặt độ ưu tiên thực thi của các thread

t1.Priority = ThreadPriority.Lowest;
- Có các giá mức ưu tiên: Lowest, BelowNormal, Normal, AboveNormal, Hightest


6/ Join
- Cái này nó sẽ làm như sau: Những thread dưới câu lệnh Join() sẽ được start sau khi các thread trên câu lệnh join chạy xong

7/ Thoát chương trình nhưng thread vẫn chạy
- Thread có 2 loại: ForeGround và BackGround.
+ Chương trình sẽ tắt khi các ForeGround thread chạy xong
+ Còn các BackGroud Thread sẽ dừng lại khi tắt chương trình.

- Lí do là khi ta tạo 1 thread nó mặc định là loại ForeGround
- Để khi tắt chương trình các thread cũng dừng thì ta sẽ chuyển các thread sang BackGround như sau:

t1.IsBackground = true;
t1.Start();
Chuyển thread thành background trước khi start

8/ Thread Pooling
- Cái này hơn rất rất nhiều. Có thể nói nó tối ưu thread.
- Thread Pooling mặc định là loại BackGround
- Sau khi kết thúc một tác vụ nó sẽ trở về trạng thái sẵn sàng nhận một nhiệm vụ mới
- Chạy một thủ tục, hàm bằng Thread Pooling (thủ tục, hàm phải có đầu vào là 1 Object)

private void Button1_Click()
{
    ThreadPool.QueueUserWorkItem(ThreadPooling, "Test");
   //Hoặc: ThreadPool.QueueUserWorkItem(ThreadPooling);
}
private void ThreadPooling(object obj)
{
    MessageBox.Show(obj.ToString());
}

Nguồn: YinYang's Blog
4/18/2014
Đăng bởi :
Nhãn : ,

NVNhan's Blog đăng loạt bài giới thiệu và hướng dẫn từng bước xây dựng một website bằng ASP MVC


thuvienwinform - Ngôn ngữ C# ngoài lập trình cho winform còn lập trình được cho cả webform (tức các trang web). Được phát triển bởi Microsoft, hiện nay các trang web viết bằng ASP MVC ngày càng nhiều. Công nghệ MVC mang lại cho coder cách tổ chức code khoa học hơn. Hiện nay blog NVNhan đang đăng các bài viết hết sức cơ bản dành cho các bạn mới làm quen với ASP, ASPMVC có một cách tiếp cận nhanh nhất với việc lập trình web. Mời các bạn đón đọc tại:
hoặc


Giao diện NVNhan's Blog

Với tiêu chí ngắn gọn, xúc tích, đơn giản và dễ hiểu. Các bài viết trên blog sẽ trang bị cho bản các kiến thức hết sức cơn bản về lập trình web, từ lúc bắt đầu tạo project đến lúc hoàn thành ra sản phẩm.
Kính mời các bạn đón đọc!
4/10/2014
Đăng bởi :
Nhãn :

[TFS] Giới thiệu về Team Foudation Server

Các thành phần trong giải pháp ALM của Microsoft

thuvienwinform - Với các nhóm lập trình, dù ít hay nhiều thành viên thì công cụ để làm việc nhóm là hết sức quan trọng, với nhóm code đơn thuần thì có thể sử dụng SVN Server là đủ rùi nhưng với nhóm đầy đủ gồm đội phân tích thiết kế, code, test,...thì SVN sẽ không đáp ứng được yêu cầu mà cần cộng cụ nhiều chức năng hơn! Và Team Foundation Server (TFS) là lựa chọn tối ưu trong trường hợp này. Chức năng chính của nó là quản lí, tạo môi trường làm việc phát triển phần mềm theo nhóm dựa trên khung làm việc Scrum. Trong thời gian tới thuvienwinform xin được giới thiệu đến bạn đọc việc cấu hình, cài đặt cũng như sử dụng TFS. Triển khai nó lên máy server để các thành viên trong nhóm đều có thể làm việc cùng nhau online luôn.

Dù mới chỉ 2 tuần sử dụng nhưng mình rất nóng lòng muốn gửi đến các bạn công nghệ TFS này. Các bài viết chắc chắn không tránh khỏi thiếu sót, rất mong nhận được sự đóng ghóp, chia sẻ!

- Một số bài viết yêu cầu tìm hiểu:
+ Scrum là gì?  http://hanoiscrum.net/hnscrum/gioi-thieu/scrum-lagi
+ Giới thiệu về Scrum với TFS: http://www.slideshare.net/duongtrongtan/scrumday-vietnam-2012-scrum-with-team-foundation-server-quang


Các công cụ của Scrum bao gồm các Product Backlog chứa các Sprint Backlock. Mỗi Sprint đều có các công việc và thời gian cụ thể. Các cuộc họp cho sprint được thực hiện thường xuyên (4 cuộc họp) lặp đi lặp lại giúp cho công việc luôn được kiểm soát, đưa ra giải pháp tối ưu nhất! 

TFS tạo môi trường làm việc có sự gắn kết cao giữa các đội! Với đội code có thể xem công việc (work items), quản lí code, chạy test, xem bug của đội test hoặc mời người khác xem code,...chống conflict khi nhiều coder submit cùng một lúc, và đặc biệt là tất cả được thực hiện ngay trong visual studio. Với đội test thì khu thực hiện test code thể gửi đến từng người trong đội code để yêu cầu sửa băng các bug, work items,...Công việc hết sức linh hoạt và nhanh chóng, tạo ra sự chuyên nghiệp trong việc phát triển phần mềm! Còn Product Owner thì có thể kiểm soát, giao việc,... ngay trên môi trường web.

Breakpoint giúp kiểm soát code, giá trị của các biến trong khi chạy thử

Di chuột để xem các giá trị của mảng hAdress

thuvienwinform - Trong quá trình code và chạy thử thì việc kiểm soát giá trị của các biến là hết sức khó khăn. Thường thì dùng các MessageBox hoặc một textBox, label để hiển thị...Công việc này mất nhiều thời gian. Tại sao không dùng chức năng breakpoint có sẵn trong visual để xem giá trị của chúng! Hôm nay mình xin giới thiệu với các bạn cách sử dụng Breakpoint này (chỉ với 1 click chuột)!

- Tạo Breakpoint
+ Tại đoạn code mà bạn muốn chương trình dừng lại để xem giá trị các biến bạn chuột phải -> Breakpoint -> Insert Breakpoint xong luôn.
+ Mình thường làm như này: tạo 1 button xong Insert Breakpoint vào sự kiện ấn cái button đó. Khi nào muốn dùng lại xem thì ấn button đó là xong! :D

Sau khi Insert Breakpoint xong sẽ có cái hình tròn có mũi tên ở trong xuất hiện tại chỗ mà chương trình sẽ dừng lại

- Xem giá trị các biến như nào?
+ Sau khi chương trình chạy đến đoán có Breakpoint thì chương trình sẽ dừng lại, bây giờ bạn hiển thị Visual Studio lên và di chuột vào biến nào cần xem giá trị là nó sẽ hiện ra cho bạn (Ví dụ như ảnh ở đầu bài này).

Ok vậy là đơn giản trong việc xem giá trị các biến trong khi chạy thử chương trình rồi :)

Cách để thêm nhanh: chuột phải vào biến -> Refactor -> Encapsulate Field... -> ok



3/07/2014
Đăng bởi :
Nhãn : ,

Cách comment (chú thích) cho code

Comment Code giúp dễ dàng sử dụng về sau

thuvienwinform - Khi viết chương trình, phần mềm theo nhóm, khi ta đọc đoạn code của người khác viết sẽ khá khó khăn trong việc sử dụng. Vì vậy để dễ dàng cho làm việc cùng nhau ta cần phải chú thích cho đoạn code của mình vừa đề người khác hiểu, vừa để đễ dàng cho sử dụng sau này cũng như viết tài liệu. Hiểu được vấn đề này, visual studio hỗ trợ việc comment cho code rất tuyệt vời, hôm nay mình xin được giới thiệu nó đến với các bạn!

- Để hiện được chú thích như hình ở đầu bài viết ta làm như sau: Gõ 3 dấu "/" trước hàm, thủ tục mà ta cần chú thích thì nó sẽ tự tạo cho ta 1 sumary để mô tả chức năng của hàm, các param để mô tả chức năng từng biến!



 Ok rất đơn giản phải không nào :)


3/04/2014
Đăng bởi :
Nhãn : ,

[Linq] Giới thiệu


thuvienwinform - Linq(Language Integrated Query - Ngôn ngữ tích hợp truy vấn) là thư viện mở rộng cho các ngôn ngữ lập trình C#, VB,...được Microsoft tích hợp vào .NET Framework (từ phiên bản 3.5).
Linq cho phép chúng ta làm việc với các tập dữ liệu như CSDL, XML, HTML,...qua đó người ra ta phân loại Linq như sau:

  • LINQ to Objects: làm việc với dữ liệu trên bộ nhớ (thường là các danh sách kế thừa interface IEnumerable) sử dụng cú pháp ngôn ngữ LINQ.
  • LINQ to XML: làm việc với dữ liệu XML sử dụng cú pháp ngôn ngữ LINQ.
  • LINQ to Entities: làm việc với Entity Framework.
  • LINQ to SQL: Làm việc với SQL Server.
  • LINQ to Datasets: Một kỹ thuật cho phép sử dụng LINQ trong một ứng dụng dựa trên DataSet mà không cần viết lại sử dụng LINQ to SQL.
  • PLINQ: Hỗ trợ sử dụng LINQ trong lập trình song song.




  • Tuy nhiên, trong các bài tiếp theo trong nhãn này mình chỉ nói đến LINQ to SQL!
    Như chúng ta đã biết để thao tác với CSDL cũng có thể dùng ADO.NET. Vậy chúng khác nhau như nào?
    - Đầu tiên Linq cho phép tạo câu truy vấn ngay trong ngôn ngữ lập trình. Với ADO.NET thì chúng ta phải viết câu truy vấn như một string vậy, điều đó rất khó kiểm lỗi (phải chạy thử mới biết được lỗi)
    - Khi thao tác với CSDL (Thêm, sửa, xóa,...) thì Linq đã tự tối ưu cho chúng ta để đảm bảo tốc độ cao nhất. Đơn cử như việc select, trong ADO.NET thì ta sử dụng "select *..." sau đó lọc ra những trường cần dùng, còn Linq thì chỉ select những trường cần chọn mà thôi nên nó sẽ tối ưu hơn. Hay nói cách khác thì Linq đã tối ưu sẵn cho ta rồi!
    - Về yêu cầu thì ADO.NET chỉ cần phiên bản .NET 2.0, còn Linq thì yêu cầu phiên bản 3.5
    Vậy Linq có phải được tạo ra để thay thế ADO.NET? Không phải, bạn có thể làm việc với Linq mà không dính đến CSDL. Linq to Sql là một phần mở rộng của Linq.

    Còn tiếp...

    1/04/2014
    Đăng bởi :
    Nhãn : ,

    Code Smells (Code bốc mùi)

    Code smells là một thuật ngữ rất phổ biến đối với các lập trình viên, vậy nó là gì, tại sao chúng ta phải quan tâm đến code smells, và tại sao phải hạn chế code smell bên trong mã lệnh của bạn? Hy vọng bài viết này sẽ giải đáp được phần nào cho các bạn mới làm quen với thế giới lập trình.
    Theo Wikipedia, Code smells (code mà bốc mùi, hoặc có mùi lạ trong code) là bất kỳ triệu chứng bất ổn nào bên trong mã nguồn của một chương trình, mà vì nó có thể sẽ dẫn đến các vấn đề lớn hơn. Code smells không phải là bugs (lỗi lập trình), nghĩa là chúng không làm sai chứ năng của ứng dụng. Thay vào đó, chúng là biểu hiện của sự yếu kém trong thiết kế và sẽ làm cho quá trình phát triển ứng dụng bị chậm lại hoặc tăng nguy cơ của bugs hoặc lỗi trong tương lai.
    Sau đây mình xin liệt kê các loại code smells mà bạn có thể gặp:

    Code smells bên trong class

    Comments (ghi chú): không nên sử dụng comment tùy tiện, bạn nên comment khi thực sự cần thiết. Một comment phải giải thích được "tại sao", chứ không phải là "cái gì". Bạn có thể cải tiến mã lệnh để không cần phải dùng comment được không? Khi đó tự mã lệnh giải thích cho nó mà không cần đến comment. Và lưu ý rằng, comment phải dễ hiểu, bởi nó dành cho con người, không phải để dành cho máy.
    Long method (Phương thức có độ dài lớn): Phương thức ngắn thì dễ đọc, dễ hiểu và dễ xử lý khi có lỗi xảy ra hơn. Hãy cố gắng chia tách những phương thức dài thành những phương thức nhỏ hơn khi bạn có thể.
    Long parameter list (quá nhiều tham số cho một phương thức): Phương thức càng nhiều tham số, nó càng phức tạp. Hãy hạn chế số lượng tham số cho một phương thức, hoặc bạn cần phải sử dụng một đối tượng chứa các tham số đó.
    Conditional complexity (độ phức tạp của các lệnh điều kiện): hãy cẩn thận với các khối lệnh điều kiện lớn, vì chúng thường sẽ phình to theo thời gian, bạn có thể tìm kiếm các cách khác theo lập trình hướng đối tượng để thay thế như các mẫu decorator, strategy, hoặc state.
    Combinitorial explosion: bạn có rất nhiều mã lệnh thực hiện phần lớn các công việc gần giống như nhau, nhưng chỉ khác nhau một xiu về dữ liệu hoặc hành vi. Trường hợp này không dễ để cải thiện, tuy nhiên, bạn có thể thử dùng generics hoặc interpreter.
    Large class (lớp có lượng mã lệnh rất lớn): các lớp có lượng mã lệnh lớn thường khó để đọc và hiểu. Liệu lớp bạn xây dựng có đảm trách nhiều vai trò quá không? Nếu vậy, bạn nên tái cấu trúc lớp đó thành nhiều lớp nhỏ hơn.
    Type embedded in name (tên phương thức có chứa tên kiểu dữ liệu trả về): Nếu phương thức của bạn có tên chứa tên kiểu dữ liệu trả về, bạn nên sửa lại, bởi vì khi bạn thay đổi kiểu dữ liệu trả về, bạn phải thay đổi tên của phương thức.
    Uncommunicative name (tên lạ, tên khó hiểu): Đây là trường hợp tên của phương thức không diễn tả được mục đích của phương thức, và tên khó đọc. Bạn nên đổi tên các phương thức kiểu như vậy.
    Inconsistent names (cách đặt tên không nhất quán): bạn nên thống nhất cách đặt tên nhất quá cho các phương thức. Ví dụ nếu bạn có phương thức Open(), bạn nên có phương thức Close().
    Dead code (mã lệnh không sử dụng): Hãy xóa các mã lệnh không còn sử dụng. Nếu bạn lo rằng tới một ngày kia bạn sẽ cần phải sử dụng nó, bạn đừng lo, bởi nếu có sử dụng các công cụ Version Controls, chúng sẽ lưu lại các phiên bản cũ cho bạn.
    Speculative generality: hãy viết code để giải quyết vấn đề hiện tại, và chỉ quan tâm đến các vấn đề tương lai nếu chúng thực sự cần thiết, nếu không hãy bỏ qua. Bạn cần tuân thủ nguyên tắc YAGNI (You Ain’t Gonna Need It). Tôi sẽ sớm có bài viết về YAGNI.
    Oddball Solution (inconsistent solution – giải pháp không nhất quán): Bạn chỉ nên dùng một cách duy nhất để xử lý một vấn đề bên trong mã lệnh của bạn nếu không bạn đã mắc phải code smell Oddball Solution.
    Temporary Field (trường tạm): Đừng để quá nhiều trường tạm, không cần thiết trong mã cài đặt các đối tượng của bạn.

    Code smells giữa các class với nhau

    Các class tương tự nhau nhưng bề ngoài khác nhau: Nếu hai lớp giống nhau bên trong, nhưng lại khác nhau ở bên ngoài, thì bạn nên sửa chúng để chúng cùng chung một interface.
    Primitive Obsession (nỗi ám ảnh về kiểu dữ liệu nguyên thủy): đối với những người mới làm quen với lập trình hướng đối tượng, đôi khi họ lưu những thông tin của đối tượng bên trong đối tượng khác bằng cách sử dụng các kiểu primitive. Nếu dữ liệu đủ phức tạp, bạn nên sử dụng một lớp để thể hiện nó.
    Data class: các lớp dữ liệu, có chứa các trường lưu dữ liệu, các getters và setters, nhưng ngoài ra không còn gì cả. Code smell ở đây là các lớp này chỉ chứa dữ liệu và được khởi tạo một cách quá chi tiết bởi các lớp khác. Cần phải đảm bảo tính đóng gói của các lớp này.
    Data clumps: Nếu bạn thấy các phần tử dữ liệu hay đi kèm với nhau tại nhiều nơi, ví dụ như các trường bên trong một vài lớp, là tham số của nhiều phương thức, bạn nên gộp chúng lại thành đối tượng.
    Refused Bequest: Bạn sử dụng kế thừa, nhưng lại hầu như không sử dụng các phương thức được kết thừa, vậy liệu có nên sử dụng kế thừa không?
    Inappropriate Intimacy: Các lớp không nên xử liệu quá nhiều công việc của nhau. Các lớp nên biết về nhau càng ít càng tốt.
    Indecent Exposure: Các lớp không nên "show" quá nhiều nội tình bên trong nó. Khi bạn công khai một trường hoặc một phương thức của một class, bạn cần phải có lý do thực sự hợp lý, nếu không, hãy giấu chúng đi.
    Feature Envy: Đây là trường hợp một lớp có một phương thức được sử dụng nhiều hơn bởi lớp khác hơn là chính lớp đó. Nếu trường hợp như vậy xảy ra, bạn nên di chuyển phương thức đó sang lớp kia.
    Lazy Class (lớp lười nhác): Không nên tồn tại những lớp không thực hiện việc gì cả. Việc có càng nhiều lớp, sẽ càng làm phức tạp cho dự án của bạn. Nếu một lớp được sinh ra chả để làm gì cả, bạn có thể nghĩ đến việc xóa nó, hoặc hợp nó với một lớp khác.
    Message Chains (chuỗi thông điệp): Có những trường hợp, code của bạn gọi mỗi chuỗi các phương thức từ các đối tượng để lấy dữ liệu nào đó, ví như var ().getAnotherThing().getAnotherThing2….
    Middle Man (lớp trung gian): nếu một lớp trung gian chỉ có mặt để truyền lời gọi đến các lớp khác, thì lớp đó không nên tồn tại.
    Divergent Change: nếu bạn đổi một phần này của lớp và kéo theo phải đổi các phần khác của lớp, thì có thể nó đang mang trong mình nhiều thứ không liên qua. Hãy nghĩ đến việc cô lập các phần có thể gây ảnh hưởng và chuyển qua một lớp khác.
    Shotgun Surgery: Nếu thay đổi của một lớp gây sự thay đổi đến nhiều lớp khác, thì bạn nên nghĩ đến việc cải tổ code để hạn chế sự thay đổi chỉ ảnh hưởng đến bên trong lớp đó.
    Parallel inheritance hierarchies: code smell này là hiện tượng khi bạn thêm một lớp con của một lớp này, thì bạn cũng phải tạo thêm lớp con của một lớp khác.
    Incomplete Library Class: đây là code smell khi chúng ta cần thêm một phương thức vào một lớp trong thư viện, nhưng chúng ta không thể thay đổi thư viện để thêm phương thức đó vào.
    Solution Sprawl: để thực hiện một việc gì đó, bạn cần quá nhiều các lớp khác nhau tham gia (trên 5 lớp), thì đó là dấu hiệu của code smell Solution Sprawl. Hãy nghĩ tới việc đơn giản hóa thiết kế của bạn.

    Lời kết

    Bài viết về code smells này chỉ mang tính chất giới thiệu sơ đẳng, và do thời gian có hạn nên bài viết chưa lý giải được hoàn toàn rõ ràng về các code smells, và cách thức xử l

    Nguồn: hocchoi.com
    12/30/2013
    Đăng bởi :
    Nhãn :

    API là gì? Ứng dụng của nó như thế nào?


    thuvienwinform - Đơn giản như thế này, hiện nay nhiều người dùng mạng xã hội facebook và bạn muốn viết một ứng dụng để đăng tin lên mạng xã hội này. Vậy làm sao để làm một ứng dụng như vậy khi facebook là của người khác? Hiểu được nhu cầu này của các lập trình viên facebook sẽ đưa ra các thư viện chứa các hàm đăng, like, share...trên trang của mình để các lập trình viên khai thác! Đó chính là API
    Google+, Gmail, Blogger, Youtube, các ứng dụng của windows (Windows media player, Internet Explorer,..), nhaccuatui, zingmp3,...rất nhiều các trang web, ứng dụng đưa ra các API để hỗ trợ các lập trình viên

    - API (Application Programming Interface - Giao diện lập trình ứng dụng). Mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau. Nó cung cấp cho người lập trình các hàm tương tác với CSDL, lập trình thực hiện các thao tác với hđh hay phần mềm đó. Hầu hết các hàm API được chứa trong các file DLL
    - Ví dụ: Các hàm API của hđh windows cho phép chúng ta lập trình ứng dụng thay đổi icon màn hình, xem thông tin máy tính, ... hay các hàm API của google cho phép lập trình viên lấy thông tin, sửa thông tin người dùng,...Các hàm API của facebook cho chúng ta đăng stt, ảnh, cmt,...
    - Vậy API có phải một ngôn ngữ lập trình không? Câu trả lời là không các bạn ạ. Các hàm API cũng như các hàm bình thường mà chúng ta hay viết và trên từng ngôn ngữ khác nhau cũng có các bộ API tương ứng khác nhau.
    - Ví dụ: Google API có bộ cho .NET, PHP,..
    - Và mỗi bộ API hầu như đều có hướng dẫn sử dụng rất cụ thể và chi tiết. Ví dụ của hướng dẫn sử dụng các hàm API đối với blogger: https://developers.google.com/blogger/docs/2.0/developers_guide_dotnet rất hữu ích cho ai muốn viết ứng dụng quản lí blog


    - Ví dụ một đoạn code đăng bài cho blog sử dụng API của google:

    void DangBai(Service service, string bID, string title, string content, bool isDraft)
            {
                //Tạo các thuộc tính của bài đăng
                Uri blogPostUri = new Uri("http://www.blogger.com/feeds/" + bID + "/posts/default");
                AtomEntry newPost = null;
                newPost = new AtomEntry();
                newPost.IsDraft = isDraft;
                newPost.Title.Text = title;
    
                newPost.Content = new AtomContent();
                newPost.Content.Content = content;
                newPost.Content.Type = "html";
                newPost.Updated = new DateTime(2011, 1, 1, 10, 0, 0);
                newPost.Published = new DateTime(2011, 1, 1, 10, 0, 0);
                //Đăng bài
                AtomEntry CreateEntry = service.Insert(blogPostUri, newPost);
            }
    
    
    Một số bài về API:
    - Phát nhạc: http://thuvienwinform.blogspot.com/2014/04/api-phat-nhac-mp3_13.html
    - Kiểm tra kết nối mạng: http://thuvienwinform.blogspot.com/2014/04/api-kiem-tra-ket-noi-internet.html
    - Facebook API: http://facebooksdk.net/
    - Google API: https://code.google.com/p/google-api-dotnet-client/wiki/APIs
    + Hướng dẫn A-Z Google API cho Blogspot: http://garyngzhongbo.blogspot.com/2013/10/bloggerc-blogger-api-v31.html
    - Tìm trên nhaccuatui: http://diendan.congdongcviet.com/threads/t57486::lay-link-nhac-an-tu-trang-nhaccuatui-com.cpp

    11/27/2013
    Đăng bởi :
    Nhãn : ,

    Nhận ngay 100$ cho VPS

    Mua hàng ủng hộ page

    Ủng hộ page

    Nhãn

    Code (45) Team Foundation Server (17) Database (14) News (14) product (13) toolbox (10) Linq (9) SoftDesign (8) XNA (6) API (5) Project (5) item (4)

    - Bản quyền thuộc về Thư Viện WinForm - Giao diện: Metrominimalist - Thiết kế: Johanes Djogan -