Friday, May 18, 2012

Custom Dialog trong winform

- Trong quá trình phát triển phần mềm thì việc phải hiệu chỉnh các công cụ và thư viện mặc định của hệ thống là một việc thường xuyên. Đối với window form cũng vậy. Bạn hãy thử nghỉ tất cả các chức năng của phần mềm mà bạn đang viết đều được việt hóa chỉ riêng hộp thống báo (MessageBox) thì giao diện nút nhấn là "Yes" và "No" như vậy sẽ làm cho phần mềm của bạn mất giá trị. Một vấn đề lớn nữa là nếu như khi triển khai phần mềm cho khách hàng qua thời gian sử dụng họ thông báo với bạn là phần mềm của bạn đang gặp lỗi và không thể chạy được như vậy bạn sẽ phản ứng thế nào ? Đến khách hàng hiệu chỉnh ? hay gọi điện thoại nhờ họ giải thích ? remote máy khách hàng ? các cách này coi ra hơi phiền phức. Nếu như bạn thống báo cho khách hàng của bạn là phần mềm của bạn hiện đang có lỗi và thêm một chức năng nhỏ trên đó cho phép phần mềm của bạn tự gởi thông báo lỗi chi tiết (exception phát sinh) về cho bạn thì sẽ giúp cho phần bạn được thông minh và có gí trị hơn.







[sourcecode language="CSharp" wraplines="false"]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace CustDialog
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnShow_Click(object sender, EventArgs e)
{
try
{
int c = Convert.ToInt32(textBox1.Text) / Convert.ToInt32(textBox2.Text);
}
catch (Exception exa)
{
frmMessage frm = new frmMessage("Hệ thống có lỗi phát sinh, liên hệ monkey@abc.com để được giúp đỡ !", "Xác nhận", exa);
DialogResult result = frm.ShowDialog();
}
}
}
}
[/sourcecode]

[sourcecode language="CSharp" wraplines="false"]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;

namespace CustDialog
{
public partial class frmMessage : Form
{
string caption = "";
DialogResult ok = DialogResult.No;

public frmMessage(string Message, string Caption, Exception ex)
{
InitializeComponent();

label1.Text = Message;
caption = Caption;

this.Height = this.Height - 100;
this.richTextBox1.Visible = false;
this.richTextBox1.Text = ex == null ? "" : ex.ToString();
btnSend.Visible = (ex != null);
}

private void btnExp_Click(object sender, EventArgs e)
{
if (!this.richTextBox1.Visible)
{
this.richTextBox1.Visible = true;
this.Height = this.Height + 100;
this.btnExp.Text = "Thu nhỏ";
}
else
{
this.Height = this.Height - 100;
this.richTextBox1.Visible = false;
this.btnExp.Text = "Chi tiết";
}
}

private void btnSend_Click(object sender, EventArgs e)
{
this.Enabled = false;
string Sendto = "ngotuongdan01@gmail.com"; //Email Address to reciever
// tai khoan này các bạn sử đừng sử dụng để gửi tùm lum dùm tui nhe
string UserName = "ngotuongdan04@gmail.com"; //Ur Gmail address
string PassWord = "ngotuongdan"; //Gmail password
// this mail is my demo mail please not change it's password, tks alot
NetworkCredential loginInfo = new NetworkCredential(UserName, PassWord);
MailMessage msg = new MailMessage();
msg.From = new MailAddress(UserName);
msg.To.Add(new MailAddress(Sendto.ToString()));
msg.Subject = "Error"+ DateTime.Now.ToString();
msg.Body = richTextBox1.Text;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = loginInfo;
client.Send(msg);
this.Enabled = true; ;
}

private void frmMessage_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = (ok == DialogResult.No);
}

private void button1_Click(object sender, EventArgs e)
{
ok = MessageBox.Show("Are you sure to change student information?", "Change information", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}
}
}
[/sourcecode]

Thursday, May 17, 2012

Điện toán đám mây

