Wednesday, August 22, 2007

Echo2 - Một nền tảng AJAX cho Java

Echo2 hợp nhất công nghệ AJAX với framework server-side thực tế để tạo ra một nền tảng ứng dụng web phiên bản tiếp theo, Echo2 cung cấp một framework quen thuộc và hướng đối tượng mạnh mẽ mà tăng cường khả năng thiết kế hướng sự kiện cho các bộ dụng cụ giao diện người dùng thick-client truyền thống như Java Swing hoặc Eclipse SWT. Echo2 tăng cường khả năng của kỹ thuật AJAX để tạo ra các ứng dụng Internet đẹp bằng cách sử dụng kinh nghiệm được sử dụng để tạo ra các ứng dụng trên desktop.

Các tính năng của Echo2:

  • Các ứng dụng được phát triển bằng Java dạng server-side sử dụng một API hướng thành phàn và điều khiển sự kiện mà làm việc như một bộ công cụ giao diện người sử dụng.
  • Việc tạo ra giao diện được thực hiện hoàn toàn thông qua AJAX, sử dụng một tài liệu HTML đơn giản. Việc cập nhật từ server được thực hiện trong một vùng nhỏ nhất có thể được, chỉ cập nhật các vị trí trên tài liệu HTML đã thay đổi.
  • Các ứng dụng có thể hiển thị các dialog dạng modal, nơi mà ứng dụng sẽ không cho phép nhập dữ liệu bên ngoài vùng được xác định.
  • Kỹ thuật Server push cho phép một ứng dụng điều khiển các trình duyệt của client mà không theo vòng lặp yêu cầu/đáp ứng web truyền thống.
  • Một API phát triển dạng thành phần mở rộng cho phép việc tạo ra các thành phần AJAX tái sử dụng.
  • Các trình duyệt được hỗ trợ bao gồm Firefox, Internet Explorer, Opera, Konqueror, Safari, Mozilla, và Netscape.

Tuesday, August 21, 2007

Groovy - Một ngôn ngữ động linh động cho Java Platform

Groovy ...
  • is an agile and dynamic language for the Java Virtual Machine
  • builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby and Smalltalk
  • makes modern programming features available to Java developers with almost-zero learning curve
  • supports Domain Specific Languages and other compact syntax so your code becomes easy to read and maintain
  • makes writing shell and build scripts easy with its powerful processing primitives, OO abilities and an Ant DSL
  • increases developer productivity by reducing scaffolding code when developing web, GUI, database or console applications
  • simplifies testing by supporting unit testing and mocking out-of-the-box
  • seamlessly integrates with all existing Java objects and libraries
  • compiles straight to Java bytecode so you can use it anywhere you can use Java

Friday, August 17, 2007

