------*%*%##$@$##%*%*----*%*%##$@$##%*%*----*%*%##$@$##%*%*----*%*%##$@$##%*%*------
Thuốc để giải ưu phiền là công việc, thú vui chỉ là liệu thuốc tạm thời..
---------------------------------------------------------------------------------------------------------------
Thứ Bảy, 16 tháng 8, 2008
10 cách để cân bằng giữa công việc và cuộc sống
Theo Vụ Thống kê Lao động thuộc Bộ Lao động Mỹ, trung bình một công nhân Mỹ làm việc khoảng 9,3 giờ mỗi ngày. Riêng ở lĩnh vực công nghệ thông tin (CNTT), nhân viên thường phải làm việc nhiều hơn (khoảng 43-62 giờ/tuần), chấp nhận chế độ luân ca và thường bị đặt trong tình trạng “standby” (túc trực) theo kiểu 24/7. “Kỷ lục” không hề mong đợi này đã làm nóng thêm vấn đề cân bằng công việc với cuộc sống. Nếu là bạn, bạn sẽ làm gì để vượt qua áp lực ấy? CNTT là một nghề hấp dẫn nhưng cũng đầy áp lực. Làm thế nào để có thể chu toàn cả công việc và cuộc sống nếu như công ty của bạn ít quan tâm đến vấn đề này? Dưới đây là mười bí quyết đang được nhiều giám đốc đào tạo, giám đốc CNTT và những chuyên gia muốn chia sẻ. Lập danh mục những việc ưu tiên và luôn thực hiện đúng Áp lực sẽ liên tục gia tăng nếu bạn vẫn giữ thói quen xấu, đó là “nhớ đến đâu làm đến đấy” và “bị sếp thúc bách cái gì, làm ngay cái ấy”, bất chấp những công việc khác còn đang dang dở. Để không bị rơi vào trường hợp nói trên, bạn cần phải sớm thiết lập trật tự ưu tiên cho mọi việc, từ chuyện ở công ty cho đến việc của gia đình. Bà Kathie Lingle, Giám đốc Trung tâm Nghiên cứu và Cải thiện điều kiện làm việc cho ngành CNTT (Alliance for Work-Life Progress – AWLP) của Mỹ, tâm sự: “Cho dù mục tiêu của bạn là gì đi chăng nữa, nếu không xác lập được việc gì làm trước, việc gì làm sau, bạn sẽ bị rối tung. Có quá nhiều thứ đang chờ bạn. Khổ nỗi, quỹ thời gian của chúng ta là hữu hạn. Vì vậy, để có dư ra chút đỉnh thời gian chăm lo cho cuộc sống riêng tư, bạn chỉ còn một cách duy nhất, đó là giới hạn thời lượng làm việc. Hiện tại, thời lượng lao động thường nhật của một nhân viên CNTT là khá nặng. Tôi khuyên bạn, để bảo đảm sức khỏe lâu dài, bạn nên biết nói không với chuyện làm tăng giờ hoặc từ chối nhận thêm một công việc bán thời gian ở một công ty khác cho dù lương thưởng có cao đến mấy.” Brian Schultz, chuyên gia tư vấn CNTT của Viện Nghiên cứu Battelle Memorial, người đã có kinh nghiệm về chuyện bị buộc làm thêm giờ, chia sẻ: “Khi làm việc cho một công ty nọ, tôi đã xác lập trật tự ưu tiên: trước tiên là Thượng đế (dành thời gian để đi nhà thờ mỗi ngày), rồi đến gia đình (chăm sóc người thân), Tổ quốc (sẵn sàng ra trận nếu đất nước bị ngoại xâm), cộng đồng (tham gia các hoạt động xã hội) và cuối cùng mới đến công việc. Tôi đã nói với sếp về điều ấy, giải thích ý nghĩa của trật tự ấy và yêu cầu ông ấy tôn trọng nó, bởi lẽ đó là cách tốt nhất để tôi có thể vừa làm tốt công việc vừa có thời gian cho cuộc sống riêng tư. Và ông ấy đã đồng ý. Nhưng đến một ngày nọ, công ty buộc tôi phải làm tăng giờ (khoảng 60 giờ/tuần) liên tục trong 14 ngày. Tôi từ chối và chấp nhận thôi việc. Sau đó, tôi đã quyết định về với Battelle Memorial vì tại đây tôi chỉ làm việc trung bình không quá 45 giờ/tuần và công ty luôn tôn trọng phương pháp cân bằng giữa công việc và cuộc sống cá nhân. Trừ khi có những cuộc họp đột xuất diễn ra không quá 30 phút, tôi sẽ không phải đi làm vào ngày thứ Bảy hay Chủ nhật và dành thời gian này cho gia đình. Nói như thế là tôi muốn khuyên bạn rằng phải luôn kiên quyết bảo vệ trật tự mà mình đã thiết lập. Đừng vì ngại va chạm với sếp hay sợ bị mất việc mà phá vỡ nó, bởi lẽ bạn không thể làm tốt và sống khỏe với trật tự do... người khác vạch ra.” Thổ lộ tâm tình với đồng nghiệp Không chỉ nói riêng với sếp, bạn cũng nên chia sẻ với đồng nghiệp về trật tự mà bạn đã thiết lập. Bà Lisa Martin, đồng sáng lập viên kiêm Chủ tịch Công ty Tư vấn và Đào tạo CNTT Briefcase Moms, phân tích: “Chẳng ai có thể đọc hay nhìn thấy được những gì mà bạn đang nghĩ. Vì vậy, hãy sớm nói ra với đồng nghiệp những thứ mà bạn luôn ưu tiên và mong muốn người khác tôn trọng. Thà mất lòng trước nhưng sẽ được lòng sau.” Bạn đã từng nói với sếp rằng bạn có thể làm thêm giờ nhưng phải được về nhà trước 8 giờ tối. Thế nhưng, ông ấy vẫn thường xuyên giữ bạn ở lại công ty cho đến tận 10 giờ đêm. Khi ấy, bạn hãy nhẹ nhàng nói với sếp rằng: “Đây là lần thứ bảy trong hai tháng trở lại đây tôi phải về nhà muộn vào ngày thứ Sáu” và nhắc khéo về lời hứa trước đây: “Không biết sếp còn nhớ đến những chuyện khó xử khi tôi phải về nhà muộn trước đây hay không?” Dĩ nhiên, chẳng có sếp nào lại thích thú với phản ứng của bạn. Nhưng bạn hãy tỏ ra kiên quyết, kiên trì cho đến khi thấy không thể cải thiện được nữa thì mới khăn gói chia tay. Để minh họa cho lợi ích của việc thổ lộ tâm tình với đồng nghiệp, ông Bob Keefe, Phó chủ tịch kiêm Giám đốc CNTT của Công ty Mueller và cũng là Chủ tịch danh dự của Cộng đồng Quản trị thông tin (SIM), kể: “Hồi còn làm cho một công ty truyền liệu nọ, có lần cả nhóm chúng tôi gặp phải một sự cố nghiêm trọng đòi hỏi phải được khắc phục khẩn cấp. Thoạt đầu, chúng tôi định liên lạc với người chịu trách nhiệm chính. Cả nhóm cũng thừa biết nếu gọi điện thoại, anh ấy sẽ sẵn sàng trả lời và thậm chí chạy ngay đến công ty. Tuy nhiên, chúng tôi đã không làm như vậy vì chợt nhớ anh ấy đã có nói rằng sau giờ làm việc, anh ấy sẽ vào bệnh viện để chăm sóc cho người vợ đang nằm trên bàn mổ. Vì thế, các thành viên trong nhóm đã không ngại làm thêm giờ, vận dụng tất cả những kỹ năng mà anh bạn này đã nhiều lần hướng dẫn để khắc phục sự cố. Cuối cùng, chúng tôi cũng đã thành công và gọi điện báo tin vui cũng như không quên chúc cho vợ của anh ấy chóng bình phục.” Kiến nghị được làm việc với thời biểu linh hoạt Đối với những người giỏi nghề, ngoài chuyện lương bổng và chế độ nghỉ phép, thời lượng và thời biểu lao động cũng là những vấn đề họ luôn nghiên cứu cẩn thận và thương lượng rõ ràng trước khi đặt bút ký vào bản hợp đồng lao động. Còn như đã vào làm rồi thì cũng chẳng sao. Bạn hoàn toàn có thể trao đổi trực tiếp với sếp về thời biểu làm việc, chẳng hạn như bạn muốn đi làm trễ hơn và về muộn hơn giờ chuẩn vì một nguyên nhân khách quan nào đấy hoặc bạn muốn được làm việc ở nhà đôi ba ngày trong tuần… Sẽ là một yêu cầu không quá đáng nếu bạn có thể giải trình chi tiết với sếp về kiến nghị của mình. Nói cách khác, bạn cần phải thuyết phục và chứng minh được rằng tuy đang ngồi ở nhà, nhưng bạn vẫn hoàn thành tốt nhiệm vụ. Ví dụ, bạn có thể giải bày với sếp rằng sáng nay thời tiết rất xấu, kéo dài trong nhiều giờ liền khiến bạn đi làm muộn. Như vậy, sẽ rất lãng phí thời gian bởi lẽ chỉ với một kết nối Internet tại nhà, bạn đã hoàn toàn có thể làm việc như thể bạn đang có mặt ở công ty... Chủ động kết hợp và lồng ghép các công việc có liên quan Kết quả từ cuộc khảo sát mới đây của dịch vụ cung ứng lao động Office Team (California, Mỹ) cho thấy có khoảng 53% giám đốc CNTT quan tâm và luôn tạo điều kiện cũng như có những chính sách cụ thể để giúp nhân viên cân bằng giữa công việc và sự nghỉ ngơi. Chỉ có 37% chưa thực sự nhiệt tình và số ít còn lại không ủng hộ. Tuy nhiên, ngay cả khi bạn được sếp chăm lo, nếu không nắm bắt cơ hội và vận dụng một cách sáng tạo, những chính sách ấy cũng chẳng thể tự nó phát huy hiệu quả giảm stress cho bạn. Đừng quá cứng nhắc trong hành động. Ví dụ, bạn đang làm việc cho một công ty có xu hướng quản lý nhân viên theo khối lượng và chất lượng công việc hơn là kiểm soát chặt chẽ thời lượng hiện diện của họ ở văn phòng, vậy thì bạn phải chạy đua với thời gian để hoàn thành càng sớm nhiệm vụ được giao càng tốt. Giả sử, sáng nay, bạn được phân công làm việc với đối tác là một công ty ở gần nhà. Thay vì phải mất thời gian cho việc đến công ty để trình diện sếp, rồi đi đến công ty nọ để đàm phán kinh doanh rồi quay trở lại công ty để báo cáo kết quả, bạn có thể không cần đến công ty mà đi thẳng đến đối tác để làm việc rồi ngồi ở nhà gửi e-mail cho sếp. Quỹ thời gian của bạn sẽ được tiết kiệm đáng kể và bạn có thể dùng nó để làm thêm chuyện khác mà không vi phạm nội quy lao động của công ty. Tìm kiếm “quân sư” Brian Abeyta, Phó chủ tịch kiêm Giám đốc CNTT của Tập đoàn Bảo hiểm Aflac, kể: “Tôi rất ngưỡng mộ cách sống và làm việc của một chị giám sát viên trong công ty. Tuy là thuộc cấp, nhưng chị rất xứng đáng để tôi phải học tập. Ngay khi chị được công ty trao quà về thành tích hai giỏi (vừa là một nhà quản lý giỏi, vừa là một bà mẹ tuyệt vời), tôi đã chạy vội đến bên chị và đề nghị được chị chia sẻ kinh nghiệm. Giờ đây, tôi đang áp dụng rất nhiều phương pháp hay của chị, đặc biệt là tính tự quản. Khi đã lên lịch làm gì, chị đều quyết tâm thực hiện đầy đủ và đúng giờ.” Tranh thủ tối đa sự trợ giúp của mọi người "Ngạn ngữ có câu ‘Biết tất cả nghĩa là không biết gì.’ Bởi vậy, khi lâm vào tình trạng bế tắc, bạn đừng quá sĩ diện để rồi phải ôm trong người một bài toán không có lời giải. Hãy tranh thủ sự trợ giúp của người thân. Như tôi chẳng hạn, những lúc công việc vượt khỏi khả năng giải quyết, tôi liền gọi điện cho chồng – cũng là giám đốc CNTT ở một công ty khác – để ông ấy chỉ cách gỡ rối,” Natalie Gahrmann, chuyên gia CNTT của N-R-G Coaching Associates, khuyên. “Bạn cũng đừng quên trưng cầu và tập hợp ý kiến của đồng nghiệp trước khi ra quyết định sau cùng về một công việc khó khăn nào đấy. Ví dụ, mới đây, tôi được giao nhiệm vụ đi mua một máy chủ mới cho công ty. Thú thật, lúc ấy, tôi chưa được tự tin lắm với kiến thức của mình về dòng HP C-Class. Ngoài việc tìm kiếm sự tư vấn từ các nhà cung cấp, tôi cũng đưa vấn đề này ra cuộc họp và mời đồng nghiệp góp ý. Cuối cùng, tôi đã mua được một sản phẩm đúng như mong đợi và tiết kiệm được rất nhiều thời gian.” Hãy chia sẻ “tuyệt chiêu” với đồng nghiệp Trong một môi trường làm việc mang tính cạnh tranh quyết liệt, sẽ chẳng có gì là khó hiểu nếu bạn không muốn để lộ những bí quyết nghề nghiệp. Tuy nhiên, nếp nghĩ và cách làm này đôi lúc lại là “con dao hai lưỡi”. Đừng bao giờ là người duy nhất có thể giải quyết được một lĩnh vực chuyên môn nào đấy, bởi lẽ mỗi khi “đụng chuyện”, bạn đều phải có mặt. Hãy truyền đạt kinh nghiệm, kiến thức của bạn cho những thành viên khác trong nhóm và chủ động kiến nghị với sếp được làm điều đó thông qua các buổi sinh hoạt chuyên môn. Như thế, bạn sẽ không bị “réo gọi” vào những thời điểm mà bạn không hề mong đợi. Khai thác sức mạnh của các thiết bị di động Những phương tiện này sẽ giúp bạn làm việc mọi lúc mọi nơi, thay vì phải “bám trụ” tại bàn làm việc ở công ty. Không chỉ dừng lại ở đó, khả năng tích hợp và chia sẻ dữ liệu giữa chúng và hệ thống mạng máy tính doanh nghiệp hiện được đánh giá là rất cao. Chẳng hạn như, với một thiết bị hỗ trợ cá nhân kỹ thuật số (PDA), bạn hoàn toàn có thể ghi lại nội dung làm việc tại phòng họp công ty. Đến khi trở về máy trạm của mình, bạn chỉ cần kết nối nó với máy tính rồi tiến hành đồng bộ hóa dữ liệu một cách dễ dàng và nhanh chóng. Việc tra cứu những ghi chú đã được số hóa như vậy cũng giúp bạn tiết kiệm được nhiều thời gian hơn so với việc cứ “kè kè” bên mình những quyển sổ tay và cũng đỡ vất vả hơn mỗi khi muốn tìm lại một thông tin nào đó trong một “rừng” chữ… Nhưng cũng phải biết cách sử dụng chúng một cách khôn ngoan Các thiết bị số dẫu thông minh đến mấy cũng sẽ trở thành vật vô dụng nếu chúng bị khai thác sai mục đích hoặc không đúng cách. Hãy xác lập thời điểm sử dụng chúng và khi đã hết giờ, nên tạm chia tay để còn dành thời gian cho cuộc sống gia đình. Đừng mãi “ôm” chúng suốt ngày để kiểm tra và hồi âm thư điện tử hay nhắn tin SMS. Ngoài ra, bạn cũng linh hoạt khai thác các phương tiện liên lạc này, lúc thì e-mail khi thì gọi điện thoại. Đôi lúc, chi phí liên lạc không quan trọng. Vấn đề nằm ở chất lượng và hiệu quả giao tiếp. Ví dụ, thoạt đầu, bạn định nhắn tin SMS cho một đồng nghiệp để trao đổi công việc theo cách tiết kiệm nhất. Thế nhưng, mặc dù đã thư đi tin lại khá nhiều, song cả hai đều vẫn chưa hiểu được nhau. Trong khi, chỉ cần một cuộc gọi ngắn không quá 60 giây, có lẽ mọi thứ sẽ xong. Chẳng những bạn không tiết kiệm được chi phí mà còn cảm thấy bực mình hơn vì chẳng đâu vào đâu cả. Một ức chế tâm lý không đáng có sẽ kéo theo một loạt tác động tiêu cực và âm ỉ cho cả ngày làm việc của bạn đấy. Luôn lạc quan Ngộ nhỡ gặp thất bại trong công việc, tâm trạng và phản ứng của bạn thế nào ? Nếu không biết cách kiềm chế cảm xúc, rất có thể bạn sẽ bị sa sút “phong độ” rất nhanh. Khi ấy, thay vì cứ nghĩ đến cái vị “đắng” của thất bại một cách cục bộ, bạn nên đặt nó lên một trục thời gian dài hơn để thấy rằng đó chỉ là một vấn đề ngắn hạn, trong khi tương lai của bạn vẫn còn rộng mở ở phía trước. Như vậy, bạn sẽ cảm thấy dễ chịu và tự tin trở lại sau cú vấp ngã này. Dẫu sao, thất bại cũng là mẹ của thành công.
Thứ Tư, 13 tháng 8, 2008
Toán Vui
Có bài toán này: có 12 quả táo , trong đó có 11 quả có khối lượng bằng nhau, còn 1 quả có khối lượng khác với 11 quả còn lại, chỉ biết là khác thôi nhá, không biết là nặng hơn hay nhẹ hơn. bằng 3 lần cân bập bênh, hãy xác định quả có khối lượng khác đó. ai thông minh sáng láng thử nghĩ hộ, vì tui nghĩ toàn bị có trường hợp thành 4 lần cân thội
Lời Giải
L1:Chia thành 3 nhóm mỗi nhóm 4 quả , cân 2 nhóm.
->TH1: 2 Nhóm bằng nhau(thật cả) : đánh số các quả trong nhóm còn lại theo sô 1,2,3,4.
+>L2:cân 3 quả 1,2,3 với 3 quả thường.a, bằng nhau
-> quả thứ 4b,nặng hơn ( nhẹ hơn) thì cân 2 quả 1,2 với nhau->.
-> TH2: 1 trong 2 nhóm nặng hơn, đánh số các quả trong hai nhómNhóm nặng : 1,2,3,4
Nhóm nhẹ :a,b,c,d
+>L2: cân nhóm (1,2,a) và (3,4,b)
i> bằng nhau -> xét cân c,d quả nào nhẹ thì đó là quả cần tìm
ii>nhóm (1,2,a) nặng hơn->3,4,a là các qủa thường
+>L3 : cân 2 quả 1,2 : />bằng -> quả b ( nhẹ hơn)
//>1 quả nặng -> là quả cần tìm
iii> nhóm (3,4,b) nặng hơn ----> tượng tự trên
Lời Giải
L1:Chia thành 3 nhóm mỗi nhóm 4 quả , cân 2 nhóm.
->TH1: 2 Nhóm bằng nhau(thật cả) : đánh số các quả trong nhóm còn lại theo sô 1,2,3,4.
+>L2:cân 3 quả 1,2,3 với 3 quả thường.a, bằng nhau
-> quả thứ 4b,nặng hơn ( nhẹ hơn) thì cân 2 quả 1,2 với nhau->.
-> TH2: 1 trong 2 nhóm nặng hơn, đánh số các quả trong hai nhómNhóm nặng : 1,2,3,4
Nhóm nhẹ :a,b,c,d
+>L2: cân nhóm (1,2,a) và (3,4,b)
i> bằng nhau -> xét cân c,d quả nào nhẹ thì đó là quả cần tìm
ii>nhóm (1,2,a) nặng hơn->3,4,a là các qủa thường
+>L3 : cân 2 quả 1,2 : />bằng -> quả b ( nhẹ hơn)
//>1 quả nặng -> là quả cần tìm
iii> nhóm (3,4,b) nặng hơn ----> tượng tự trên
Thứ Hai, 11 tháng 8, 2008
Add and Call WebService at runtime
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Security.Permissions;
using System.Web.Services.Description;
namespace ConnectionLib
{
internal class WsProxy
{
[SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
System.Net.WebClient client = new System.Net.WebClient(); // Connect To the web service
System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl"); // Now read the WSDL file describing a service.
ServiceDescription description = ServiceDescription.Read(stream); ///// LOAD THE DOM ///////// // Initialize a service description importer.
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
importer.AddServiceDescription(description, null, null); // Generate a proxy client. importer.Style = ServiceDescriptionImportStyle.Client; // Generate properties to represent primitive values.
importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; // Initialize a Code-DOM tree into which we will import the service.
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace); // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1); if (warning == 0) // If zero then we are good to go
{
// Generate the proxy code
CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp"); // Compile the assembly proxy with the appropriate references
string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences); CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1); // Check For Errors
if (results.Errors.Count > 0)
{ foreach (CompilerError oops in results.Errors)
{ System.Diagnostics.Debug.WriteLine("========Compiler error============");
System.Diagnostics.Debug.WriteLine(oops.ErrorText);
}
throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
}
// Finally, Invoke the web service method
object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
return mi.Invoke(wsvcClass, args);
}
else
{ return null;
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Security.Permissions;
using System.Web.Services.Description;
namespace ConnectionLib
{
internal class WsProxy
{
[SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
System.Net.WebClient client = new System.Net.WebClient(); // Connect To the web service
System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl"); // Now read the WSDL file describing a service.
ServiceDescription description = ServiceDescription.Read(stream); ///// LOAD THE DOM ///////// // Initialize a service description importer.
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
importer.AddServiceDescription(description, null, null); // Generate a proxy client. importer.Style = ServiceDescriptionImportStyle.Client; // Generate properties to represent primitive values.
importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; // Initialize a Code-DOM tree into which we will import the service.
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace); // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1); if (warning == 0) // If zero then we are good to go
{
// Generate the proxy code
CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp"); // Compile the assembly proxy with the appropriate references
string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences); CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1); // Check For Errors
if (results.Errors.Count > 0)
{ foreach (CompilerError oops in results.Errors)
{ System.Diagnostics.Debug.WriteLine("========Compiler error============");
System.Diagnostics.Debug.WriteLine(oops.ErrorText);
}
throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
}
// Finally, Invoke the web service method
object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
return mi.Invoke(wsvcClass, args);
}
else
{ return null;
}
}
}
}
Các câu lệnh chạy từ Run
Các câu lệnh chạy từ Run
- Accessibility Controls ( chương trình cơ bản trong Win)
access.cpl
- Add Hardware Wizard ( Tự dò tìm phần cứng)
hdwwiz.cpl
- Add/Remove Programs ( Thêm hoặc gỡ bỏ chương trình)
appwiz.cpl
- Administrative Tools ( công cụ quản trị̣)
control admintools
- Automatic Updates ( tự động cập nhật)
wuaucpl.cpl
- Bluetooth Transfer Wizard ( khởi động Bluetooth)
fsquirt
- Calculator ( máy tính )
calc
- Certificate Managercertmgr.msc- Character Map ( bảng ký tự)
charmap
- Check Disk Utility ( kiểm tra đĩa)
chkdsk
- Clipboard Viewer ( mở clipboard)
clipbrd
- Command Prompt (mở cửa sổ Dos)
cmd
- Component Services ( quản lý các thành phần )
dcomcnfg
- Computer Management (quản lý máy)
compmgmt.msc
- Date and Time Properties ( thuộc tính ngày giờ)
timedate.cpl
- DDE Shares ( chia sẻ DDE)
ddeshare
- Device Manager ( quản lý thiết bịdevmgmt.msc- Direct X Control Panel (If Installed)*directx.cpl
- Direct X Troubleshooterdxdiag- Disk Cleanup Utility ( quét rác)
cleanmgr
- Disk Defragment ( chống phân mảnh đĩa)
dfrg.msc
- Disk Management (quản lý đĩa)
diskmgmt.msc
- Disk Partition Manager (quản lý phân vùng)
diskpart
Display Propertiescontrol desktopDisplay Properties
desk.cpl
Display Properties (w/Appearance Tab Preselected)
control color
- Dr. Watson System Troubleshooting Utility (sử lý lỗi hệ thống)
drwtsn32
- Driver Verifier Utility
verifier
- Event
Viewereventvwr.msc
- File Signature Verification Tool
sigverif
- Findfastfindfast.cpl
- Folders Properties
control folders
- Fonts
control fonts
- Fonts
Folderfonts
- Free Cell Card Game
freecell
- Game
Controllersjoy.cpl
- Group Policy Editor (XP Prof)
gpedit.msc
- Hearts Card Game
mshearts
- Iexpress Wizard
iexpress
- Indexing Service
ciadv.msc
- Internet Properties
inetcpl.cpl
- IP Configuration (Display Connection Configuration)
ipconfig /all
- IP Configuration (Display DNS Cache Contents)
ipconfig /displaydns
- IP Configuration (Delete DNS Cache Contents)
ipconfig /flushdns
- IP Configuration (Release All Connections)
ipconfig /release
- IP Configuration (Renew All Connections)
ipconfig /renew
- IP Configuration (Refreshes DHCP & Re-Registers DNS)
ipconfig /registerdns
- IP Configuration (Display DHCP Class ID)
ipconfig /showclassid
- IP Configuration (Modifies DHCP Class ID)
ipconfig /setclassid- ava
Control Panel (If Installed)
jpicpl32.cpl
- Java Control Panel (If Installed)
javaws
- Keyboard Properties
control keyboard
- Local Security Settings
secpol.msc
- Local Users and Group
slusrmgr.msc
- Logs You Out Of Windows
logoff
- Microsoft Chat
winchat
- Minesweeper Game
winmine
- Mouse Properties
control mouse
- Mouse Properties
main.cpl
- Network Connections
control netconnections
- Network Connections
ncpa.cpl
- Network Setup Wizard
netsetup.cpl
- Notepad
notepad
- Nview Desktop Manager (If Installed)
nvtuicpl.cpl
- Object Packager
packager
- ODBC Data Source Administrator
odbccp32.cpl
- On Screen Keyboard
osk
- Opens AC3 Filter (If Installed)
ac3filter.cpl
- Password Properties
password.cpl
- Performance Monitor
perfmon.msc
- Performance Monitor
perfmon
- Phone and Modem
Optionstelephon.cpl
- Power Configuration
powercfg.cpl
- Printers and Faxes
control printers
- Printers Folder
printers
- Private Character Editor
eudcedit
- Quicktime (If Installed)
QuickTime.cpl
- Regional Setting
sintl.cpl
- Registry Editor
regedit
- Registry Editor
regedit32
- Remote Desktop
mstsc
- Removable Storagent
msmgr.msc
- Removable Storage Operator Request
sntmsoprq.msc
- Resultant Set of Policy (XP Prof)
rsop.msc
- Scanners and Camera
ssticpl.cpl
- Scheduled Tasks
control schedtasks
- Security Center
wscui.cpl
- Services
services.msc
- Shared Folder
sfsmgmt.msc
- Shuts Down Windows
shutdown
- Sounds and Audio
mmsys.cpl
- Spider Solitare Card Game
spider
- SQL Client Configuration
cliconfg
- System Configuration Editor
sysedit
- System Configuration Utility
msconfig
- System File Checker Utility (Scan Immediately)
sfc /scannow
- System File Checker Utility (Scan Once At Next Boot)
sfc /scanonce
- System File Checker Utility (Scan On Every Boot)
sfc /scanboot
- System File Checker Utility (Return to Default Setting)
sfc /revert
- System File Checker Utility (Purge File Cache)
sfc /purgecache
- System File Checker Utility (Set Cache Size to size x)
sfc /cachesize=x
- System Properties
sysdm.cpl
- Task Manager
taskmgr
- Telnet Client
telnet
- User Account Management
nusrmgr.cpl
- Utility Manager
utilman
- Windows Firewall ( tường lửa)
firewall.cpl
- Windows Magnifier
magnify
- Windows Management Infrastructure
wmimgmt.msc
- Windows System Security Tool ( công cụ bảo mật)
syskey
- Windows Update Launche
swupdmgr
- Windows XP Tour Wizard
tourstart
- Wordpad
- Accessibility Controls ( chương trình cơ bản trong Win)
access.cpl
- Add Hardware Wizard ( Tự dò tìm phần cứng)
hdwwiz.cpl
- Add/Remove Programs ( Thêm hoặc gỡ bỏ chương trình)
appwiz.cpl
- Administrative Tools ( công cụ quản trị̣)
control admintools
- Automatic Updates ( tự động cập nhật)
wuaucpl.cpl
- Bluetooth Transfer Wizard ( khởi động Bluetooth)
fsquirt
- Calculator ( máy tính )
calc
- Certificate Managercertmgr.msc- Character Map ( bảng ký tự)
charmap
- Check Disk Utility ( kiểm tra đĩa)
chkdsk
- Clipboard Viewer ( mở clipboard)
clipbrd
- Command Prompt (mở cửa sổ Dos)
cmd
- Component Services ( quản lý các thành phần )
dcomcnfg
- Computer Management (quản lý máy)
compmgmt.msc
- Date and Time Properties ( thuộc tính ngày giờ)
timedate.cpl
- DDE Shares ( chia sẻ DDE)
ddeshare
- Device Manager ( quản lý thiết bịdevmgmt.msc- Direct X Control Panel (If Installed)*directx.cpl
- Direct X Troubleshooterdxdiag- Disk Cleanup Utility ( quét rác)
cleanmgr
- Disk Defragment ( chống phân mảnh đĩa)
dfrg.msc
- Disk Management (quản lý đĩa)
diskmgmt.msc
- Disk Partition Manager (quản lý phân vùng)
diskpart
Display Propertiescontrol desktopDisplay Properties
desk.cpl
Display Properties (w/Appearance Tab Preselected)
control color
- Dr. Watson System Troubleshooting Utility (sử lý lỗi hệ thống)
drwtsn32
- Driver Verifier Utility
verifier
- Event
Viewereventvwr.msc
- File Signature Verification Tool
sigverif
- Findfastfindfast.cpl
- Folders Properties
control folders
- Fonts
control fonts
- Fonts
Folderfonts
- Free Cell Card Game
freecell
- Game
Controllersjoy.cpl
- Group Policy Editor (XP Prof)
gpedit.msc
- Hearts Card Game
mshearts
- Iexpress Wizard
iexpress
- Indexing Service
ciadv.msc
- Internet Properties
inetcpl.cpl
- IP Configuration (Display Connection Configuration)
ipconfig /all
- IP Configuration (Display DNS Cache Contents)
ipconfig /displaydns
- IP Configuration (Delete DNS Cache Contents)
ipconfig /flushdns
- IP Configuration (Release All Connections)
ipconfig /release
- IP Configuration (Renew All Connections)
ipconfig /renew
- IP Configuration (Refreshes DHCP & Re-Registers DNS)
ipconfig /registerdns
- IP Configuration (Display DHCP Class ID)
ipconfig /showclassid
- IP Configuration (Modifies DHCP Class ID)
ipconfig /setclassid- ava
Control Panel (If Installed)
jpicpl32.cpl
- Java Control Panel (If Installed)
javaws
- Keyboard Properties
control keyboard
- Local Security Settings
secpol.msc
- Local Users and Group
slusrmgr.msc
- Logs You Out Of Windows
logoff
- Microsoft Chat
winchat
- Minesweeper Game
winmine
- Mouse Properties
control mouse
- Mouse Properties
main.cpl
- Network Connections
control netconnections
- Network Connections
ncpa.cpl
- Network Setup Wizard
netsetup.cpl
- Notepad
notepad
- Nview Desktop Manager (If Installed)
nvtuicpl.cpl
- Object Packager
packager
- ODBC Data Source Administrator
odbccp32.cpl
- On Screen Keyboard
osk
- Opens AC3 Filter (If Installed)
ac3filter.cpl
- Password Properties
password.cpl
- Performance Monitor
perfmon.msc
- Performance Monitor
perfmon
- Phone and Modem
Optionstelephon.cpl
- Power Configuration
powercfg.cpl
- Printers and Faxes
control printers
- Printers Folder
printers
- Private Character Editor
eudcedit
- Quicktime (If Installed)
QuickTime.cpl
- Regional Setting
sintl.cpl
- Registry Editor
regedit
- Registry Editor
regedit32
- Remote Desktop
mstsc
- Removable Storagent
msmgr.msc
- Removable Storage Operator Request
sntmsoprq.msc
- Resultant Set of Policy (XP Prof)
rsop.msc
- Scanners and Camera
ssticpl.cpl
- Scheduled Tasks
control schedtasks
- Security Center
wscui.cpl
- Services
services.msc
- Shared Folder
sfsmgmt.msc
- Shuts Down Windows
shutdown
- Sounds and Audio
mmsys.cpl
- Spider Solitare Card Game
spider
- SQL Client Configuration
cliconfg
- System Configuration Editor
sysedit
- System Configuration Utility
msconfig
- System File Checker Utility (Scan Immediately)
sfc /scannow
- System File Checker Utility (Scan Once At Next Boot)
sfc /scanonce
- System File Checker Utility (Scan On Every Boot)
sfc /scanboot
- System File Checker Utility (Return to Default Setting)
sfc /revert
- System File Checker Utility (Purge File Cache)
sfc /purgecache
- System File Checker Utility (Set Cache Size to size x)
sfc /cachesize=x
- System Properties
sysdm.cpl
- Task Manager
taskmgr
- Telnet Client
telnet
- User Account Management
nusrmgr.cpl
- Utility Manager
utilman
- Windows Firewall ( tường lửa)
firewall.cpl
- Windows Magnifier
magnify
- Windows Management Infrastructure
wmimgmt.msc
- Windows System Security Tool ( công cụ bảo mật)
syskey
- Windows Update Launche
swupdmgr
- Windows XP Tour Wizard
tourstart
- Wordpad
Thứ Sáu, 8 tháng 8, 2008
ASP.NET FTP with SSL
What I have here is a very rough starter class that has just passed the first phase of testing. I intend it only to help others get up and running; if you are planning on using it, it really needs a lot more error checking and features. Hopefully, I will have time later to come back and update this article with some more solid code.
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
namespace FtpFramework
{
public class FTP
{
public string UserName = "";
public string Password = "";
public bool KeepAlive = false;
public bool UseSSL = true;
private string m_FTPSite = "";
public string FTPSite
{
get { return m_FTPSite; }
set
{
m_FTPSite = value;
if (!m_FTPSite.EndsWith("/")) m_FTPSite += "/";
}
}
private string m_CurDir = "";
public string CurrentDirectory
{
get { return m_CurDir; }
set
{
m_CurDir = value;
if (!m_CurDir.EndsWith("/") && m_CurDir != "")
m_CurDir += "/";
m_CurDir = m_CurDir.TrimStart("/".ToCharArray());
}
}
public FTP() { }
public FTP(string sFTPSite, string sUserName,
string sPassword)
{
UserName = sUserName;
Password = sPassword;
FTPSite = sFTPSite;
}
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
public List GetFileList(string CurDirectory,
string StartsWith, string EndsWith)
{
CurrentDirectory = CurDirectory;
return GetFileList(StartsWith, EndsWith);
}
public List GetFileList(string StartsWith,
string EndsWith)
{
FtpWebRequest oFTP =
(FtpWebRequest)FtpWebRequest.Create(FTPSite +
CurrentDirectory);
//oFTP.EnableSsl = true;
oFTP.Credentials = new NetworkCredential(UserName,
Password);
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback
(ValidateServerCertificate);
//System.Security.Cryptography.X509Certificates.
//X509Certificate oCert = new System.Security.Cryptography.
//X509Certificates.X509Certificate();
//oFTP.ClientCertificates.Add(oCert);
oFTP.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response =
(FtpWebResponse)oFTP.GetResponse();
StreamReader sr =
new StreamReader(response.GetResponseStream());
string str = sr.ReadLine();
List oList = new List();
while (str != null) {
if (str.StartsWith(StartsWith) &&
str.EndsWith(EndsWith)) oList.Add(str);
str = sr.ReadLine();
}
sr.Close();
response.Close();
oFTP = null;
return oList;
}
public bool GetFile(string Name, string DestFile)
{
//1. Create a request: must be in ftp://hostname format,
// not just ftp.myhost.com
FtpWebRequest oFTP = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + Name);
//oFTP.EnableSsl = true;
//2. Set credentials
oFTP.Credentials = new NetworkCredential(UserName,
Password);
//Define the action required (in this case, download
// a file)
oFTP.Method = WebRequestMethods.Ftp.DownloadFile;
//3. Settings
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//we want a binary transfer, not textual data
oFTP.UseBinary = true;
//4. If we were using a method that uploads data;
// for example, UploadFile, we would open the
// ftp.GetRequestStream here an send the data
//5. Get the response to the Ftp request and the
// associated stream
FtpWebResponse response =
(FtpWebResponse)oFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
//loop to read & write to file
FileStream fs = new FileStream(DestFile, FileMode.Create);
Byte[] buffer = new Byte[2047];
int read = 1;
while (read != 0) {
read = responseStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, read);
} //see Note(1)
responseStream.Close();
fs.Flush();
fs.Close();
responseStream.Close();
response.Close();
oFTP = null;
return true;
}
public bool UploadFile(FileInfo oFile)
{
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
try {
//Settings required to establish a connection with
//the server
ftpRequest = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + oFile.Name);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Proxy = null;
ftpRequest.UseBinary = true;
ftpRequest.Credentials =
new NetworkCredential(UserName, Password);
ftpRequest.KeepAlive = KeepAlive;
ftpRequest.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//Selection of file to be uploaded
byte[] fileContents = new byte[oFile.Length];
//will destroy the object immediately after being used
using (FileStream fr = oFile.OpenRead()) {
fr.Read(fileContents, 0,
Convert.ToInt32(oFile.Length));
}
using (Stream writer = ftpRequest.GetRequestStream()) {
writer.Write(fileContents, 0, fileContents.Length);
}
//Gets the FtpWebResponse of the uploading operation
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
//Display response
//Response.Write(ftpResponse.StatusDescription);
ftpResponse.Close();
ftpRequest = null;
return true;
}
catch (WebException webex) {
return false;
//this.Message = webex.ToString();
}
}
public bool DeleteFile(string Name)
{
//1. Create a request: must be in ftp://hostname format,
// not just ftp.myhost.com
FtpWebRequest oFTP = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + Name);
//oFTP.EnableSsl = true;
//2. Set credentials
oFTP.Credentials = new NetworkCredential(UserName, Password);
//Define the action required (in this case, download a file)
oFTP.Method = WebRequestMethods.Ftp.DeleteFile;
//3. Settings
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//we want a binary transfer, not textual data
oFTP.UseBinary = true;
//4. If we were using a method that uploads data;
// for example, UploadFile, we would open the
// ftp.GetRequestStream here an send the data
//5. Get the response to the Ftp request and the associated
// stream
FtpWebResponse response = (FtpWebResponse)oFTP.GetResponse();
FtpStatusCode oStat = response.StatusCode;
response.Close();
oFTP = null;
return true;
} // DeleteFile()
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
namespace FtpFramework
{
public class FTP
{
public string UserName = "";
public string Password = "";
public bool KeepAlive = false;
public bool UseSSL = true;
private string m_FTPSite = "";
public string FTPSite
{
get { return m_FTPSite; }
set
{
m_FTPSite = value;
if (!m_FTPSite.EndsWith("/")) m_FTPSite += "/";
}
}
private string m_CurDir = "";
public string CurrentDirectory
{
get { return m_CurDir; }
set
{
m_CurDir = value;
if (!m_CurDir.EndsWith("/") && m_CurDir != "")
m_CurDir += "/";
m_CurDir = m_CurDir.TrimStart("/".ToCharArray());
}
}
public FTP() { }
public FTP(string sFTPSite, string sUserName,
string sPassword)
{
UserName = sUserName;
Password = sPassword;
FTPSite = sFTPSite;
}
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
public List
string StartsWith, string EndsWith)
{
CurrentDirectory = CurDirectory;
return GetFileList(StartsWith, EndsWith);
}
public List
string EndsWith)
{
FtpWebRequest oFTP =
(FtpWebRequest)FtpWebRequest.Create(FTPSite +
CurrentDirectory);
//oFTP.EnableSsl = true;
oFTP.Credentials = new NetworkCredential(UserName,
Password);
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback
(ValidateServerCertificate);
//System.Security.Cryptography.X509Certificates.
//X509Certificate oCert = new System.Security.Cryptography.
//X509Certificates.X509Certificate();
//oFTP.ClientCertificates.Add(oCert);
oFTP.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response =
(FtpWebResponse)oFTP.GetResponse();
StreamReader sr =
new StreamReader(response.GetResponseStream());
string str = sr.ReadLine();
List
while (str != null) {
if (str.StartsWith(StartsWith) &&
str.EndsWith(EndsWith)) oList.Add(str);
str = sr.ReadLine();
}
sr.Close();
response.Close();
oFTP = null;
return oList;
}
public bool GetFile(string Name, string DestFile)
{
//1. Create a request: must be in ftp://hostname format,
// not just ftp.myhost.com
FtpWebRequest oFTP = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + Name);
//oFTP.EnableSsl = true;
//2. Set credentials
oFTP.Credentials = new NetworkCredential(UserName,
Password);
//Define the action required (in this case, download
// a file)
oFTP.Method = WebRequestMethods.Ftp.DownloadFile;
//3. Settings
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//we want a binary transfer, not textual data
oFTP.UseBinary = true;
//4. If we were using a method that uploads data;
// for example, UploadFile, we would open the
// ftp.GetRequestStream here an send the data
//5. Get the response to the Ftp request and the
// associated stream
FtpWebResponse response =
(FtpWebResponse)oFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
//loop to read & write to file
FileStream fs = new FileStream(DestFile, FileMode.Create);
Byte[] buffer = new Byte[2047];
int read = 1;
while (read != 0) {
read = responseStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, read);
} //see Note(1)
responseStream.Close();
fs.Flush();
fs.Close();
responseStream.Close();
response.Close();
oFTP = null;
return true;
}
public bool UploadFile(FileInfo oFile)
{
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
try {
//Settings required to establish a connection with
//the server
ftpRequest = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + oFile.Name);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Proxy = null;
ftpRequest.UseBinary = true;
ftpRequest.Credentials =
new NetworkCredential(UserName, Password);
ftpRequest.KeepAlive = KeepAlive;
ftpRequest.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//Selection of file to be uploaded
byte[] fileContents = new byte[oFile.Length];
//will destroy the object immediately after being used
using (FileStream fr = oFile.OpenRead()) {
fr.Read(fileContents, 0,
Convert.ToInt32(oFile.Length));
}
using (Stream writer = ftpRequest.GetRequestStream()) {
writer.Write(fileContents, 0, fileContents.Length);
}
//Gets the FtpWebResponse of the uploading operation
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
//Display response
//Response.Write(ftpResponse.StatusDescription);
ftpResponse.Close();
ftpRequest = null;
return true;
}
catch (WebException webex) {
return false;
//this.Message = webex.ToString();
}
}
public bool DeleteFile(string Name)
{
//1. Create a request: must be in ftp://hostname format,
// not just ftp.myhost.com
FtpWebRequest oFTP = (FtpWebRequest)FtpWebRequest.
Create(FTPSite + CurrentDirectory + Name);
//oFTP.EnableSsl = true;
//2. Set credentials
oFTP.Credentials = new NetworkCredential(UserName, Password);
//Define the action required (in this case, download a file)
oFTP.Method = WebRequestMethods.Ftp.DeleteFile;
//3. Settings
oFTP.KeepAlive = KeepAlive;
oFTP.EnableSsl = UseSSL;
// Validate the server certificate with
// ServerCertificateValidationCallBack
if (UseSSL) ServicePointManager.
ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(ValidateServerCertificate);
//we want a binary transfer, not textual data
oFTP.UseBinary = true;
//4. If we were using a method that uploads data;
// for example, UploadFile, we would open the
// ftp.GetRequestStream here an send the data
//5. Get the response to the Ftp request and the associated
// stream
FtpWebResponse response = (FtpWebResponse)oFTP.GetResponse();
FtpStatusCode oStat = response.StatusCode;
response.Close();
oFTP = null;
return true;
} // DeleteFile()
}
}
Thứ Hai, 4 tháng 8, 2008
Cơ sở dữ liệu thời gian thực
Khi thiết kế CSDL, nhiều khi chúng ta gặp các đối tượng mà một số thông tin thường xuyên thay đổi theo thời gian. Lấy ví dụ, khi mô tả thông tin về nhân viên, thì ngoài các trường ít (hoặc không) thay đổi như Mã nhân viên, họ tên, số CMND… thì có một số trường có thể thay đổi như: Hệ số lương, chức danh, chức vụ. Trong một số trường hợp, các thông tin thay đổi thường xuyên, như tỉ giá ngoại tệ, giá bán sản phẩm…
Một trường hợp điển hình, đó là khi cần tính doanh thu của cửa hàng trong một tháng, khi đó giá của các sản phẩm (tính theo ngoại tệ) có sự thay đổi cũng như tỉ giá ngoại tệ có thể thay đổi theo từng ngày. Do đó, để tính doanh thu của tháng thì cần phải xác định giá của sản phẩm của từng ngày cũng như tỉ giá tương ứng, từ đó tính ra doanh thu ngày và tổng doanh thu của tháng.
Giải pháp thường được dùng là tạo một bảng diễn biến ứng với mỗi trường có thể thay đổi, và khi giá trị của trường thay đổi thì tạo một bản ghi mới. Tuy nhiên, cách này thường gây khó khăn trong việc tính toán, và khi có nhiều trường thay đổi thì cần phải tạo thêm rất nhiều bảng. Bài này đưa ra một mô hình cơ sở dữ liệu có khả năng lưu lại sự thay đổi của các trường.
Mô hình cơ sở dữ liệu theo thời gian
Để đáp ứng được khả năng lưu lại thay đổi theo thời gian, mỗi thông tin được lưu trữ trong CSDL theo 3 chiều, có nghĩa là để xác định được chính xác giá trị của trường chúng ta cần phải có các thông tin: Dòng, cột và thời gian.
Ví dụ, để liệt kê tỉ giá của ngoại tệ tại thời điểm 10:20 ngày 12/07/2007, chúng ta dùng câu lệnh:
SELECT Currency, Rate FROM ExchangeRateAt(’2007-8-12 10:20:00′)
Từ đó chúng ta sẽ xây dựng mô hình bảng dữ liệu với các đặc điểm sau:
Hỗ trợ đầy đủ các câu lệnh SELECT, INSERT, UPDATE, DELETE
Khi SELECT mà KHÔNG chỉ ra thời gian thì lấy giá trị của lần cập nhật gần đây nhất (giá trị hiện thời).
Khi SELECT mà CÓ chỉ ra thời gian, thì lấy các giá trị được cập nhật mới nhất tính đến thời điểm đó.
Khi SELECT tại một thời điểm, các bản ghi tạo ra sau thời điểm đó, hoặc bị xoá trước thời điểm đó sẽ không được đưa ra.
Khi INSERT một bản ghi mới, bản ghi sẽ tồn tại tính từ thời điểm thực hiện lệnh.
Khi UPDATE, giá trị mới của trường có tác dụng từ thời điểm thực hiện lệnh.
Khi DELETE, bản ghi bị xoá tính từ thời điểm thực hiện lệnh.
Với mô hình CSDL như trên, để tính doanh thu của các mặt hàng trong tháng khi giá mặt hàng thay đổi, thì câu truy vấn có thể đơn giản như sau:
SELECT SUM(Total) Total FROM(SELECT Transactions.Quantity*(SELECT Products.Price FROM ProductsAt(Transactions.Date) ProductsWHERE Products.ID = Transactions.ProductID) TotalFROM Transactions WHERE Transactions.Date BETWEEN @FromDate AND @ToDate) Transactions
Xây dựng bảng dữ liệu theo thời gian trên MS SQL Server
Các cơ sở dữ liệu quan hệ hiện nay không hỗ trợ chiều thời gian. Tuy nhiên, chúng ta có thể dùng hàm và view để thực hiện khả năng này.
Bảng lưu dữ liệu
Trước tiên, cần phải xây dựng bảng chứa dữ liệu chung cho tất cả các trường có thể thay đổi, bảng này có dạng như sau:
Trong đó các trường ItemID, RecordID, FieldIndex, Applied, Expired tương ứng với bảng, dòng, cột, thời điểm áp dụng và thời điểm bị xoá. Các trường còn lại tương ứng với kiểu dữ liệu của thông tin cần lưu trữ.
Để lấy ra một giá trị cụ thể của một trường thuộc một bản ghi tại một thời điểm nào đó, chúng ta xây dựng các hàm:
GetIntegerValue(@ItemID, @RecordID, @FieldIndex, @Time)
GetFloatValue(@ItemID, @RecordID, @FieldIndex, @Time)
GetDateTimeValue((@ItemID, @RecordID, @FieldIndex, @Time)
GetStringValue(@ItemID, @RecordID, @FieldIndex, @Time)
Chi tiết về các hàm này có thể xem trong CSDL minh hoạ đi kèm.
Tạo bảng dữ liệu theo thời gian bằng hàm inline và view
Để lấy dữ liệu tại một thời điểm nào đó, chúng ta xây dựng một hàm inline, ví dụ hàm sau lấy tỉ giá ngoại tệ tại một thời điểm:
Từ đó xây dựng một View tên là ExchageRate với dữ liệu tại thời điểm hiện thời.
View này hiện chưa có tính năng INSERT, UPDATE và DELETE, do đó chúng ta sẽ xây dựng các Trigger tương ứng cho phép cập nhật và xoá dữ liệu.
INSERT Trigger:
UPDATE Trigger
DELETE Trigger
Sử dụng bảng dữ liệu theo thời gian
Bảng dữ liệu theo thời gian (mà thực chất là hàm và view) được sử dụng bình thường như các bảng dữ liệu khác. Chúng ta có thể lấy dữ liệu tại thời điểm hiện thời hoặc tại một thời điểm nào đó, ví dụ như:
SELECT * FROM ExchangeRateAt(’12/6/2007 23:55:00′)SELECT * FROM ExchangeRate
Hoặc dùng các câu lênh cập nhật dữ liệu INSERT, UPDATE, DELETE, ví dụ:
INSERT ExchangeRate VALUES(N’HKD’, 8200)UPDATE ExchangeRate SET Rate = 16300 WHERE Currency = N’USD’DELETE ExchangeRate WHERE Currency = N’HKD’
Ưu điểm và hạn chế
Bảng dữ liệu theo thời gian thoả mãn đầy đủ những tính chất đã nêu ở trên, do đó có thể áp dụng vào các bài toán mà cần lưu lại sự thay đổi dữ liệu.
Do phải dùng hàm và view nên phương pháp này có một số hạn chế sau:
Không hỗ trợ ràng buộc dữ liệu: Do không phải là bảng thật nên không tạo được ràng buộc dữ liệu với các bảng khác.
Hiệu năng không cao: Do phải tính toán nhiều để đưa ra được kết quả nên không hiệu quả bằng truy vấn từ một bảng thật.
Phức tạp: Để tạo ra một bảng dữ liệu theo thời gian, cần phải xây dựng một hàm inline, một view và các trigger tương ứng. Tuy nhiên, cách xây dựng là như nhau cho các bảng.
Hướng mở rộng
Xây dựng các bảng dữ liệu lai giữa bảng thường (chứa các thông tin không cần lưu lại sự thay đổi) và các thông tin cần lưu lại sự thay đổi. Khi đó, các trường cần lưu lại sự thay đổi sẽ được thiết kế dưới dạng Computed Column và được cập nhật thông qua các trigger.
Một trường hợp điển hình, đó là khi cần tính doanh thu của cửa hàng trong một tháng, khi đó giá của các sản phẩm (tính theo ngoại tệ) có sự thay đổi cũng như tỉ giá ngoại tệ có thể thay đổi theo từng ngày. Do đó, để tính doanh thu của tháng thì cần phải xác định giá của sản phẩm của từng ngày cũng như tỉ giá tương ứng, từ đó tính ra doanh thu ngày và tổng doanh thu của tháng.
Giải pháp thường được dùng là tạo một bảng diễn biến ứng với mỗi trường có thể thay đổi, và khi giá trị của trường thay đổi thì tạo một bản ghi mới. Tuy nhiên, cách này thường gây khó khăn trong việc tính toán, và khi có nhiều trường thay đổi thì cần phải tạo thêm rất nhiều bảng. Bài này đưa ra một mô hình cơ sở dữ liệu có khả năng lưu lại sự thay đổi của các trường.
Mô hình cơ sở dữ liệu theo thời gian
Để đáp ứng được khả năng lưu lại thay đổi theo thời gian, mỗi thông tin được lưu trữ trong CSDL theo 3 chiều, có nghĩa là để xác định được chính xác giá trị của trường chúng ta cần phải có các thông tin: Dòng, cột và thời gian.
Ví dụ, để liệt kê tỉ giá của ngoại tệ tại thời điểm 10:20 ngày 12/07/2007, chúng ta dùng câu lệnh:
SELECT Currency, Rate FROM ExchangeRateAt(’2007-8-12 10:20:00′)
Từ đó chúng ta sẽ xây dựng mô hình bảng dữ liệu với các đặc điểm sau:
Hỗ trợ đầy đủ các câu lệnh SELECT, INSERT, UPDATE, DELETE
Khi SELECT mà KHÔNG chỉ ra thời gian thì lấy giá trị của lần cập nhật gần đây nhất (giá trị hiện thời).
Khi SELECT mà CÓ chỉ ra thời gian, thì lấy các giá trị được cập nhật mới nhất tính đến thời điểm đó.
Khi SELECT tại một thời điểm, các bản ghi tạo ra sau thời điểm đó, hoặc bị xoá trước thời điểm đó sẽ không được đưa ra.
Khi INSERT một bản ghi mới, bản ghi sẽ tồn tại tính từ thời điểm thực hiện lệnh.
Khi UPDATE, giá trị mới của trường có tác dụng từ thời điểm thực hiện lệnh.
Khi DELETE, bản ghi bị xoá tính từ thời điểm thực hiện lệnh.
Với mô hình CSDL như trên, để tính doanh thu của các mặt hàng trong tháng khi giá mặt hàng thay đổi, thì câu truy vấn có thể đơn giản như sau:
SELECT SUM(Total) Total FROM(SELECT Transactions.Quantity*(SELECT Products.Price FROM ProductsAt(Transactions.Date) ProductsWHERE Products.ID = Transactions.ProductID) TotalFROM Transactions WHERE Transactions.Date BETWEEN @FromDate AND @ToDate) Transactions
Xây dựng bảng dữ liệu theo thời gian trên MS SQL Server
Các cơ sở dữ liệu quan hệ hiện nay không hỗ trợ chiều thời gian. Tuy nhiên, chúng ta có thể dùng hàm và view để thực hiện khả năng này.
Bảng lưu dữ liệu
Trước tiên, cần phải xây dựng bảng chứa dữ liệu chung cho tất cả các trường có thể thay đổi, bảng này có dạng như sau:
Trong đó các trường ItemID, RecordID, FieldIndex, Applied, Expired tương ứng với bảng, dòng, cột, thời điểm áp dụng và thời điểm bị xoá. Các trường còn lại tương ứng với kiểu dữ liệu của thông tin cần lưu trữ.
Để lấy ra một giá trị cụ thể của một trường thuộc một bản ghi tại một thời điểm nào đó, chúng ta xây dựng các hàm:
GetIntegerValue(@ItemID, @RecordID, @FieldIndex, @Time)
GetFloatValue(@ItemID, @RecordID, @FieldIndex, @Time)
GetDateTimeValue((@ItemID, @RecordID, @FieldIndex, @Time)
GetStringValue(@ItemID, @RecordID, @FieldIndex, @Time)
Chi tiết về các hàm này có thể xem trong CSDL minh hoạ đi kèm.
Tạo bảng dữ liệu theo thời gian bằng hàm inline và view
Để lấy dữ liệu tại một thời điểm nào đó, chúng ta xây dựng một hàm inline, ví dụ hàm sau lấy tỉ giá ngoại tệ tại một thời điểm:
Từ đó xây dựng một View tên là ExchageRate với dữ liệu tại thời điểm hiện thời.
View này hiện chưa có tính năng INSERT, UPDATE và DELETE, do đó chúng ta sẽ xây dựng các Trigger tương ứng cho phép cập nhật và xoá dữ liệu.
INSERT Trigger:
UPDATE Trigger
DELETE Trigger
Sử dụng bảng dữ liệu theo thời gian
Bảng dữ liệu theo thời gian (mà thực chất là hàm và view) được sử dụng bình thường như các bảng dữ liệu khác. Chúng ta có thể lấy dữ liệu tại thời điểm hiện thời hoặc tại một thời điểm nào đó, ví dụ như:
SELECT * FROM ExchangeRateAt(’12/6/2007 23:55:00′)SELECT * FROM ExchangeRate
Hoặc dùng các câu lênh cập nhật dữ liệu INSERT, UPDATE, DELETE, ví dụ:
INSERT ExchangeRate VALUES(N’HKD’, 8200)UPDATE ExchangeRate SET Rate = 16300 WHERE Currency = N’USD’DELETE ExchangeRate WHERE Currency = N’HKD’
Ưu điểm và hạn chế
Bảng dữ liệu theo thời gian thoả mãn đầy đủ những tính chất đã nêu ở trên, do đó có thể áp dụng vào các bài toán mà cần lưu lại sự thay đổi dữ liệu.
Do phải dùng hàm và view nên phương pháp này có một số hạn chế sau:
Không hỗ trợ ràng buộc dữ liệu: Do không phải là bảng thật nên không tạo được ràng buộc dữ liệu với các bảng khác.
Hiệu năng không cao: Do phải tính toán nhiều để đưa ra được kết quả nên không hiệu quả bằng truy vấn từ một bảng thật.
Phức tạp: Để tạo ra một bảng dữ liệu theo thời gian, cần phải xây dựng một hàm inline, một view và các trigger tương ứng. Tuy nhiên, cách xây dựng là như nhau cho các bảng.
Hướng mở rộng
Xây dựng các bảng dữ liệu lai giữa bảng thường (chứa các thông tin không cần lưu lại sự thay đổi) và các thông tin cần lưu lại sự thay đổi. Khi đó, các trường cần lưu lại sự thay đổi sẽ được thiết kế dưới dạng Computed Column và được cập nhật thông qua các trigger.
Chủ Nhật, 3 tháng 8, 2008
Thuật toán chuyển đổi xâu ký tự từ TCVN3
Trong nhiều trường hợp cần phải chuyển đổi mã từ TCVN 3 sang Unicode, ví dụ như khi import dữ liệu từ các chương trình cũ. Bài này giới thiệu một thuật toán đơn giản cho phép chuyển đổi một xâu ký tự từ TCVN 3 sang Unicode với độ phức tạp cỡ O(n). Ý tưởng của thuật toán là xây dựng hai mảng chứa các ký tự tiếng Việt có dấu cho mã TCVN 3 và Unicode. Để không phải tìm kiếm mỗi khi gặp ký tự có dấu, cần xây dựng một mảng trung gian để chuyển đổi, điều này làm giảm đáng kể thời gian chuyển đổi. Thuật toán được cài đặt bằng ngôn ngữ C#.
using System;using System.Collections.Generic;using System.Text;
class Converter {
private static char[] tcvnchars = {
‘µ’, ‘¸’, ‘¶’, ‘·’, ‘¹’,
‘¨’, ‘»’, ‘¾’, ‘¼’, ‘½’, ‘Æ’,
‘©’, ‘Ç’, ‘Ê’, ‘È’, ‘É’, ‘Ë’,
‘®’, ‘Ì’, ‘Ð’, ‘Î’, ‘Ï’, ‘Ñ’,
‘ª’, ‘Ò’, ‘Õ’, ‘Ó’, ‘Ô’, ‘Ö’,
‘×’, ‘Ý’, ‘Ø’, ‘Ü’, ‘Þ’,
‘ß’, ‘ã’, ‘á’, ‘â’, ‘ä’,
‘«’, ‘å’, ‘è’, ‘æ’, ‘ç’, ‘é’,
‘¬’, ‘ê’, ‘í’, ‘ë’, ‘ì’, ‘î’,
‘ï’, ‘ó’, ‘ñ’, ‘ò’, ‘ô’,
‘’, ‘õ’, ‘ø’, ‘ö’, ‘÷’, ‘ù’,
‘ú’, ‘ý’, ‘û’, ‘ü’, ‘þ’,
‘¡’, ‘¢’, ‘§’, ‘£’, ‘¤’, ‘¥’, ‘¦’
};
private static char[] unichars = {
‘à’, ‘á’, ‘ả’, ‘ã’, ‘ạ’,
‘ă’, ‘ằ’, ‘ắ’, ‘ẳ’, ‘ẵ’, ‘ặ’,
‘â’, ‘ầ’, ‘ấ’, ‘ẩ’, ‘ẫ’, ‘ậ’,
‘đ’, ‘è’, ‘é’, ‘ẻ’, ‘ẽ’, ‘ẹ’,
‘ê’, ‘ề’, ‘ế’, ‘ể’, ‘ễ’, ‘ệ’,
‘ì’, ‘í’, ‘ỉ’, ‘ĩ’, ‘ị’,
‘ò’, ‘ó’, ‘ỏ’, ‘õ’, ‘ọ’,
‘ô’, ‘ồ’, ‘ố’, ‘ổ’, ‘ỗ’, ‘ộ’,
‘ơ’, ‘ờ’, ‘ớ’, ‘ở’, ‘ỡ’, ‘ợ’,
‘ù’, ‘ú’, ‘ủ’, ‘ũ’, ‘ụ’,
‘ư’, ‘ừ’, ‘ứ’, ‘ử’, ‘ữ’, ‘ự’,
‘ỳ’, ‘ý’, ‘ỷ’, ‘ỹ’, ‘ỵ’,
‘Ă’, ‘Â’, ‘Đ’, ‘Ê’, ‘Ô’, ‘Ơ’, ‘Ư’ };
private static char[] convertTable;
static Converter()
{ convertTable = new char[256];
for (int i = 0; i < 256; i++)
convertTable[i] = (char)i;
for (int i = 0; i < tcvnchars.Length; i++)
convertTable[tcvnchars[i]] = unichars[i];
}
public static string TCVN3ToUnicode(string value)
{
char[] chars = value.ToCharArray();
for (int i = 0; i < chars.Length; i++)
if (chars[i] < (char)256)
chars[i] = convertTable[chars[i]];
return new string(chars);
}}
using System;using System.Collections.Generic;using System.Text;
class Converter {
private static char[] tcvnchars = {
‘µ’, ‘¸’, ‘¶’, ‘·’, ‘¹’,
‘¨’, ‘»’, ‘¾’, ‘¼’, ‘½’, ‘Æ’,
‘©’, ‘Ç’, ‘Ê’, ‘È’, ‘É’, ‘Ë’,
‘®’, ‘Ì’, ‘Ð’, ‘Î’, ‘Ï’, ‘Ñ’,
‘ª’, ‘Ò’, ‘Õ’, ‘Ó’, ‘Ô’, ‘Ö’,
‘×’, ‘Ý’, ‘Ø’, ‘Ü’, ‘Þ’,
‘ß’, ‘ã’, ‘á’, ‘â’, ‘ä’,
‘«’, ‘å’, ‘è’, ‘æ’, ‘ç’, ‘é’,
‘¬’, ‘ê’, ‘í’, ‘ë’, ‘ì’, ‘î’,
‘ï’, ‘ó’, ‘ñ’, ‘ò’, ‘ô’,
‘’, ‘õ’, ‘ø’, ‘ö’, ‘÷’, ‘ù’,
‘ú’, ‘ý’, ‘û’, ‘ü’, ‘þ’,
‘¡’, ‘¢’, ‘§’, ‘£’, ‘¤’, ‘¥’, ‘¦’
};
private static char[] unichars = {
‘à’, ‘á’, ‘ả’, ‘ã’, ‘ạ’,
‘ă’, ‘ằ’, ‘ắ’, ‘ẳ’, ‘ẵ’, ‘ặ’,
‘â’, ‘ầ’, ‘ấ’, ‘ẩ’, ‘ẫ’, ‘ậ’,
‘đ’, ‘è’, ‘é’, ‘ẻ’, ‘ẽ’, ‘ẹ’,
‘ê’, ‘ề’, ‘ế’, ‘ể’, ‘ễ’, ‘ệ’,
‘ì’, ‘í’, ‘ỉ’, ‘ĩ’, ‘ị’,
‘ò’, ‘ó’, ‘ỏ’, ‘õ’, ‘ọ’,
‘ô’, ‘ồ’, ‘ố’, ‘ổ’, ‘ỗ’, ‘ộ’,
‘ơ’, ‘ờ’, ‘ớ’, ‘ở’, ‘ỡ’, ‘ợ’,
‘ù’, ‘ú’, ‘ủ’, ‘ũ’, ‘ụ’,
‘ư’, ‘ừ’, ‘ứ’, ‘ử’, ‘ữ’, ‘ự’,
‘ỳ’, ‘ý’, ‘ỷ’, ‘ỹ’, ‘ỵ’,
‘Ă’, ‘Â’, ‘Đ’, ‘Ê’, ‘Ô’, ‘Ơ’, ‘Ư’ };
private static char[] convertTable;
static Converter()
{ convertTable = new char[256];
for (int i = 0; i < 256; i++)
convertTable[i] = (char)i;
for (int i = 0; i < tcvnchars.Length; i++)
convertTable[tcvnchars[i]] = unichars[i];
}
public static string TCVN3ToUnicode(string value)
{
char[] chars = value.ToCharArray();
for (int i = 0; i < chars.Length; i++)
if (chars[i] < (char)256)
chars[i] = convertTable[chars[i]];
return new string(chars);
}}
Đăng ký:
Bài đăng (Atom)