Điện toán đám mây (cloud computing) không phải là một công nghệ mà là một mô hình cung cấp và tiếp thị dịch vụ CNTT đáp ứng các đặc trưng nào đó.



Mây là toàn bộ dịch vụ máy tính, không phải sản phẩm, trong đó:


  • Cơ sở hạ tầng được chia sẻ.Nhiều khách hàng chia sẻ một nền tảng công nghệ chung và thậm chí là một ứng dụng đơn lẻ.

  • Các dịch vụ này được truy xuất theo yêu cầu tại các đơn vị khác nhau tùy theo dịch vụ. Các đơn vị có thể là người sử dụng, dung lượng, giao dịch hoặc bất kỳ sự kết hợp nào từ chúng.

  • Các dịch vụ được mở rộng. Từ quan điểm người dùng, các dịch vụ thì linh hoạt; không có giới hạn cho sự phát triển.

  • Mô hình giá cả là do tiêu thụ. Thay vì thanh toán các chi phí cố định của một dịch vụ có quy mô để sử dụng tối đa, bạn trả một cái giá tham chiếu trên một đơn vị tiêu dùng (người sử dụng, các giao dịch, dung lượng…) được đo trong những khoảng thời gian có thể khác nhau, theo giờ hoặc tháng chẳng hạn.

  • Dịch vụ có thể được truy xuất từ bất cứ nơi nào trên thế giới bởi nhiều thiết bị.


Mô hình đám mây dẫn đến 2 loại cơ bản khác nhau của các đám mây: riêng (private) và công cộng (public). Những đám mây công cộng cung cấp các dịch vụ CNTT cho mọi khách hàng trên Internet. Đám mây riêng cung cấp dịch vụ CNTT cho một nhóm được xác định trước của khách hàng, có quyền truy xuất thông qua Internet hoặc mạng riêng.

Bạn có thể cũng đã nghe về các đám mây trong và ngoài. Lúc trước là một nhóm nhỏ của những đám mây riêng, và cung cấp dịch vụ trong cùng một công ty hay nhóm các công ty. Về sau có thể là công cộng hay riêng và cung cấp các dịch vụ cho các công ty khác.

Hiểu để ứng dụng


Dịch vụ CNTT được cung cấp qua đám mây được nhóm lại thành 3 dạng: Cơ sở hạ tầng như một dịch vụ (Infrastructure as a Service – IaaS); Nền tảng như một dịch vụ (Platform as a Service – PaaS); và Phần mềm như một dịch vụ (Sotware as a Service – SaaS).

IaaS cung cấp môi trường xử lý (các máy chủ, lưu trữ, cân bằng tải, tường lửa). Những dịch vụ này có thể được thực hiện thông qua các công nghệ khác nhau, ảo hóa là một trong những công nghệ phổ biến nhất, ngoài ra có thể là công nghệ tính toán lưới (grid computing) hoặc chuỗi (cluster)…

PaaS cung cấp môi trường để phát triển và chạy các ứng dụng. Chứng thực, uỷ quyền, quản lý phiên và siêu dữ liệu cũng là một phần của dịch vụ này.

SaaS là mô hình đám mây tiên tiến và phức tạp nhất. Các dịch vụ phần mềm cung cấp các chức năng mà giải quyết cho người dùng các vấn đề, cho dù đó là người dùng đơn lẻ hay một nhân viên của một công ty. Một số ví dụ về các giải pháp hiện đang được cung cấp theo mô hình SaaS bao gồm: doanh nghiệp thông minh (business intelligence – BI), hội nghị Web (Web conference), e-mail, bộ ứng dụng văn phòng…

Những lợi ích của mô hình này là rõ ràng và rất hấp dẫn: truy xuất vào một dịch vụ dễ dàng, loại bỏ các khoản đầu tư, hoãn một số chi phí và loại bỏ những thứ khác, tăng tính linh hoạt của CNTT, tăng khả năng di động cho người dùng và cải thiện tính sẵn sàng của dịch vụ.