Automatically send keys to other application

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace ConsoleApplicationTest
{
   class Program
   {
       [System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
       static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
       [System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
       static extern bool SetForegroundWindow(IntPtr hWnd);

       static void Main(string[] args)
       {
           Process calc = Process.Start("calc.exe");
           calc.WaitForInputIdle();

           IntPtr calculatorHandle = FindWindow(null, "Calculator");
           if (calculatorHandle == IntPtr.Zero)
           {
               Console.WriteLine("Calculator is not running.");
           }
           else
           {
               SetForegroundWindow(calculatorHandle);
               SendKeys.SendWait("13");
               SendKeys.SendWait("*");
               SendKeys.SendWait("13");
               SendKeys.SendWait("=");
           }
       }
   }
} 

Thursday, August 16, 2007

Những điểm mới trong CSharp 3.0

Sau đây tóm tắt những điểm chính của các tính năng được giới thiệu trong C# 3.0

Khai báo biến địa phương sử dụng kiểu 'var'

  • Các biến địa phương có thể được khai báo bằng kiểu 'var', khi đó trình biên dịch sẽ xác định kiểu được sử dụng dựa trên dữ liệu được khởi tạo.
var i = 10; // i được tạo ra với kiểu int var name = “MyName” ; // name được tạo ra có kiểu string
  • Chỉ có thể được sử dụng khi được khai báo và khởi tạo trong cùng một câu lệnh.
  • Không được khởi tạo giá trị null.
  • Không được sử dụng trong các trường dữ liệu của lớp.
  • Hầu hết được sử dụng để lưu các kiểu không xác định trong việc lập trình dựa trên LINQ.

Khởi tạo đối tượng và tập hợp

  • Cho phép xác định giá trị vào bất kỳ trường dữ liệu hoặc thuộc tính của một kiểu dữ liệu tại thời điểm khởi tạo mà không cần triệu gọi phương thức khởi tạo (constructor) với các tham số.
  • Phương thức constructor ngầm định được thực hiện trước khi xác định giá trị.
Ví dụ: Coordinate c1 = new Coordinate {x=1 , y=2};
  • Được sử dụng trong các biểu thức truy vấn của LINQ cùng với các kiểu không xác định.
  • Hàm khởi tạo tập hợp (collection) sử dụng hàm khởi tạo đối tượng để xác định các giá trị thành phần của tập hợp mà không cần gọi phương thức Add nhiều lần.

Các phương thức mở rộng

  • Cho phép thêm phương thức mới vào kiểu hiện có mà không phải thay đổi kiểu dữ liệu đó.
  • Là các phương thức tĩnh đặc biệt nhưng được gọi như là các phương thức của instance.
  • Tham số đầu tiên được truyền vào các phương thức mở rộng xác định kiểu mà chúng thao tác được xử lý bởi từ khóa 'this'.
  • Chúng không thể truy cập các biến riêng (private) của kiểu dữ liệu mà chúng được mở rộng.
  • Các phương thức mở rộng cần được định nghĩa trong lớp tĩnh dạng non-nested và non-generic.
  • Các phương thức của instance được ưu tiên hơn so với các phương thức mở rộng trong trường hợp chúng có cùng tên (signature).

Kiểu không xác định

  • Are of class types which can have only public read-only properties as their members. No other class members like methods are allowed.
  • They are of reference types and are derived from ‘Object’ class.
  • Internally compiler gives them the name but its not accessible by application code.
  • They have a method scope.
  • Can be initiated directly e.g. new { property1=1, property2=”Hello World”};

Lambda Expressions

  • Very similar to anonymous methods introduced in C# 2.0.
  • Its an inline expression or statement block which can be used to pass arguments to method call or assign value to delegate.
  • All lambda expression use lambda operator => where the left side denotes result and right contains statement block or expression.

Auto-Implemented Properties

  • Helps in simplifying property declaration in cases where there is no custom logic required in accessors methods.
  • E.g. public int Price {get; set;};
  • Internally compiler creates an anonymous field for assigning values.

In my next post on this i will demonstrate these using a code sample.

Tuesday, August 14, 2007

CSharp Tip #1 : Static Classes

In .NET Framework 1.x, Static Classes are created by defining a class with a private constructor with one or more static members so that instance of the class cannot be created using new operator.

In .NET Framework 2.0 the need for such a private constructor is avoided by using a static keyword along with the class definition. Static classes are sealed and therefore cannot be inherited. Static classes cannot contain a constructor, although it is still possible to declare a static constructor to assign initial values.

using System;
using System.Collections.Generic;
using System.Text;

namespace VikasGoyal.StaticClasses
{
  class Program
  {
      static void Main(string[] args)
      {
          Console.WriteLine(StaticClass.getName());
          Console.WriteLine(StaticClass.getName());
          Console.WriteLine(StaticClass.getName());
      }
  }
  static class StaticClass
  {
      private static string name;
      static StaticClass()
      {
          name = "Vikas Goyal";
          Console.WriteLine("In Constructor");
      }
      public static string getName()
      {
          return name;
      }
  }
}
OUTPUT
In Constructor
Vikas Goyal
Vikas Goyal
Vikas Goyal

Cách xóa bất kỳ file nào trong Windows

Đây là phần mềm miễn phí tiện dụng cho phép xóa bất kỳ file nào mà Windows đang chạy.

Thường thì bạn sẽ nhận được một trong các thông báo sau nếu file bị khóa:

Cannot Delete file: Access is denied.

There has been a sharing vilation.

The source or destination file may be in use.

The files is in use by another program of user.

Make sure the disk is not full or write-protected and that the file is not currently in use.

Unlocker sẽ làm mọi thứ đơn giản hơn. Sau khi cài đặt chương trình, bạn sẽ thấy lựa chọn Unlocker xuất hiện ngay khi nhấp chuột vào bất kỳ file hay folder nào trong Windows Explorer. Để mở khóa cho file, bạn nhấn chuột phải vào đó > chọn Unlocker. Chọn Unlock all rồi đóng phần mềm này lại. Lúc này, bạn có thể xóa thoải mái trong Windows Explorer. Địa chỉ tải chương trình: http://ccollomb.free.fr/unlocker/