Tuy nhiên, vì tính mới lạ của mô hình, có một số khía cạnh chưa được giải quyết, và như trong tất cả các môi trường làm việc, có những rủi ro mà phải được tính đến khi đánh giá thế nào, khi nào và vì cái gì để áp dụng công cụ mới này vào lĩnh vực CNTT của các công ty.

Triển khai điện toán đám mây


Hiện việc triển khai mô hình điện toán đám mây chưa cung cấp các hợp đồng đầy đủ về mức độ dịch vụ hoặc các công cụ kiểm soát của chúng. Chúng không cung cấp quá trình kiểm định an toàn hoặc quy định cho việc lưu trữ và sao lưu dữ liệu khách hàng được quản lý và lưu trữ trong mây. Chúng cũng không cung cấp giao diện tích hợp một cách rõ ràng và ổn định theo thời gian, giữa các dịch vụ lấy từ mây và dịch vụ của riêng công ty.

Giống như bất kỳ công cụ nào, điện toán mây không phải là hoàn hảo, cũng không phải là áp dụng trong tất cả các thiết lập và nó không thể được thực hiện chỉ qua một đêm. Nó đòi hỏi một quá trình đánh giá các lợi ích và rủi ro, một kế hoạch với từng giai đoạn thực hiện, và xác định một quá trình cải tiến liên tục cho giai đoạn sản xuất.

Căn cứ vào những ưu khuyết điểm đã được đề cập, các dịch vụ đám mây là một chọn lựa đúng đắn, trong thời kỳ đầu tiên, cho các doanh nghiệp để triển khai các đám mây riêng bằng cách sử dụng IaaS, để thử nghiệm các môi trường hoặc phát triển ứng dụng với dịch vụ PaaS và cho các ứng dụng khép kín, chẳng hạn như hội nghị Web trong dịch vụ SaaS.

Trong khi mô hình điện toán mây đưa ra các lựa chọn mới cho người sử dụng, nó cũng đòi hỏi thay đổi đáng kể từ các nhà cung cấp sản phẩm và dịch vụ CNTT.

Các công ty cung cấp phần cứng, phần mềm và dịch vụ sẽ phải đối mặt với 2 thách thức đồng thời. Đầu tiên là phát triển hoặc thích ứng với sản phẩm, quy trình và các công cụ của họ để tiếp thị và cung cấp mô hình mới này. Thứ hai, và có lẽ là khó nhất, là thay đổi cơ cấu bán hàng và hỗ trợ của họ, và trong một số trường hợp, các thị trường mục tiêu của họ là tốt, nhằm đáp ứng sự năng động của môi trường mới.

Đối với các công ty kinh doanh phần cứng và phần mềm thông thường, sự thay đổi chính sẽ là ở cấp độ của thị trường mục tiêu của chúng: trong mô hình điện toán mây người tiêu dùng công nghệ không còn là các công ty tài chính, công nghiệp hay tổ chức nhà nước (mà đã trở thành người sử dụng), mà là các công ty cung cấp dịch vụ CNTT.

Đối với các công ty bán ứng dụng, tác động sẽ diễn ra trong cơ cấu bán hàng và hỗ trợ, vì họ cần phải thay đổi từ việc bán giấy phép sang bán và hỗ trợ dịch vụ.

Cuối cùng, các công ty cung cấp dịch vụ CNTT sẽ phải tích hợp truyền thông với các dịch vụ của họ 100%, điều chỉnh danh mục đầu tư của họ đối với các dịch vụ đám mây, trong đó họ quyết định tham gia (IaaS, PaaS hay SaaS), điều chỉnh doanh số bán hàng, phân phối và quy trình thanh toán của họ cho mô hình theo yêu cầu, và phát triển các cơ chế tích hợp cần thiết giữa phạm vi CNTT của khách hàng và các đám mây để phát triển mô hình một cách hợp lý.

Do quy mô và độ phức tạp của những thay đổi rồi sẽ diễn ra, nếu có một vài khởi đầu sai sót thì cũng không có gì đáng ngạc nhiên. Điều quan trọng là phải lập ra được kế hoạch, hiểu biết ở mỗi bước để đối mặt với những thách thức và phải đánh giá được các rủi ro, và hãy bắt đầu phương thức mới, đừng trì hoãn, nhằm mục đích đem đến hiệu quả kinh doanh, mang lại lợi nhuận nhiều hơn.

Theo PC World VN.

6 cách sử dụng blog hiệu quả trong giáo dục

6 cách sử dụng blog hiệu quả trong giáo dục




Một trong các công cụ ICT được các nhà giáo dục khuyến khích sử dụng trong việc giảng dạy ngày nay là blog. Đây là một hình thức trang web được tổ chức theo trật tự thời gian hoặc theo chủ đề, và thông thường người dùng chỉ cần vào đăng ký để sở hữu một trang web như vậy. Không cần phải lo lắng về kỹ thuật tạo web, không cần phải lo lắng về các vấn đề server, tất cả những gì chúng ta cần quan tâm là: Nội dung của blog là gì? Blog sẽ có giao diện như thế nào? Cần thêm bớt các tính năng gì cho blog?

Không lập trình, không chi phí, không bảo dưỡng kỹ thuật.

Có nhiều cách để sử dụng blog trong giảng dạy và học tập, Thầy Cô và các bạn có thể tham khảo 6 gợi ý dưới đây để việc dùng blog trở nên hiệu quả hơn.

1. Nơi chứa tài nguyên và bài giảng

Chúng ta có thể tạo ra các blog làm nơi chứa các tài liệu, hình ảnh, bài giảng, thí nghiệm ảo,… được sưu tầm và tích lũy trong quá trình giảng dạy của mình. Sau đó chọn lọc, sắp xếp các tài liệu này và đưa lên blog theo các chủ đề, định dạng khác nhau. Lúc này blog sẽ trở thành một nơi lưu trữ để Thầy Cô và các em học sinh có thể truy cập và tải về sử dụng.

Nếu muốn hạn chế đối tượng truy cập vào blog và tải file về, chúng ta có thể đặt password truy cập và cung cấp password này cho các em học sinh ta đang dạy.

Tại Việt Nam, trang web Violet.vn phát triển cộng đồng giáo viên của mình theo hướng này.

2. Tạo ra các cuộc thảo luận trực tuyến

Thông thường, các giáo viên chỉ nghĩ đến việc đến lớp và dạy các kiến thức đã định sẵn trong giáo án. Nếu trong quá trình giảng dạy, xuất hiện một vấn đề cần thảo luận thì giáo viên cũng thường giới hạn thời gian các cuộc thảo luận này. Vậy thì, hỡi các bạn giáo viên! Vì sao các bạn không dùng blog để mở rộng không gian và thời gian cho các cuộc thảo luận? Học sinh hay giáo viên vẫn có thể tiếp tục suy nghĩ về chủ đề hoặc vấn đề đang gây tranh cãi trong lớp và tiếp tục bày tỏ ý kiến hay suy nghĩ của mình ở blog của giáo viên hoặc của lớp.

Các blog chính là một công cụ tuyệt vời để giáo viên tạo ra các cuộc thảo luận trực tuyến và khuyến khích học sinh của mình tham gia thảo luận.

Ngoài ra, người xem blog cũng có thể đăng ký nhận thông báo qua email mỗi khi có một lời bình mới ở chủ đề mà họ quan tâm.

Đây chính là một cách “đơn giản hóa” hình thức diễn đàn (forum). Thay vì phải chật vật với việc tạo ra một forum thật sự, chúng ta chỉ đơn giản tạo ra một chủ đề cần thảo luận và để các em học sinh cùng tham gia nêu ý kiến.

3. Tạo các ấn phẩm của lớp

Các tờ báo tường đủ màu sắc, với các chủ đề về trường lớp, thầy cô, bè bạn có lẽ không quá xa lạ với những ai từng đi học. Biết bao nhiêu “tài năng hội họa, thơ ca” của các lớp đã cùng đóng góp sức lực, niềm say mê, sự hứng khởi khi tạo ra các tờ báo tường đó. Và giờ đây, công nghệ thông tin và truyền thông (ICT) tiếp tục trao vào tay các giáo viên và học sinh của họ một công cụ mới: blog.

Các học sinh có thể cùng cộng tác để tạo ra một “tờ báo trực tuyến” dành cho lớp, cho trường. Trên tờ báo trực tuyến này, chúng ta có thể giới thiệu cách học tốt, khen ngợi các thành viên có tiến bộ, viết về một kỷ niệm đáng nhớ trong lớp, … Trong quá trình cùng cộng tác và giúp đỡ lẫn nhau, các em sẽ học cách làm việc và chia sẻ với người khác.

4. Dùng blog như bảng tin

Các giáo viên có thể hạn chế tiêu thụ giấy và sức lực của mình trong việc lặp đi lặp lại mỗi khi có các thông báo, lưu ý gửi đến các em học sinh. Đơn giản là hãy thử post một tin tức lên blog của lớp. Thế là đủ! Hoặc giáo viên cũng có thể sử dụng blog để bày tỏ các ý kiến của mình, chia sẻ kinh nghiệm học và dạy, bày tỏ mối quan tâm đến một vấn đề nào đó, …

Tuy nhiên, cần lưu ý rằng các thông báo phải rõ ràng, chi tiết về nội dung, sự việc, địa điểm, thời gian diễn ra và thành phần tham gia.

Bên cạnh hình thức đưa thông báo lên blog, giáo viên cũng có thể sử dụng các hình thức khác như email, bảng tin gửi qua email (newsletter), hệ thống email chung (mailing list), …để đưa thông tin đến học sinh và phụ huynh.

Nếu bạn vẫn ngại hình thức chuyển thông tin qua con đường điện tử, cách đơn giản nhất là hãy thử nghiệm với lớp của mình hoặc với một nhóm nhỏ, và rút ra kinh nghiệm.

5. Tích hợp multimedia

Với blog, thông tin không chỉ đến từ kênh chữ, mà chúng ta còn có thể sử dụng các hình ảnh, đoạn phim, bài trình bày để dẫn dắt và giới thiệu một nội dung cụ thể.

Hãy nhớ lại thời điểm khi cả thế giới bàng hoàng về sự ra đi đột ngột của ông hoàng nhạc Pop Micheal Jackson, và sau đó là các bài ca, các video clip, các file PowerPoint của ông hoàng này gây ngập lụt thế giới Internet. Vậy thì trên blog của mình, bạn chỉ định dùng một đoạn văn nhàm chán để nhớ về Micheal? Hãy thử nhúng một video clip “Heal the World” vào blog của mình để nghe và cảm nhận những gửi gắm của ông hoàng nhạc Pop!

Việc nhúng video clip, hình ảnh vào blog là hết sức dễ dàng, giáo viên không cần có hiểu biết về code, về lập trình. Thao tác thông thường chỉ là copy đường dẫn của file multimedia từ các website dạng chia sẻ và paste vào blog.

6. Nhận phản hồi

Blog có thể là một phương tiện tốt để giáo viên nhận các phản hồi của học sinh và phụ huynh về các vấn đề giảng dạy, các câu hỏi liên quan đến đời sống học đường, các thắc mắc về cách xếp loại trong lớp.

Quá trình tiếp thu và xử lý phản hồi sẽ giúp ích cho việc dạy và học, vì nó giúp giải tỏa nhiều thắc mắc cản đường việc học của học sinh.

Một giáo viên càng sẵn sàng trao đổi và trả lời với các thắc mắc của học sinh và các phụ huynh, giáo viên đó sẽ càng nhận được sự quý mến và tin cậy của họ, đồng thời nâng cao hình ảnh của mình trong mắt đồng nghiệp và Ban giám hiệu.

Những gợi ý bên trên sẽ giúp các giáo viên định hướng được việc xây dựng và phát triển blog của mình, làm cho blog trở thành một công cụ phục vụ đắc lực cho quá trình giảng dạy và phát triển nghề nghiệp.

Nếu Thầy Cô đã thật sự cảm thấy thích thú và muốn bắt tay tạo blog cho mình thì có thể tham khảo các bài viết ICT đã đăng tải trên giaovien.net.

Nếu vẫn còn những cách khác dùng blog trong giáo dục mà bài viết trên chưa đề cập, Thầy Cô và các bạn hãy chia sẻ với chúng tôi!

Thursday, May 10, 2012

c# - Thao tác với tập tin thư mục


  1. Create class “FileDirc” have some method



  • void AddDir():create folders as structure




  • void AddFile(): add 03 file to CSharp folders as




  • void WriteLog():  create and write xml file as


<?xml version="1.0" encoding="utf-8" ?>
<log>
<folder>
<size>123468 Bytes</size>
<content>3 Files, 5 Folders</content>
</folder>
</log>

  • void ViewCont ():




  • Using built in attribute make “ViewCont” only run on Debug mode



The anwser:
- Ran class
[sourcecode language="CSharp"]
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace XML
{
class Program
{
static void Main(string[] args)
{
FinalTest01 obj = new FinalTest01();
obj.AddDir();
obj.AddFile();
obj.WriteLog();
obj.ViewCont();
Console.ReadLine();
}
}
}
[/sourcecode]

- Source class

[sourcecode language="CSharp"]
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Xml;

namespace XML
{
class FinalTest01
{
string dir = @"FinalTest";
long size = 0;
long dirnumber = 0;
long filenumber = 0;
public FinalTest01()
{
}

public void AddDir()
{
DirectoryInfo DirInfo = Directory.CreateDirectory("FinalTest");
DirInfo.CreateSubdirectory("Datas");
DirInfo.CreateSubdirectory("References");
DirectoryInfo CodeDirInfo = DirInfo.CreateSubdirectory("Codes");
CodeDirInfo.CreateSubdirectory("VB");
CodeDirInfo.CreateSubdirectory("CSharp");
}

public void AddFile()
{
string CodeDirInfo = "FinalTest\\Codes";
File.CreateText(CodeDirInfo + "\\CSharp\\Class01.cs").Close();
File.CreateText(CodeDirInfo + "\\CSharp\\Class02.cs").Close();
File.CreateText(CodeDirInfo + "\\CSharp\\Class03.cs").Close();

TextWriter txtWrite = File.AppendText(CodeDirInfo + "\\CSharp\\Class03.cs");

txtWrite.WriteLine("http://ngotuongdan.wordpress.com");
for (int i = 0; i < 1024; i++)
{
txtWrite.WriteLine("Curent date is: " + DateTime.Now.ToString());
}

txtWrite.Flush();
txtWrite.Close();
}

public void WriteLog()
{
GetContent();

XmlTextWriter xmlWriter = new XmlTextWriter("log.xml", Encoding.Default);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 3;

xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("log");
xmlWriter.WriteStartElement("folder");
xmlWriter.WriteElementString("size", size.ToString());
xmlWriter.WriteElementString("content", filenumber + " files and " + dirnumber + " folders");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();

xmlWriter.Flush();
xmlWriter.Close();
}

[Conditional("DEBUG")]
public void ViewCont()
{
GetContent();
Console.WriteLine("Folder FinalTest is {0} bytes, contains {1} files and {2} folders !", size, filenumber, dirnumber);
}

private void GetContent()
{
string[] files = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories);
FileInfo f;

foreach (string var in files)
{
f = new FileInfo(var);
if (f.Extension != "")
size += f.Length;
}

dirnumber = Directory.GetDirectories(dir, "*.*", SearchOption.AllDirectories).Length;
filenumber = files.Length;
}
}
}
[/sourcecode]

Translate