டிசம்பர் 07, 2010

தமிழ் தேதியிலிருந்து ஆங்கில தேதியை கணக்கிடுவது எப்படி?

தமிழ் நாட்காட்டி

ஆங்கில தேதியைப் பயன்படுத்தும் முறை எங்கும் நீக்கமற நிறைந்து விட்டது. அதை தவிர்க்கவும் முடியாது, பயன்படுத்துவதில் தவறும் இல்லை.  
 
ஆனால் இன்றும் தமிழ் தேதியை வெளியில் பயன்படுத்துகிறோமோ இல்லையோ, இல்லங்களில் பயன்படுத்திக் கொண்டுதான் இருக்கிறோம்.  இந்து பண்டிகைகள், திருமண தேதி இவற்றை தமிழில் குறிக்கும் பழக்கம் தொன்றுதொட்டு பழக்கத்தில் உள்ளது.  என் அம்மாவுக்கு என் பிறந்த தேதி ஆங்கிலத்தில் சரியாகத் தெரியாது, தமிழ் தேதியை உடனே சொல்லி விடுவார்.



நம்ம ப்ரியாவோட கல்யாணமா அது மாசி 10ந்தேதி எனச் சொன்னால், நம்மிடம் 2011 நாட்காட்டி இருந்தால் ஆங்கில தேதியை தெரிந்து கொள்ளலாம் இல்லை புது நாட்காட்டி கிடைக்கும் வரை காத்திருக்க வேண்டியதுதான்.  இதுவே ஒரு தேதி என்ன கிழமை எனக் கேட்டால் கணக்கில் மேதாவியாக இருப்பின் ஒரு காகிதமும் பேனாவும் போதும், அல்லது கணிப்பொறியின் உதவியுடன் துல்லியாமாக சொல்லிவிட முடியும்.   



கணித சமன்பாடுகள் எதையுமே கணினியில் ஏற்றி வேலைகளை எளிமை படுத்த முடியும்.  ஜாதக கட்டத்தில் இருக்கும் கிரக நிலை முதல் வின்னில் செலுத்தும் செயற்கைகோள் வரை அனைத்தும் கணிதம்தான் என்பதை அறிவோம்.  இந்த வரிசையில் ஆங்கில தேதியிலிருந்து தமிழ் தேதியும், தமிழ் தேதியிலிருந்து ஆங்கில தேதியையும் கணக்கிடும் சூத்திரம் தெரிந்தால் எளிதாக கணினியிலும் ஏற்றி விடலாம்.   இணையத்தில் இப்பணியைச் செய்து முடிக்க சில இணையதளங்கள் உள்ளன. 



http://www.prokerala.com/general/calendar/tamilcalendar.php
http://www.tamil-calendar.com 
http://www.barathonline.com/Articles/TamilCalendar2010.htm
http://tamildailycalendar.com/

கணக்கிடும் முறையை பெரும்பாலும் பகிர்ந்து கொள்ளப் படாததால் நிறைய நிரல்கள் நம்மிடம் இல்லை.  இது நமக்கு தெரிந்தால் டெஸ்க்டாப்பிலேயே தமிழ் நாட்காட்டி வைத்துக் கொள்ள இயலும், செல்பேசிகளில் பயன்படுத்தும் வண்ணம் சிறு மென்கலங்களை உருவாக்கலாம், இன்னும் நம் கற்பனை எல்லைகளை நீட்டிக் கொள்ள இயலும்.   இணையத்தில் எவ்வளவு தேடியும் தமிழ் தேதி கணக்கீட்டு முறையை அறிந்து கொள்ள முடியவில்லை.  இதனைக் குறித்து அறிந்தவர்கள் தகுந்த சுட்டியோ அல்லது விளக்கமோ அளிக்குமாறு தாழ்மையுடன் கேட்டுக் கொள்கிறேன்.

டிசம்பர் 01, 2010

ஜாவா தொடர் - Interface

இந்தப் பதிவில் Interface குறித்து அறிந்து கொள்வோம்.  C, C++ மொழிகளில் இந்தக் கருத்துரு இல்லை.  ஜாவா, C# மொழிகள் interfaceக்கு ஆதரவளிக்கிறது.  Interfaceஐ தமிழில் இடைமுகப்பு எனச் சொல்லலாம்.  Interface declaration ஒரு classஐ declare செய்வதைப் போலவே ஒத்திருக்கும். Interfaceல் methodகளைக் declare செய்யலாமே தவிர define செய்ய இயலாது. 

Methodகளை எழுத முடியாதென்றால் பிறகு அப்படியென்ன நன்மை interfaceஆல் கிடைத்து விடப் போகிறது.  Interfaceஆல் பல நன்மைகள் புரோகிராமருக்கு உள்ளன.  பெரிய ப்ராஜெக்ட்டுகளில் interfaceஐத் தவிர்க்க இயலாது.  Interface இல்லாமலும் புரொகிராம் எழுதலாம்.  Interfaceஐத் தவிர்க்கும் போது என்னென்ன பிரச்சனைகள் வருமெனப் பார்ப்போம்.  பணியில் அமர்வதற்கு முன்னர் interface என்றால் என்ன என என்னிடம் கேட்டிருந்தால், ஜாவாவில் multiple inheritance இல்லை அதற்குபதில் interface பயன்படுத்திக் கொள்ளலாம் எனச் சொல்லியிருப்பேன்.  இதில் கொஞ்சம் உண்மையிருக்கிறதே தவிர interfaceன் பயன்பாடே வேறு.

Interface ஒரு class இப்படித்தான் இருக்க வேண்டுமெனச் சொல்கிறது.  எந்தெந்த classசெல்லாம் interfaceஐ implement செய்கிறதோ அவை interfaceல் உள்ள methodகளுக்கு விளக்கமளிக்க வேண்டும்.  ஒரு class ஒன்று அல்லது ஒன்றுக்கு மேற்பட்ட interfaceகளை implement செய்கிறதென்றால், அந்த class தனக்கு அறிவுறுத்தப்பட்ட interfaceசுடன் பொருந்திச் செல்கிறதெனச் சொல்லலாம்.  அதிகப்படியான குழப்பங்கள் விளைவிப்பதன் காரணமாக ஜாவா multiple inheritanceஐ ஆதரவளிப்பதில்லை.  ஜாவாவில் எழுதப்படும் எந்தவொரு classக்கும் அதிகப்படியாக ஒரு classன் பண்புகளை மட்டுமே inherit செய்ய முடியும்.  ஒரு classல் உள்ள பண்புகள் பல classகளுக்குத் தேவைப்படுகிறதென்றால் interface அதற்கு துணை புரியும்.


Animal என்றொரு class உள்ளதென வைத்துக்கொள்வோம்.
class Animal{
         int no_of_legs;
         void run() {
         }
}
நீங்கள் Dog என்றொரு class எழுதப் போகிறீர்கள், அதில் run() method வேண்டுமென நினைக்கிறீர்கள்.  run() மெத்தட் புதிதாக எழுதுவதற்கு பதில் ஏற்கனவே Animal.classல் எழுதப்பட்டிருக்கும் run() மெத்தடை பயன்படுத்திக் கொள்ளலாம். class Dog extends Animal {} என எழுதுவோம்.  இதுவே Animal என்பதை classசாக இல்லாமல் இடைமுகப்பாக வைத்திருந்தோமென்றால்
interface Animal {
           int no_of_legs; 
           void run();
}
என இருக்கும்.  Interfaceஐ extend செய்வதற்கு பதில் implement செய்ய வேண்டும். class Dog implements Animal. இங்கு Animal என்பது interface.

ஒரு classக்கு ஆப்ஜெக்ட் உருவாக்குவது போல் interfacக்கு ஆப்ஜெக்ட் உருவாக்க முடியாது.
class Animal.... 
Animal animal = new Animal();

இதுவே interface Animalலாக இருந்தால்
Animal animal = new Animal() என எழுத முடியாது.  Interfaceசை வைத்துக் கொண்டு object reference உருவாக்கலாம்.  பின்னர் அந்த interfaceஐ implement செய்திருக்கும் எந்தவொரு classக்கும் புது ஆப்ஜெக்ட் உருவாக்கி assign செய்து கொள்ளலாம்.
Animal animal = new Dog();  Dog class Animal interfacசை implement செய்திருக்காவிட்டால் இது சாத்தியமில்லை.

அடுத்த பதிவில் interface குறித்து மேலும் விரிவாகப் பார்ப்போம்.

-தொடரும்

நவம்பர் 07, 2010

ஜாவா தொடர் - Strings அடிப்படைகள்.

Strings புரோகிராமிங்கில் தவிர்க்க முடியாத ஒன்று.  வார்த்தைகள் இல்லையென்றால் மொழி ஏது?  பல வார்த்தைகள் சேர்ந்து சொற்றொடர் அமைகிறது.  இது புரோகிராமிங் சங்கதிக்கும் பொருந்தும்.  ஒரு மொழியில் உரையாடுவதற்கு வார்த்தைகள் எவ்வளவு அவசியம், அதுபோல strings பயனர் இடைமுகப்பு உருவாக்கப் பணியில் மிக முக்கிய பயன்வகிக்கிறது.  Strings என்பது பயனர் இடைமுகப்பில் மட்டும் வருவதல்ல,  இது பல்வேறு இடங்களில் பயன்படும்.  C மொழி படித்தவரிடம் String என்றால் என்ன என்று கேட்டால், array of characters எழுத்துக்களின் கோர்வை என அழகாக பதில் சொல்லிவிடுவார். 

Integer, float, boolean, character இவையெல்லாம் data typeகள் என அழைக்கப்படுகிறது.  எடுத்துக்காட்டிற்கு a, b என இரண்டு variableகள் இருக்கிறதென்று வைத்துக்கொள்வோம்.  இவை  என்ன data type என தெரிந்தால்தான் இவற்றில் என்னென்ன செய்ய முடியும், எவை முடியாது எனக் கூற முடியும்.  Data typeகள் புரொகிராமிங்கின் அரிச்சுவடி ஆகும்.  இதை புரிந்து கொள்வதில் சிக்கல் இருப்பதால்தான் புரோகிராமிங் என்பது சிலருக்கு எட்டாக் கனியாகவும், பலருக்கு கசப்பான அனுபவமாகவும் இருக்கிறது.

சரி ஜாவாவில் stringகளை எவ்வாறு பயன்படுத்துதெனப் பார்ப்போம்.  சி, சி++ போல ஜாவாவிலும் string என்றொரு data type கிடையாது.  Stringகை சுக்கு நூறாய் உடைத்தால், கிடைப்பது எழுத்துக்களாக characters இருக்கும்.  ஜாவாவிலும் Character என ஒரு data type உள்ளது.  மிக முக்கியமாய் ஜாவாவில் அறிந்து கொள்ள வேண்டியது என்னவென்றால் இங்கு strings objectகளாகக் கையாளப் படுகிறது.  ஆப்ஜெக்ட் என்று ஒன்று இருந்தால், அதற்கு வடிவம் கொடுக்க class ஒன்று இருக்கும்.   Classஐ இடியாப்ப உரலாகவோ, முறுக்கு உரலாகவோ கற்பனை செய்து கொள்ளுங்கள்.  நமக்கு தேவையான பொருள்  இப்படித்தான் வரவேண்டும் என ஒரு கருவியை வடிவமைத்து வைத்திருக்கிறோம்.  அதை வைத்துக் கொண்டு வேண்டிய அளவு இடியாப்பத்தையோ, முறுக்கையோ புழிந்து கொள்கிறோம்.  இதையேத்தான் classகளும் செய்கிறன.  ஒரு ஆப்ஜெக்ட் எப்படி இருக்க வேண்டும் எனும் வரையறைகளை அதன் class சொல்கிறது.  அந்த class மூலமாக அதன் வகையறாக்களான எத்தனை ஆப்ஜெக்டுகளை வேண்டுமானாலும் உருவாக்கிக் கொள்ளலாம்.

ஜாவாவில் string என்பது ஆப்ஜெக்டுகள் எனத் தெரிந்து கொண்டோம்.    சரி, ஜாவாவில் stringகளை எவ்வாறு உருவாக்குவது?  இதென்ன கேள்வி, stringக்கான classஐக் கொண்டுதான்.  பின்னர் string ஆப்ஜெக்டை உருவாக்க string class இல்லாமலா?

இந்த classஐ எப்படி எழுதுவது?  அட சரியா போச்சு போங்க, நாம எழுதுனா நம்ம கதை கிழிஞ்சிடாதா!  அந்த சிரமத்த நமக்கு கொடுக்கக் கூடாதுன்னுதான் ஜாவாவ உருவாக்குன மகராசன்களே string ஆப்ஜெக்டுகளை உருவாக்கிக் கொள்வதற்கு String.classஐயும் தந்துவிட்டு போயிருக்காங்க. 

Classகளை ஒழுங்கா அடுக்கி வைக்க packages பயன்படுகிறது.  Packageகளை Implicit packages, explicit packages என இருவகையில் குறிப்பிடலாம்.  Implicit packages என்பது தன்னியல்பாக default வருவது, explicit packages நாமாகவே உருவாக்கிக் கொள்வது.  String என்பது ஜாவாவுடன் தன்னியில்பாகவே வரும் class எனப் பார்த்தோம்.  அது java.lang எனும் packageல் இருக்கிறது.  ஒரு classஐ பயன்படுத்த முதலில் அதை import இறக்குமதி செய்ய வேண்டும். 

java.lang.String name;

import java.lang.*;
String name;
என எழுதுவதற்கு பதில் நேரடியாக String name; என்று எழுதிக் கொள்ளலாம்.  java.lang packageஐ நாம் import செய்யத் தேவையில்லை,  JVMமே அந்த வேலையைப் பார்த்துக் கொள்ளும்.

String name;
name என்றொரு variableஐ உருவாக்குகிறோம், அல்லது ஒரு stringகிற்கு name என்றொரு object referenceஐ (string object) உருவாக்குகிறோம் என்றும் சொல்லலாம்.  Object oriented programmingல் ஒரு ஆப்ஜெக்டுக்கு variable உருவாக்குகிறோம் எனச் சொல்வதைவிட ஒரு ஆப்ஜெட்டுக்கு reference உருவாக்குகிறோம் எனச் சொல்வது மிகப் பொருத்தமாக இருக்கும். 

ஒரு string ஆப்ஜெட்டுக்கு reference உருவாக்கி விட்டோம்.  இதனைப் பயன்படுத்த ஒரு ஆப்ஜெக்டை உருவாக்கி அதன் referenceஐ (மெமரியில் அதன் addressஐக் குறிப்பது) object reference variableல் சுட்ட வேண்டும்.

name = new String("Hello");
name = "Hello";
இதில் எந்த முறையில் வேண்டுமானாலும் நமக்குத் தேவையான stringகளை உருவாக்கிக் கொள்ள முடியும்.  இந்த இரண்டு வழிகள் மட்டுமல்ல,Stringகளை பல வழிகளில் ஜாவாவில் உருவாக்க முடியும்.  String classல் உள்ள overloaded constructors இதனை சாத்தியமாக்குகின்றது.  Constructors குறித்து அடுத்தடுத்த பதிவுகளில் நிதானமாக பார்ப்போம்.

பொதுவாக ஒரு ஆப்ஜெக்டை உருவாக்க 'new' keyword பயன்படுகிறது.  Stringகளை உருவாக்க new குறிச்சொல்லை பயன்படுத்தாமலே, சுருக்கு வழியில் உருவாக்கலாம்.  அந்த சுருக்கு வழி, இரட்டை மேற்கோற் குறிக்குள் எழுதுவது (inside double quotes).  இப்படி சுருக்கு வழியில் stringகளை உருவாக்கும் விதத்தை literal notation எனக் குறிப்போம்.

'a' இப்படி எழுதுவதற்கும், "a" என எழுதுவதற்கும் நிறைய வேறுபாடு இருக்கிறது.  முதலாவது 'a' ஆங்கில எழுத்துக்களில் உள்ள முதல் எழுத்தைக் (character) குறிக்கிறது.  இரண்டாவது, "a" எனும் stringஐக் குறிக்கிறது.  ஜாவாவில் stringகுகள் objectட்டாகக் கையாளப் படுவதால் நமக்கு பல வசதிகள் உள்ளது.  பொதுவாக இதில் நாம் செய்ய நினைக்கும் அத்தனை செயல்களுக்கும், அதை செய்வதற்கு 
உதவியாய் பல்வேறு methodடுகள் நமக்கு வரப்பிரசாதமாய்க் கிடைத்துள்ளன.

Eclipseல் ஒரு stringகையோ, அதனை சுட்டும் referenceஐயோ பயன்படுத்துகையில், ஒரு புள்ளி (period) வைத்ததுமே அதில் என்னென்ன methodகள், என்னென்ன properties இருக்கிறதென்று பட்டியல்லிட்டுவிடும்.  எதையுமே நாம் மனப்பாடம் செய்ய வேண்டியதில்லை.  அந்தந்த methodகளின் பெயரைப் படித்தாலே ஓரளவுக்கு யூகித்து விடலாம்.

Stringல் குறிப்பாக அடிக்கடி பயன்படுத்தும் methodகளை பார்த்து விடுவோம்.
length() என்பது stringகில் ஒரு முக்கியமான method ஆகும்.  "Rajkumar" எனும் stringல் எத்தனை எழுத்துக்கள் இருக்கிறதென்று அறிய "Rajkumar".length() எனக் கொடுத்தால் போதும்.  இங்கு stringஐ நாம் நேரடியாகக் கொடுப்பதால், புரோகிராமை இயக்குவதற்கு முன்பே 8 எழுத்துக்கள் என விடையைச் சொல்லி விடலாம்.  என்ன string வருமென்றே தெரியாது என வைத்துக் கொள்வோம், அந்த இடத்தில் stringதனை சுட்டும் string referenceஐ பயன்படுத்திக் கொள்ளலாம்.
எடு:    String name;
         name = "Rajkumar";
இப்போது நீங்கள் name.length() எனக் கொடுத்தாலும் சரியான விடை வரும்.

அடுத்து வெவ்வேறு stringகளை ஒன்றாய் இணைப்பது (concatenation) எவ்வாறு எனப் பார்ப்போம்.  இதற்கு concat() method பயன்படுகிறது.
    string1.concat(string2);
    "Raj".concat("kumar") --------------> "Rajkumar"
new குறிச்சொல் பயன்படுத்தாமலேயே " " மேற்கோள் குறிகளைக் கொண்டு சுருக்கு வழியில் எவ்வாறு stringகளை உருவாக்குவது எனப் பார்த்தோம்.  அதுபோல concat() methodஐ பயன்படுத்தாமலேயே + கூட்டல் குறியைக் கொண்டும் வெவ்வேறு stringகளை இணைத்துக் கொள்ளலாம்.

"tamil".concat("cpu") என எழுதுவதற்கு பதிலாக "tamil" + "cpu" என எழுதிக் கொள்ளலாம்.  இவை இரண்டும் ஒரே வெளியீட்டைத்தான் தரும்.

ஜாவாவில் console (console என்றால் திரை. நமது கணினியில் கட்டளைகளை இயக்கும் command prompt/terminal என வைத்துக் கொள்ளுங்கள்) புரோகிராமில் நாம் சொல்ல நினைக்கும் வரிகளை System.out.printlnல் எழுதுவோம்.  அதைக் கொண்டு சில எடுத்துக்காட்டுகளைக் காண்போம்.

String name = "Rajkumar";
System.out.println("name"); என எழுதினால் "name" என்பதுதான் வெளியீடாகக் (output) கிடைக்கும்.  இரட்டை மேற்கோள் குறியில் எதை எழுதினாலும் அது string என அர்த்தம் கொள்ளப் படும்.  System.out.println(name) என்பது நமக்கு வேண்டிய வெளியீட்டைத் தரும்.

String firstName = "Rajkumar";
String lastName = "Ravi";
String fullName = firstName + lastName;

System.out.println(fullName);
System.out.println(firstName + lastName);

இரண்டும் ஒரே வெளியீட்டைத்தான் தரும்.  RajkumarRavi என எழுதுவதற்கு இரண்டு பெயர்களுக்கும் ஒரு இடைவெளி விட்டு Rajkumar   Ravi என எழுதினால் நன்றாக இருக்குமல்லவா.  இந்த இரண்டு பெயர்களுக்கும் இடையே "  " இப்படி சொருகி விடுங்கள்.

System.out.println(firstName + "  " + lastName);
System.out.println("Normal:  " + firstName);
System.out.println("Capital letters:  " + firstName.toUpperCase() ); இதற்கு விளக்கம் தேவையில்லையென நினைக்கிறேன்.

ஜாவாவில் stringஸ்களை கையாளும்போது நாம் அடிக்கடி செய்யும் தவறு, இரண்டு stringகளை == operator மூலம் ஒன்றாக உள்ளனவா எனப் (compare) பார்ப்பது.

String name1 = "Raghu";
String name2 = "Raghu123".subString(0,5);



if ( name1 == name2)
    System.out.println("name1 and name2 are equal");
else
    System.out.println("name1 and name2 are different");

இதற்கு விடையை நாம் யூகித்தால் name1 and name2 are equal என வருமென அடித்துச் சொல்வோம்.  ஆனால் அதுதான் இல்லை.  இரண்டும் ஒன்றில்லையா, ஆம் இரண்டும் ஒன்றில்லை name1றும் name2வும் வெவ்வேறு "Raghu" எனும் stringகளைக் குறிக்கிறது.

சரி இப்படி எடுத்துக் கொள்ளுங்கள்.
int a = 5;
int b = 5;
if (a == b)
   System.out.println("a is equal to b.");
else
   System.out.println("No, first 5 is different from second 5");

இதற்கு விடை a is equal to b என வரும்.  பொதுவாக ஜாவாவில் எல்லாமே ஆப்ஜெக்டுகளாகத்தான் கையாளப் படுகிறது, data typeற்கு மட்டும் இது விதிவிலக்கானது.  வேகமான இயக்கத்திற்காக அடிப்படை data typeகள் C மொழியில் உள்ளது போலவே நேரடியாகக் கையாளப்படுகிது.  ஆனால் stringகுகள் data type பிரிவில் வராது என்பதை மீண்டும் நினைவில் நிறுத்திக் கொள்க.

நீங்கள் உருவாக்கும் ஒவ்வொரு stringகும் தனித்தனி string ஆப்ஜெக்ட்டுகளாகும்.  ஆப்ஜெக்டுகளை compare செய்ய equals() method பயன்படுகிறது.  இது அனைத்து ஆப்ஜெக்டுகளுக்கும் பொருந்தும்.  ஜாவா தெரியும் என நம் சுயவிவரக் குறிப்பில் (resume) நாம் எழுதியிருந்தால் நம்மிடம் முதலில் வைக்கப் படும் கேள்வி what is the root class of java?  ஜாவாவின் ஆணிவேரான மூல class எது என்பதாக இருக்கும்.  ஜாவாவில் எல்லாமே ஆப்ஜெக்ட்டுகள் என்றால் அந்த class Object.classஆக இல்லாமல் வேறெந்த classஆக இருக்கும்.  Object classல் இருக்கும் அனைத்து public methodகளையும் எந்தவொரு ஆப்ஜெக்ட்டாக இருந்தாலும் அதில் பயன்படுத்திக் கொள்ளலாம்.  இதுதான் inheritanceன் மகிமை.

சாதாரணமாக class MyClass { .. என்று எழுதுவோம். 
ஒரு classஐ inherit செய்ய class MyClass extends AnotherClass {... என எழுதுவோம்.  இப்போது AnotherClassல் இருக்கும் அனைத்து public methodகளையும் MyClassல் பயன்படுத்திக் கொள்ளலாம்.

AnotherClassல் இருக்கும் methodகளுக்கு நாம் எழுதும் MyClassல் புது விளக்கம் கொடுத்தால் அதுதான் overriding.  ஜாவாவில் உள்ள அனைத்து ஆப்ஜெக்ட்டுகளும் தன்னியல்பாகவே Object classசினை extend செய்திருப்பதால், Object classல் உள்ள மெத்தட்களை அப்படியேவும் பயன்படுத்தலாம் overridingகும் செய்து கொள்ளலாம்.  Object classல் ஏகப்பட்ட methodகள் இருந்தாலும் நான் பயன்படுத்திப் பார்த்தது toString() மற்றும் equals().

சரி ஒரு வழியாக stringகிற்கு திரும்புவோம்.  ஜாவாவில் strings ஆப்ஜெக்ட் என்பதால் Object classன் அங்கமான equals(), toString() methodகளை இயல்பாகவே பயன்படுத்திக் கொள்ளலாம்.  இரண்டு stringகள் ஒன்றாக இருக்கின்றனவா என சோதிக்க == ஆபரேட்டருக்கு பதிலாக equals() மெத்தடை பயன்படுத்தவும்.

if ( name1.equals(name2)).... எனக் கொடுக்க வேண்டும்.   பிறகு == ஆப்பரேட்டரை பயன்படுத்தும் போது ஏன் பிழை காட்டவில்லை.  equals() மெத்தட் ஆப்ஜெட்டுகளின் உள்ளடக்கம் (contents) ஒன்றாக இருக்கின்றனவா என பரிசோதிக்க.  == ஆபரேட்டர் இரண்டும் ஒரே ஆப்ஜெக்ட்டைத்தான் குறிக்கின்றனவா (same reference) என சோதிக்க.

String name1 = "Raj"
String name2 = name1; // name1ன் reference name2விற்கும் காப்பி செய்யப் படுகிறது.
if (name1 == name2)------> என்றால் சரிதான் என விடை வரும்.

ஜாவா புத்தகத்தில் படித்திருக்கிறீர்களா (திறந்தாவது பார்த்ததுண்டா, என்ன இல்லையா! அட நம்ம ஜாதிதான்.. :) Strings are immutable என்றொரு வாக்கியம் இருக்கும்.  இல்லையென்றால் நீங்கள் படிப்பது ஜாவா புத்தகம்தானா என்பதை உறுதி செய்து கொள்ளவும்.  இதில் என்ன சொல்ல வருகிறார்கள்.  ஆங்கிலத்தில் mutable என்றால் மாற்றக் கூடியது, மாறும் தன்மை கொண்டது எனப் பொருள்.  Immutable என்பது mutableக்கு எதிர்ப் பதம்.

அதாவது ஜாவாவில் ஒரு stringகை உருவாக்கிய பின்னர் அதில் மாற்றம் செய்ய முடியாது.
இதென்ன புதுக்கதை?

String name = "Raghu"; 
name = "Raj";  "Raghu" எனும் stringகைத்தான் "Raj" எனும் stringகால் overlap செய்து விட்டோமே, பிறகு stringசை immutable எனச் சொல்வது நியாயம்தானா? இல்லை இல்லை "Raj" என்ற புது stringகை உருவாக்குகிறோமே தவிர "Raghu" என்ற stringகை திருத்தி எழுதவில்லை.  name என்பது string ஆப்ஜெக்ட் அல்ல, அது உண்மையான stringகளைக் குறிக்கும் வெறும் referenceதான்.  Referenceகளை மாற்ற முடியுமே தவிர, stringகுகளையல்ல.  தேவையில்லாமல் ஆயிரக்கணகான stringகள் இருந்தால் சிஸ்டமே ஸ்தம்பித்து விடும் என்பதை நினைவில் கொள்க.  மாறும் வகைகொண்ட stringகளை உருவாக்க StringBuffer class பயன்படுகிறது.  அதைக்குறித்து எழுதி பழிபாவங்களுக்கு ஆளாக விரும்பவில்லை, மேலதிக விவரம் வேண்டுவோர் புத்தகத்தில் படித்து தெரிந்து கொள்ளவும்.

இக்கட்டுரையில் தேவையில்லாக் கதைகள் நிறைய இருக்கின்றது எனக் கருதினால் மன்னிக்கவும், இது ஜாவா ஓரளவுக்கு தெரிந்தவர்களுக்கான தொடரல்ல என்பதை தாழ்மையுடன் தெரிவித்துக் கொள்கிறேன்.  புரோகிராம் எழுதுவதை மலையை பெயர்க்கும் வேலையாக நினைக்கும்
அப்பாவிகளுக்காக எனக்கு புரிந்த வரையில் பகிர்ந்து கொள்கிறேன்.  ஜாவா கற்பது கடினமானது, ஆனால் கற்றே தீர வேண்டும் என நினைப்பவர்களுக்கு இத்தொடரினை அறிமுகப் படுத்துங்கள்.  எனக்கும் மனநிறைவு கிட்டும். நன்றி.
charAt(), subString(), trim()... போன்றவற்றை நீங்களாகவே படித்து பயன்படுத்திப் பாருங்கள்.

சுருக்கமாக நச்சென்று ஜாவா strings பற்றி சொல்ல வேண்டுமானால்
java strings are objects   &
java strings are immutable.

                                                                              -- தொடரும்.

அக்டோபர் 29, 2010

ஜாவா எளிமையாய் கற்க ஒரு இலவச PDF மின்-புத்தகம்

வலையுலக அன்பு நெஞ்சங்களே, ஜாவா நிரலாக்கம் குறித்து தொடர்கட்டுரை எழுதப்போவதாக அறிவித்துவிட்டு கொஞ்சம் கொஞ்சமாக நழுவிச் சென்றவன் எளிய வழியில் ஜாவா கற்றுக்கொள்ள நல்லதொரு மின்புத்தகத்தைக் கண்டு கொண்டேன்.  உடனே பகிர்ந்துகொள்ள வேண்டுமெனத் தோன்றியது, செய்துவிட்டேன்.   அந்த புத்தகத்தைத் தமிழ்படுத்துவதில் எனக்கு விருப்பமில்லை. எளிமையான ஆங்கிலத்தில்தான் உள்ளது, மெல்ல மெல்ல படித்துப் பயன்பெறவும். அவ்வப்போது நான் கற்றுக் கொண்டதையும் பகிர்ந்து கொள்கிறேன்.


- ஜாவா பயணம் தொடரும்

அக்டோபர் 20, 2010

எக்லிப்ஸ் - ஆண்ட்ராய்ட் - XML பிழை செய்தி

எக்லிப்ஸ் புதிய பதிப்பில் ஆண்ட்ராய்ட் xml கோப்புகளில் பணியாற்றும்போது அடிக்கடி ஒரு பிழைசெய்தி வந்து எரிச்சலூட்டும்.





முதல்முறை இந்த பிழை செய்தியை பார்த்தபோது நிறுவதலில் ஏதேனும் குறை நேர்ந்துவிட்டதோ என நினைத்தேன். 

இணையத்தில் தேடிய போது இது எக்லிப்ஸ் ஹீலியோஸில் பணியாற்றும் அனைவருக்கும் வரும் பிரச்சனைதான் எனக் கண்டுகொண்டேன்.

இதை களைவதற்கு இணையத்தில் கண்டறிந்த இரண்டு தீர்வுகள்
  1. xml கோப்பை(file) வலது க்ளிக் செய்து Open with Android XML editor என்பதை தேர்வு செய்ய வேண்டும்.
  2. மற்றொன்று xml root tagல் namespace attribute கொடுப்பது
           xmlns:android="http://schemas.android.com/apk/res/android" >
 

இரண்டாவது வழி எனக்கு நன்றாக வேலை செய்தது.

சும்மாயில்லாமல் துறுதுறுவென அனைத்தையும் க்ளிக்கிப் பார்க்கும் என் வழக்கத்தால் எனக்கு ஒரு தீர்வு கிடைத்தது.

XML கோப்பை (strings.xml) Resources tabல் திறந்து கொள்ளவும்.  மேல் வலது மூளையில் இருக்கும் ஐகானை சொடுக்குங்கள்.  பிரச்சனை தீர்ந்து விட்டது, இனி எந்தத் தொல்லையுமில்லாமல் xmlல் எடிட் செய்யலாம்.








இந்த பதிவின் ஆங்கிலப் பதிப்பைக் காண
http://androidorigin.blogspot.com/2010/10/simple-solution-to-get-rid-off-null.html

அக்டோபர் 16, 2010

MySQL Database எளிமையாகக் கையாள MySQL Query Browser

MySQL என்பது ஒரு database (தரவுதளம்) ஆகும்.  Databaseல் நமக்குத் தேவையான தகவல்களை வைத்துக் கொண்டு வேண்டிய நேரத்தில் அதை அணுகிப் பெற்றுக் கொள்ளலாம்.  உங்கள் வீட்டு மின்சார கட்டணத்தையோ, தொலைபேசி கட்டணத்தையோ செலுத்த செல்கிறீர்கள். அங்கு computerல் (கணினி) உங்கள் கட்டண billல் உள்ள எண்ணை உள்ளீடு செய்வதைப் பார்த்திருக்கிறீர்களா? அது அவர்களுடைய databaseல் பதிவாகிறது.  FMல் (பன்பலை) கேட்டவுடன் பாட்டு போடுவது, சமையல் எரிவாயு வேண்டி தொலைபேசியில் பதிய உங்கள் எண்ணை சொன்ன உடனேயே உங்கள் பெயரைச் சொல்லி வியப்படையச் செய்வது அத்துனையும் அதிவேகமாகத் தகவல்களைத் தரும் databaseஆல்தான்.  கல்லூரி பாடத்திட்டத்திலும் இது ஒரு தவிர்க்க முடியாத, கட்டாயம் கற்க வேண்டிய பாடமாகும்.

நிறைய கல்லூரிகளில் அதிகளவில் தகுந்த உரிமமில்லாமல் ஆயிரக்கணக்கான விலையுடைய காப்புரிமை மென்பொருட்களை பயன்படுத்துகின்றனர்.  DBMS Database Managaement System பாடத்தில் செய்முறைப் பயிற்சியும் (practical) கட்டாயம் இருக்கும்.  Database என்பது ஒரு பொதுவான பாடத்திட்டம்.  Databaseல் உள்ள தகவல்களை கேட்டுப் பெறுவதற்கு ஒரு மொழி உண்டு.  அதுதான் SQL Structured Query Language.  SQL வழியாகத்தான் அனைத்து தகவல்களையும் உள்ளீடு செய்வதிலிருந்து, அதை பராமரிப்பது, மேம்படுத்துவது, தகவல்களை கேட்டுப் பெறுவது என அனைத்து வேலைகளையும் செய்கிறோம்.  இதன் சாராம்சம் பெரும்பாலும் அனைத்து databaseகளிலும் ஒரே மாதிரித்தான் இருக்கும்.  அப்படி இருக்கையில் ஏன் ஒரு குறிப்பிட்ட மென்பொருளை மட்டும் பயன்படுத்த வேண்டும். எடுத்துக்காட்டிற்கு Oracle database இல்லாத கல்லூரியையோ, பல்கலைக்கழகத்தையோ காண்பது அரிது.  Oracleலிலும் இலவசப் பதிப்பு இருக்கிறது, நாம் அதையா பயன்படுத்துகிறோம்.  நாம் பயன்படுதுவதெல்லாம் தொன்றுதொட்டு பயன்படுத்திவரும் Oracle Personal edition 7 தானே. இது இலவச பதிப்பு இல்லை. உங்களுக்கு ஆரக்கிள்தான் பயன்படுத்த வேண்டுமென்றால் Oracale Xpress Edition பயன்படுத்தவும். இது விண்டோஸ் OSற்கு (இயங்குதளம்) மட்டுமல்லாமல் லினக்சுக்கும் கிடைக்கும்.

மாணவர்களின் பயிற்சிக்கு ஆரக்கிள்தான் பயன்படுத்த வேண்டும் என்பதில்லை.  Open Source (திறமூல மென்பொருள்) databaseகளையும் பயன்படுத்தலாம்.  இவற்றில் முக்கியமான இரண்டு databaseகள் MySQLலும், Postgree SQLலும்.  MySQL தற்போது ஆரக்கிள் வசம் இருக்கிறது.  Postgree SQL முழுக்க முழுக்க சுதந்திரமாகப் பயன்படுத்தலாம்.  MySQL ஏற்கனவே அதிகளவில் பயன்பாட்டுக்கு வந்ததால் அதனை எளிமையாக நிர்வகிக்க பல தரமான applications (மென்கலம்) உள்ளன.



Project செய்யும் மாணவர்களிடம் அடிக்கடிக் கேட்கப் படும் கேள்வி என்ன Frontend? எந்த Backend? பயன்படுத்துகிறாய் என்பதுதான்.  Frontend என்பது தகவல்களை சாதாரண பயனாளார் எளிமையாக (user friendly) உள்ளீடு செய்வதற்காக வடிவமைப்பது.  Backend என்பது பின்புலத்தில் என்ன database பயன்படுத்துகிறோம் என்பதைக் குறிக்கிறது.  அதுசரி projectற்கு frontend வடிவமைப்பது இருக்கட்டும்.  பின்புல databaseஐ வடிவமைப்பதற்கு நமக்கொரு frontend இருந்தால் எப்படியிருக்கும். Databaseல் தகவல்கள் Tableகளில் சேமிக்கப் படுகிறது.  இந்த tableகளை வடிவமைப்பதே போதும் போதுமென்றாகி விடும். இந்த வடிவமைப்புகளை எளிமைப் படுத்த தற்போது வரும் அனைத்து databaseகளிலும் (MS Access, MySQL, Microsoft SQLServer, Oracle, SQLite...) tableகளை எளிமையாக வடிமைக்கவும், அதில் எளிதாக தகவல்களை உள்ளீடு செய்யவும், நமக்கு வேண்டிய SQL queryகளை வடிவமைக்கவும் ஏகப்பட்ட வசதிகள் இருக்கின்றது.


எடுத்துக்காட்டிற்கு MySQL databaseக்கு உள்ள ஒரு visual toolஐ காண்போம்.  MySQL பயன்படுத்தும் அனைவரும் கட்டாயம் MySQL Query Browserஐயும் பயன்படுத்துங்கள். எழுத்தில் தரும் விளக்கதைவிட ஒரு படம் எளிதாகச் சொல்ல வேண்டியதை சொல்லிவிடும் என நினைக்கிறேன். கீழ்காணும் MySQL Query Browser படங்களைக் காணுங்கள். நீங்கள் விண்டோசிலோ, லினக்சிலோ இந்த tool பயன்படுத்தாமல் MySQLஐ command promptட்டிலும், terminalலிலும் பயன்படுத்துவராக இருந்தால் உடனே உங்களிடம் அவசியம் இருக்க வேண்டிய இந்த மென்பொருளை install செய்து கொள்ளுங்கள்







அக்டோபர் 09, 2010

சமீபமாக தொடராத ஒரு ஜாவா தொடர்

ஜாவாவில் எனக்குப் புரிந்ததை பகிர்ந்து கொள்கிறேன்.  சில விஷயங்களை நான் தவறாகவும் புரிந்து கொண்டிருக்கலாம் எனவே புத்தங்களில் மேலும் படித்து நன்கு தெரிந்து கொள்ளவும்.

ஜாவா புரோகிராமிங் மொழியில் classes இன்றியமையாதது.  ஒவ்வொரு ஜாவா புரோகிராமிலும் ஒரு classஆவது இருக்கும்.  நிறைய classகளை ஒரே ஜாவா fileலிலும் (.java) அடைக்கலாம் அல்லது வெவ்வேறு ஜாவா fileகளிலும் வைத்துக் கொள்ளலாம்.

நினைவில் வைத்துக் கொள்ளுங்கள்
  • ஒரு ஜாவா fileல் ஒரே ஒரு public classதான் இருக்கும்.
  • ஜாவா file பெயரும் public classன் பெயரும் ஒன்றாக இருக்க வேண்டும். 
 எடுத்துகாட்டிற்கு உங்கள் public classன் பெயர் HelloWorld என வைத்துக் கொண்டால் கட்டாயம் அதை HelloWorld.java எனத்தான் சேமிக்க வேண்டும்.  Elcipse IDE மூலம் ஜாவா புரோகிராமிங் செய்பவர்களுக்கு இந்த பிரச்சனை இல்லை.

ஜாவா ஒரு Object Oriented புரோகிராமிங் மொழி. எனவே எல்லாமே objectடாகத் தான் நடத்தப் படுகிறது.  ஒரு object எதை வேண்டுமானாலும் குறிக்கலாம். ஒரு உயிரனத்தையோ (Person, Animal, Parrot..), உயிரற்ற பொருளையோ (Car, Chair..) ஒரு கருத்தையோ (Account, Insurance...) என எதை வேண்டுமானாலும் குறிக்கலாம்.  ஒவ்வொரு objectடிற்கும் அதற்கே உரிய பண்புகள் (properties) இருக்கும், அவை புரியும் செயல்கள் (methods) இருக்கும்.  அவற்றை எப்படி பயன்படுத்த வேண்டும் என்பதைத்தான் நன்கு தெரிந்து கொள்ள வேண்டும்.  அதாவாது அவை பொதுவான பண்புகளா, அல்லது ஒவ்வொரு objectடிற்கும் உரிய தனித்தன்மையான் பண்புகளா என்பதையெல்லாம் பார்க்க வேண்டும்.  எடுத்துகாட்டிற்கு வங்கி கணக்குக்கான புரோகிராமை எடுத்துக்கொள்ளுங்கள்.  ஒவ்வொரு வாடிக்கையாளருக்கும் ஒரு கணக்கு இருக்கும்.  இதை புரோகிராமிங் மொழியில் புரிந்து கொள்ள ஒவ்வொரு Customer objectடிற்கும் ஒரு account இருக்கும்.  இந்த Accountம் ஒரு objectதான்.  இதை புரோகிராமிங் சொல்லில் Associativity என்கிறார்கள். Associativity என்பது ஒன்றோடு ஒன்றிருக்கும் தொடர்பினைக் குறிக்கிறது.  ஒரு வாடிக்கையாளருக்கு ஒரு கணக்கு. (one Customer associated with one account).

ஒரு வாடிக்கையாளரின் கணக்கை வேறொருவர் அணுகக் கூடாது.  இந்த பாதுகாப்பு முறைகளுக்கு புரோகிராமிங்கில் செயல் வடிவம் கொடுக்கத்தான் Access specifiers உள்ளன.  Acsess specifiers என்பது ஒன்றை அணுகுவதற்கு உள்ள குறிசொற்கள்.  public, protected, private என்பவை access specifierகளே.  default என்றொரு access specifier உள்ளது.  நீங்கள் எந்தவொரு அணுகுமுறைக்கான குறிச்சொற்களையும் தரவில்லை என்றால் அவை தன்னியல்பாக default access என எடுத்துக் கொள்ளப்படும்.

சென்ற மாதம் முழுவதும் projectல் மும்முரமாக இருந்தால் பதிவுகளை வெளியிட முடியவில்லை.  மற்ற பணிகளை முடிக்கவே நேரம் போதாததால் பதிவெழுதுவது கிடப்பில் போடப்பட்டது. ஜாவாவில் எனக்கு அவ்வளவு பரிட்சயம் இல்லை என்பதுதான் உண்மை. (அடப்பாவி!..:)

கீழ்வருவது இந்த ஜாவா தொடருக்காக எழுதிய ஒரு குட்டி புரோகிராம்.  பதினைந்து நாட்களுக்கு முன்னரே எழுதியது. இருக்கும் வேலைப் பளுவில் மறந்தே விட்டேன்.  விளக்கம் அடுத்தடுத்த பதிவுகளில் வரும். comment வரிகளைப் படித்து புரிந்து கொள்ளவும்.

முன்குறிப்பு:  
கீழ்வரும் கோடிங்கை அப்படியே காப்பி செய்யாதீர்கள்.  மேல் வலது மூலையில் இருக்கும் ஐகானை சொடுக்கவும்.





/** @author Rajkumar Ravi
    source: tamilcpu.blogspot.com
*/
//this program will not compile since this is having errors(intentional)
//only one public class permitted in a java file
public class Test { 
 public static void main(String[] args) {
  //create an object instance for non-static class to access its members
  System.out.println(new Test2().i);
  
  Test2 testObj;    //testObj is just an object reference for Test2 class
  testObj = new Test2();  //creating actual object/instance for target class  
  int y = testObj.i + 5;
  
  //members of a static class can be accessed without creating an instance for it
  System.out.println(Test4.name); 
  
  //private members cannot be accessed outside its declared class
  System.out.println(new Test2().ch);
 }  
}
//this is a non-static class so members of this class can only accessed through its instance
class Test2 {      
  int i=5; private char ch='u'; 
}
//to write a static class declare static variables or static methods inside a class
static class Test3 { } // wrong

//this is a static class because it contains a static member
class Test4 {
 static String name;
}
உங்களுக்கு தவறு எனப்பட்டதை கண்டிப்பாக சுட்டிக்காட்ட வேண்டும். எவருக்கேனும் தவறான தகவல் சென்றடைந்தால் இந்த பதிவுகளின் நோக்கமே தவறிவிடுமென ஐயப்படுகிறேன். 

முப்பது நண்பர்களிடம் எடுத்தக் கருத்துக் கணிப்பில் 27 நபர்கள் தமிழில் படிப்பது மண்டை காய்கிறது என முடிவு சொல்லியிருக்கிறார்கள்.  கணித்தமிழின் முயற்சியில் இவன் (ராஜ்குமார்) தோல்வியடைந்ததை ஒப்புக் கொள்கிறேன். இனி கணினித்துறை வார்த்தைகள் அனைத்தும் இந்த வலைப்பதிவில் ஆங்கிலத்திலேயே குறிக்கப்படும்.  

மேலும் ஒரு தகவல் நான் j2eeயிலிருந்து Android Mobile application developmentட்டிற்கு மாறி விட்டேன். இனி என் பணி முழுவதும் Androidல்தான் இருக்கும், ஜாவா தொடரினை அது பாதிக்காது என்பதையும் தெரிவித்துக் கொள்கிறேன்.  Androidல் எழுதிப் பார்த்த குட்டி குட்டி புரொகிராம்களை http://androidorigin.blogspot.com ல் நண்பனுடன் சேர்ந்து ஆங்கிலத்தில் எழுதப் போகிறேன்.  தேவையிருப்பின் அதன் தமிழ் மொழியாக்கங்களை இங்கு பதிவிட்டுக் கொள்வோம். 

கணினி கலைச்சொற்களை தமிழில் பயன்படுத்துவதுதான் சிரமமாக இருக்கிறது, முடிந்தளவு மற்ற சொற்றொடர்களையாவது தமிழில் அமைக்க முயற்சிப்போம்.   நானும் முயற்சிக்கிறேன்.

-தொடரும்.

செப்டம்பர் 18, 2010

மென்பொருள் விடுதலை நாள்

மென்பொருள் விடுதலை நாள்
Software Freedom Day 2010

நாள்:   18-09-2010 சனிக்கிழமை
இடம்: பிர்லா கோளரங்கம், கோட்டூர்புரம், சென்னை.

நண்பர்கள் அனைவருக்கும் வணக்கம்,

         இன்று உலகெங்கும் உள்ள கணிப்பொறி/மென்பொருள் ஆர்வலர்கள் பெருமிதத்துடன் கொண்டாட வேண்டிய நாள்.  ஒரு மென்பொருளை பயன்படுத்துவதற்கு எந்தவொரு குற்ற உணர்வுமில்லாமல் நம் விருப்படி பயன்படுத்த உரிமையளிக்கும் கட்டற்ற திறமூல கொள்கையைக் கொண்டாட ஒரு விழா.  இதனை உலகெங்கிலும் கொண்டாட பல்வேறு அமைப்புகள், நிறுவனங்கள்.. ஏற்பாடு செய்திருக்கின்றன.  நம் சிங்கார சென்னையில் சென்னை லினக்ஸ் பயனர் குழு இவ்விழாவினைக் கொண்டாட ஏற்பாடு செய்திருக்கிறார்கள்.  கலந்து கொள்ள முடிபவர்கள் கலந்து கொண்டு பயனடையளாமே.

சென்னையில் விழா சிறப்பாக அமைய வாழ்த்துகள்.  விழா ஒருங்கிணைப்பாளர்கள் அனைவருக்கும் இதயம் கனிந்த நன்றியைத் தெரிவித்துக் கொள்கிறேன்.

ஓப்பன் சோர்ஸ் - விளக்கம்: புதியவர்களுக்காக ஒரு புதிய கோணத்தில்



இவன்,
ந.ர.செ. ராஜ்குமார்
http://tamilcpu.blogspot.com

செப்டம்பர் 12, 2010

ஜாவா புரோகிராம் அடிப்படைகள் - ஜாவா தொடர்

இந்த பதிவிலிருந்து ஜாவாவில் நிரலெழுத ஆரம்பித்து விடுவோம்.   இதுவரை ஜே.ஆர்.இ, ஜே.வி.எம் குறித்து சில அடிப்படைகளைத் தெரிந்து கொண்டோம்.

சி, சி++ நிரல் மொழியைப் போலவே ஜாவாவிலும் main() செயல்கூறிலிருந்து (செயல்கூறு - function) இயங்க ஆரம்பிக்கும்.  எனினும் ஜாவா மொழி சில இடங்களில் வேறு படுகிறது.  ஜாவா மொழி மூலம் தனிமேசைப் பயன்பாடுகள் (desktop applications), இணையப் பயன்பாடுகள் (web applications), செல்லிடப் பயன்பாடுகள் (mobile applications) என அனைத்துவகையான தேவைகளுக்கும் மென்பொருட்களை உருவாக்க முடியும்.

ஜாவா தொலைக்காட்சியிலிருந்து செயற்கைகோள் வரை எல்லா இடத்திலும் இயங்கும்.  காரணம் ஜாவா உருவாக்கத்தின் நோக்கமே இதற்காகத்தான்.  ஜாவாவை உருவாக்கிய சன் மைக்ரோசிஸ்டமஸ் மின்னனு சாதனங்களுக்கான மென்பொருள் தீர்வுகளை வழங்கி வந்தது.  வெவ்வேறு வன்பொருள் கட்டமைப்புகளில் ஒரேமாதிரி இயங்கக் கூடிய தேடலில்தான் ஜாவா மலர்ந்தது.  ஒவ்வொரு வகை மையச் செயலிக்கும் (microprocessor) வெவ்வேறு ஆணை அமைவுகள் (instruction set) இருக்கும். வெவ்வேறு கட்டமைப்புகளில் இயங்குவதற்கு நிரல்களை ஒவ்வொரு முறையும் மாற்றிக் கொண்டிருப்பதற்கு பதிலாக ஒரே முறை எழுதிவிட்டு ஜாவா மெய்நிகர் கணினியில் (java virtual machine) இயக்கிக் கொள்ளலாம்.  சென்ற பதிவிலேயே பார்த்துவிட்ட இந்தத் தகவலை ஏன் மறுபடியும் பார்க்க வேண்டும்?   இதுதான் ஜாவாவின் அடிப்படை. முற்றிலும் புதிதாக கற்றுக் கொள்பவர்களுக்காக மீண்டும் மீண்டும் வலியுறுத்தப் படுகிறது.

உங்களுக்கு ஏற்கனவே சி,சி++ போன்ற மொழியில் பரிட்சயம் இருந்தால் ஜாவா கற்றுக் கொள்வது இன்னும் எளிது. for,while,if,int.. என அங்கொன்றும் இங்கொன்றுமாக படித்து வைத்ததை ஜாவாவிற்கு பயன்படுத்திக்  கொள்ளலாம்.  சி, சி++ படிக்காமலேயும் ஜாவா படிக்கலாம். இல்லையே நாங்கள் கேள்விபட்டவரை புதிதாய் கற்றுக் கொள்பவருக்கு சி தான் ஏற்றது என உங்களில் சிலர் முரண்டுபிடிப்பதைப் பார்க்கிறேன். நிரலாக்கத்திற்கு முற்றிலும் புதியவருக்கும் ஜாவாவை அறிமுகப் படுத்தலாம்.   ஆனால் உரிய கருவிகளைக் கொண்டு.  எடுத்த எடுப்பிலேயே முழுவீச்சில் எல்லாவற்றையும் கற்றுக் கொள்ள வேண்டும் என்பதல்ல.   தேவையானதை மட்டும் அவரவர் தேவைக்கேற்றாற் போல் அறிமுகப்படுத்தலாம்.  எக்லிப்ஸ் போன்ற நிரலாக்க கருவிகளைக் கொண்டு ஜாவா நிரல் எழுதும்போது அனைத்து ஜாவா நிரலுக்கும் தேவையான பொதுவான வரிகளை அதுவே எழுதிக் கொடுத்துவிடும்.  இடையில் உங்களுக்குத் தேவையான நிரல் வரிகளை சொருக வேண்டியதுதான்.

இங்கு ஜாவா தனிமேசை பயன்பாடுகளுக்கான நிரல் உதவியைக் குறித்துதான் முதலில் காணப் போகிறோம்.  இதற்காக உதவுவது ஜே2.எஸ்.இ (java2 standard edition).  இன்னும் j2ee, j2me, java card.. என நிறைய இருக்கிறது.  இவை அனைத்திலும் இயங்கும் மொழி ஜாவாதான்.  வசதிகள்தான் மாறுபடும்.  எடுத்துகாட்டிற்கு செல்பேசி பயன்பாடுகளுக்கு தனிமேசைக் கணினி செயல்பாடுகளில் இருக்கும் அனைத்து வசதிகளும் தேவைப்படாது.  செல்பேசி பயன்பாட்டிற்கென இருக்கும் java2 micro editionல் என்ன தேவையோ அதுமட்டும் இருக்குமாறு தகவமைக்கப்பட்டிருக்கும்.  நிரல் ஆரம்பிக்கும் மையப் புள்ளி மாறுபடும் அவ்வளவுதான்.  எடுத்துகாட்டிற்கு ஜாவா அப்லெட் (java applets) ஏற்கனவே படித்திருப்பவர்களுக்கு தெரியும்,  அவைகளில் main() செயற்கூறே (function) இருக்காது.  அதற்கு பதிலாக init() இருக்கும். இங்கு நிரலின் ஆரம்பப் புள்ளி ஏன் மாறுகிறது. இதற்கான விடை இந்த ஜாவா நிரல்கள் எங்கு, எதில் இயங்குகிறது என்பதில் இருக்கிறது.  ஆப்லெட்டுகள் உலாவிகளுக்குள்ளே (browsers) இயங்குகின்றன. நீங்கள் எழுதிய நிரல் (ஆப்லெட்) வேறொரு நிரலின் (வலை உலாவி/browser)ன் கட்டுப்பாட்டில் இயங்குகிறது.  தனிமேசை பயன்பாடுகளில் main() செயற்கூறு எழுதக் காரணம் இங்கு கட்டுபாட்டை
நீங்களே ஏற்றுக் கொள்கிறீர்கள்.   அதாவது எங்கிருந்து நிரல் இயங்க வேண்டுமென ஜே.வி.எம் மிற்கு வெளிப்படையாக சொல்ல வேண்டும்.

 ஜாவா மெய்நிகர் கணினிக்கு (JVM) அதை இயக்குவது மட்டும்தான் வேலை. ஆளாளுக்கு ஒரு இடத்தைச் சொன்னால் எவ்வளவு கொளறுபடிகள் வரும்.
அதனால்தான் ஒரு ஜாவா நிரல் இப்படித்தான் இருக்க வேண்டுமென அந்த மொழியை உருவாக்கியவர்கள் வரையறுத்துள்ளனர்.   JVM முதலில் main() செயற்கூறு எங்கேயிருக்கிறது எனத்தான் தேடும்.  அங்கிருந்து நிரல் செயல்பட ஆரம்பிக்கும்.

main() செயற்கூறு இல்லாமல் ஜாவாவில் நிரல் எழுதமுடியுமா?
தாரளமாக முடியும்.   ஜாவா நிரல் கோப்பின் பெயர் (java program's file name), நீங்கள் எழுதியுள்ள publi classன் பெயரோடு ஒத்து இருக்கும்.  நீங்கள் எத்தனை classes எழுதினாலும், அவற்றில் ஏதோ ஒரு classல் main() இருந்தால் போதுமானது.  main() செயற்கூறினுள் (inside main function) மற்ற classற்கான ஆப்ஜெக்ட்களை (பொருள்) உருவாக்க வேண்டும்.  ஒரு ஆப்ஜெக்டை உருவாக்கிய பின் அதிலிருக்கும் மற்ற function, properties அனைத்தையும் பயன்படுத்திக் கொள்ளலாம்.

தாமதமாக வெளியிடுவதற்கு வருந்துகிறேன். காக்க வைத்ததற்கு மன்னிக்கவும்.  பணி பளு காரணமாக தொடர்ச்சியாக சீரான இடைவெளியில் வெளியிட முடியவில்லை.  எந்த சூழ்நிலையிலும் மாதத்திற்கு இருமுறையாவது தொடர் பதிவுகள் வரும் என்பதைத் தெரிவித்துக் கொள்கிறேன்.  நண்பர்களின் வேண்டுகொளுக்கிணங்க இனிமேல் ஜாவா மொழிக் கூறுகள் ஆங்கில வார்த்தையாகவே கையாளப்படும் என்பதைத் தெரிவித்துக் கொள்கிறேன்.  ஊக்கப் படுத்திய அனைத்து நண்பர்களுக்கும் நன்றி.

ஆகஸ்ட் 20, 2010

எக்லிப்ஸை ஏன் பயன்படுத்த வேண்டும்? - ஜாவா தொடர்

 எக்லிப்ஸ் ஒருங்கிணைந்த உருவாக்கச் சூழல் ( IDE -Integrated Development Environment) எக்லிப்ஸ் நிறுவனத்தால் (eclipse organization) பராமரிக்கப்பட்டும், மேம்படுத்தப்பட்டும் வருகின்றது.  இது தனியார் மென்பொருள் நிறுவனமல்ல. அப்பாச்சி சாப்ட்வேர் பவுண்டேஷன்  போலவே உலகின் முன்னனி நிறுவன மென்பொருளியலாளர்களையும் வேறு தனியார்/பொது அமைப்புகளையும்,  அதிகளவில் தன்னார்வல மென்பொருள் வல்லுனர்களையும் கொண்ட இலாப நோக்கமற்ற நிறுவனம்.  

ஐ.பி.எம் (IBM - International Business Machines) கோடிக்கணக்கான பணத்தை எக்லிப்ஸ் மேம்பாட்டிற்காக செலவிட்டுள்ளது.  ஐ.பி.எம் இதில் இவ்வளவு அக்கறை காட்ட காரணம் உலகின் அத்தனை ஜாவா நிரலர்களையும் தன்பக்கம் திருப்புவதற்காகவே. 

எக்லிப்ஸின் புதிய பதிப்பு எக்லிப்ஸ் ஹீலியோஸ் (Eclipse Helios) .  நெட்பீன்ஸின் புதிய பதிப்பு v6.9. உபுண்டு இயங்க தளத்திற்கு கருமிக் கோலா, லூசிட் லிங்க்ஸ் போன்று பெயர் வைப்பதைப் போல எக்லிப்சுக்கும் கேனி மேட் (Gany Mede), கலிலியோ (Galileo) , ஹீலியோஸ் (Helios)... என பெயர் வைத்திருக்கிறார்கள்.  நீங்கள் புதிதாக பதிவிறக்கம் செய்வதாயிருந்தால் உங்கள் இயங்குதள பெயருடன் சேர்த்து கூகிளில் தேடி பதிவிறக்கிக் கொள்ளவும். linux eclipse helios download, windows eclipse helios download...

எக்லிப்சை நிறுவதற்கே (installation) தேவையில்லை. எக்லிப்ஸ் சுருக்குக் கோப்பை (compressed file) விரித்தாலே போதுமானது.  எக்லிப்சை முதல்முறை இயக்கிப் பார்ப்பதற்குமுன் உங்கள் கணினியில் ஜே.ஆர்.இ நிறுவப்பட்டிருக்கிறதா என உறுதிசெய்து கொள்ளவும்.  ஏனெனில் எக்லிப்ஸ் ஜாவாவில் உருவாக்கிய மென்பொருள்.  எந்தவொரு ஜாவா நிரலையும்/ மென்கலத்தையும் இயக்க ஜே.வி.எம் மிக மிக அவசியம்.  அந்த ஜே.வி.எம் ஜே.ஆர்.இ க்குள்தான் இருக்கிறது. மறந்துவிடாதீர்கள்.....


 ஐ.பி.எம்முடைய வணிக மென்பொருள், எக்லிப்ஸ் இலவச மென்பொருளின்  மேம்படுத்தப்பட்ட பதிப்பே ஆகும்.    MyEclipse ஒருங்கிணைந்த உருவாக்கச் சூழலும் எக்லிப்ஸுடன் கூடுதல் வசதிகளை சேர்த்த வணிக மென்பொருளாகும்.   மாணவர்களுக்கு மட்டுமில்லை வளர்ந்துவரும் சிறிய நிறுவனங்களுக்கும் இலவச திறமூல தீர்வுகளை பயன்படுத்துவதன் மூலம் செலவுகளைக் குறைக்க முடிகிறது.  ஏற்கனவே நன்கு வளர்ந்துவிட்ட டி.சி.எஸ் போன்ற பன்னாட்டு நிறுவனங்களிலும் எக்லிப்ஸை பயன்படுத்தவே ஊக்குவிக்கிறார்கள்.  ஏனெனில் ஊருடன் ஒத்து வாழ் என்பது மென்பொருள் துறைக்கும் பொருந்தும்.

நெட்பீன்ஸ் ஒருங்கிணைந்த உருவாக்க சூழலும் ஜாவா மென்பொருள் உருவாக்கத்திற்கான பிரபல மென்பொருளாகும்.  இதில்லாமல் ஆரக்கிள் ஜேடெவலப்பர், ப்ளூஜே.. என பல மென்பொருட்கள் இருக்கின்றன.  

இதில் ஆச்சர்யமான தகவல் என்னவென்றால் ஆரக்கிள் தனக்கெனவும் ஒரு ஜாவா (jDeveloper) உருவாக்க மென்பொருள் வைத்திருக்கின்றது, தன்னுடைய போட்டியாளரான ஐ.பி.எம்மின் ஆதரவுடன் இருக்கும் எக்லிப்ஸ் அமைப்பிலும் கவுரவ உறுப்பினராக இருக்கிறது.  அதோடில்லாமல் சன் மைக்ரோசிஸ்டம்ஸை கையகப்படுத்தியன் மூலம் சன் மைக்ரோ சிஸ்டம்ஸின் திறமுல ஜாவா மென்பொருளான நெட்பீன்ஸையும் சொந்தமாக்கிக் கொண்டது.  போட்டி அதிகரிக்க அதிகரிக்க, ஆளாளுக்கு முந்திக் கொண்டு புது வசதிகளை அறிமுகப் படுத்துவார்கள்.  மென்பொருள் நிரலராக அகமகிழ்ந்து கொண்டு காலத்தை ஓட்டி விடலாம்.

ஜாவா நிரலை புதிதாக கற்ப நினைப்பவர்கள் ஏதேனும் ஒரு உருவாக்கச் சூழலிலேயே கற்றுக் கொள்ளுமாறு கேட்டுக் கொள்கிறேன்.  சென்ற பதிவின் பின்னூட்டத்தில் (comments) திரு.மணிகண்டன் அவர்கள் இது குறித்து ஒரு கேள்வி எழுப்பினார். அதற்கான பதிலையும் பின்னூட்டத்தைப் படித்து தெரிந்து கொள்ளவும்.

ஒ.உ.சூ என்று சுருக்கமாகச் சொன்னால் கொஞ்சம் நெருடலாக இருக்கிறது.  எனவே ஐ.டி.இ எனவே இனி குறிக்கிறேன்.   :-) ஹி ஹி.........

எக்லிப்ஸ் மென்பொருள் பார்ப்பதற்கு இப்படித்தான் இருக்கும்.


எக்லிப்சில் ஜாவா நிரல் எழுத முதலில் ஜாவா திட்டம் ஒன்றை உருவாக்க வேண்டும்.
File--->New---->Java Project

பிறகு ஜாவா வகை (.class) உருவாக்க வேண்டும்.  நாம் எழுத வேண்டிய நிரல் கட்டளைகளை இந்த கோப்பில்தான் எழுதுவோம்.   எடுத்துகாட்டிற்கு Factorial.java கோப்பை உருவாக்க முதலில் எக்லிப்ஸ் ஜாவா திட்டத்தை (Java project) உருவாக்கிக் கொள்ளுங்கள்.  பின் நீங்கள் உருவாக்கிய திட்டத்தில் வலது கிளிக் செய்து புது ஜாவா class கோப்பை உருவாக்குங்கள்.


கீழ் காண்பிக்கப் பட்டுள்ளதுபோல் ஒரு திரை தோ ன்றும்.  அதில் Factorial (எ.கா) என தட்டச்சு செய்யவும்.   கவனிக்க Factorial.java இல்லை வெறும் Factorialதான்.    public static void main  என்பதை தேர்வு செய்யவும்.


இன்றும் பலர் ஜாவாவில் முதல் வரியிலேயே தவறு செய்வதுண்டு.  ஏனெனில்  ஜாவா case sensitive மொழி.    String என்று எழுதுவதற்கு பதில் string என எழுதுவது. system, Public, Void.. போன்று பல தவறுகளை செய்வோம்.

சிந்தனைக்கு: தவறே செய்யாத மனிதன் புதியது எதையும் செய்திருக்க மாட்டான்.

        நாம் தட்டச்சிடும் நிரல் ஒழுங்கில்லாம்மல் ஏட்டில் எழுதுவதுபோன்றே ஏழு கோணத்தில் இருந்தால், எக்லிப்ஸ் நொடியில் அதை சீராக்கித் தந்துவிடும்.




 ஜாவாவில் நிரல் கட்டளைகளை பகிர்வதற்கு முன் எக்லிப்சுக்கு ஏன் இவ்வளவு முக்கியத்துவம் தருகிறேன்.  பல ஐ.டி.இ க்கள் வலம் வந்தாலும் எக்லிப்ஸ் முடிசூடா மன்னனாக இருப்பதற்கு அது ஒரு இலவச மென்பொருள் என்பதால் மட்டுமல்ல, அந்தளவிற்கு நிரலாக்கத்தை எளிமை படுத்தி விடுகிறது.  நோட்பேட் போன்ற டெக்ஸ்ட் எடிட்டரில் எழுதும்போது பிழைகள் உடனே தெரியாது.


நாம் எழுதிய நிரலை கம்பைல் (மொழி மாற்றம்) செய்யும் போதுதான் ஒரு சாதாரண நிரலிலேயே நூற்றுக்கணக்கான பிழைகள் இருப்பது தெரியவரும். அப்படியில்லாமல் ஒரு வரியை எழுதும்போதே அதிலிருக்கும் பிழைகளை சுட்டினால் எப்படி இருக்கும்?!.. 



எக்லிப்ஸ் இன்னும் ஒரு படி மேலே போய், பிழைகளை மட்டும் சொல்வதோடு மட்டுமல்லாமல் அதை களைவதற்கான உதவியையும் தருகிறது



 நிரல் இயங்கிபின்  வெளியீடையும் (output) இருந்த இடத்திலேயே விரைவாக காண முடியும்.


எனவே ஜாவா மட்டுமல்ல எந்தவொரு கணினி மொழியைக் கற்றுக்கொள்ள நினைப்பவர்களும் நிச்சயமாக கற்றலை எளிமை படுத்தும், இனிமை படுத்தும் மென்பொருட்களை முதலில் பயன்படுத்த வேண்டும்.  ஆசிரியர் பயன்படுத்தவில்லை என்றால் அவர்கள் காலத்தில் இவ்வளவு எளிமையான ஆற்றல் மிகுந்த மென்பொருட்கள் இல்லை.  தற்போதைய நம் தலைமுறை இருக்கும் ஆற்றல் வாய்ந்த மென்பொருட்களைக் கொண்டு ஆற்றல்மிக்க மென்கலங்களை உருவாக்கிடல் வேண்டும். 

இனிவரும் காலங்களில் நிரலெழுதுவதற்கு தேவையே இருக்காது, செய்ய வேண்டியவைகளை  சொல்லிவிட்டால் அதுவே நிரலெழுதிக் கொள்ளும்.  அட இப்போதே அதற்கும் வசதியிருக்கிறது. ஒன்றை நினைவில் இருத்திக் கொள்ளுங்கள் ஒரு நிரல் மொழியை படிப்பது, அதிலிருக்கும் எல்லாம் தெரியும் என மார்தட்டிக்கொள்ள அல்ல.  உங்களுக்கு தெரிந்ததை வைத்துக் கொண்டே எவ்வளவு சிறப்பாக எழுதுகிறீர்கள் என்பதே.  நாம் புதிதாய் கற்றுக் கொள்வது நாம் ஏற்கனவே அறிந்து வைத்திருப்பதை எளிமை படுத்துவதற்காகவும்,  நம் ஆற்றலை அதிகரிப்பதற்காகவும் இருக்கட்டும். 
அந்தவகையில் ஐ.டி.இ க்கள் உங்கள் அறிவை மழுங்கடிப்பதற்காக இல்லை, உங்கள் நிரலறிவை மேலும் செறிவூட்டுவதற்காகவே....


அடுத்த பதிவிலிருந்து நிரலெழுத தொடங்குவதற்குமுன், முதல் வேலையாக ஏதேனும் ஒரு ஜாவா ஐ.டி.இ க்கு உங்கள் கணினியில் கொஞ்சம் இடம் கொடுங்கள்.

--தொடரும்

ஆகஸ்ட் 17, 2010

ஜாவாவில் புரொகிராம் செய்ய என்னென்ன அவசியம் தேவை? -- ஜாவா தொடர்

ஜாவா குறித்து அடிப்படைத் தகவல்களைக் கொஞ்சம் தெரிந்து கொண்டு விரைவில் நிரலெழுத குதித்து விடலாம்.  அதற்கு முன்னர் ஜாவா மெய்நிகர் கணினி குறித்து சிறிது தெரிந்து கொள்வோம். 

மேலான விவரங்களுக்கு விக்கீபீடியாவிலிருந்து தெரிந்து கொள்ளுங்கள்.
புதியவர்களுக்கு ஒரு தகவல்: தமிழில் தொழில்நுட்ப தகவல்களைப் பெறத் தமிழிலேயே தேடுங்கள். எடுத்துகாட்டிற்கு java tamil tutorial எனத் தேடுவதற்கு பதில் ”ஜாவா கட்டுரை” போன்ற குறிப்புகளைக் கொடுத்து தேடலாம்.

ஜாவா நிரலை இயக்க என்னென்ன தேவை?

ஜாவா நிரலை எழுதுவதற்கு பெரிதாக ஒன்றும் தேவையில்லை. ஏதேனும் ஒரு உரை பதிப்பி (text editor) இருந்தால் போதுமானது.  எடுத்துகாட்டிற்கு விண்டோசில் நோட்பேடிலும் லினக்சில் ஜிஎடிட், கேஎடிட்டர்,  விஐ... போன்ற மென்கலங்களிலும் எழுதிக் கொள்ளலாம்.  அதை கணினிக்கு புரியும்படி எப்படி மாற்றுவது? (கணினிக்கு அவற்றின் மொழியான இரும மொழி தவிர வேறு மொழி தெரியாது).  உயர்நிலை மொழியிலிருந்து இரும மொழிக்கு (binary/machine language) மாற்ற ஒரு மொழிமாற்றி (compiler) தேவைப்படுகிறது. அதை எப்படிப் பெறுவது? என்ன விலை இருக்கும்?


  javac என்பதுதான் ஜாவாவை மொழிமாற்றும் (கம்பைல் செய்யும்) நிரல்.  இந்த பயன்பாடு ஜே.டி.கே (JDK- Java Development Kit) என்னும் மென்பொருள் தொகுப்புடன் வருகிறது.  நீங்கள் ஜாவாவில் புரோகிராம் செய்ய ஜே.டி.கே மிகமிக அவசியம்.  ஜே.டி.கே இணையத்திலிருந்து இலவசமாக பதிவிறக்கிக் கொள்ளலாம்.  அல்லது டிஜிட்,பிசிகுவெஸ்ட்.. போன்ற ஆங்கில கணினி மாத இதழ்களுடன் வரும் குறுவட்டிலிருந்து பெற்றுக் கொள்ளலாம்.


ஜே.டி.கே தொகுப்பில் ஜே.ஆர்.இ (JRE- Java Runtime Engine) என்கிற துணை தொகுப்பு இருக்கிறது.  ஜாவா நிரலை இயக்குவதற்கு ஜே.ஆர்.இ அவசியமானது.  ஜே.ஆர்.இ நிறுவப்படாத கணினியில் ஜாவா நிரலை இயக்குவதற்கான கட்டளையான java என்பதை விண்டோஸ் கமாண்ட் ப்ராம்ப்டிலோ, லினக்ஸ் டெர்மினலிலோ கொடுத்தால் java: command not found, java not installed போன்ற பிழை செய்தி தோன்றும்.  இந்த பிழைசெய்தி உங்கள் கணினியில் தோன்றினால் ஜாவா நிரல்களை இயக்கக் கூடிய ஜே.ஆர்.இ தொகுப்பு உங்கள் கணினியில் இல்லை என்பதைத் தெரிந்து கொள்ளலாம்.


ஜே.டி.கே இல்லாவிட்டாலும் ஜாவா நிரலை இயக்க முடியும், ஆனால்  ஜே.ஆர்.இ இல்லாமல் முடியாது.

என்னய்யா கொஞ்ச நேரம் முன்புவரை ஜே.டி.கே அவசியமென்று சொல்லிவிட்டு, இப்போது தேவையில்லைன்னு சொன்னா மண்டை காயாதா எனக் கேட்கிறீர்களா. 

சற்று உற்று கவணிக்கவும்.  ஜே.டி.கே இல்லையென்றால் நாம் எழுதிய நிரல்களை மொழிமாற்றம்/ கம்பைல் (ஜாவாவிலிருந்து பைட் நிரலிற்கு) செய்ய இயலாது.  ஜே.ஆர்.இ இல்லையென்றால் பிறர் உருவாக்கி வைத்திருக்கும் (ஏற்கனவே மொழிமாற்றி வைத்திருக்கும்) கோப்புகளையும் இயக்க இயலாது.  ஜே.ஆர்.இயை மட்டும் தனியாக நிறுவிக் கொள்ளலாம், அல்லது ஜே.ஆர்.இயையும் தன்னுள் அடக்கிய பெரிய தொகுப்பான ஜே.டி.கேவை நிறுவிக் கொள்ளலாம்.
  • ஜாவாவில் மென்பொருளை/நிரல்களை உருவாக்க ஜே.டி.கே தேவை.
  • ஜாவாவில் உருவாக்கிய மென்பொருளை/நிரலை இயக்க ஜே.ஆர்.இ தேவை.
java கட்டளை ஜாவா நிரலை இயக்க பயன்படுகிறது.  இது ஜே.ஆர்.இ யுடனே வந்துவிடும்.  ஜாவா நிரலை கம்பைல் செய்ய உதவும் javac கட்டளை ஜே.ஆர்.இயுடன் வராது.

javac கட்டளையை இயக்க ஜே.டி.கே நிறுவப்பட்டிருக்க வேண்டும்.  ஜே.டி.கே, ஜே.ஆர்.இ இவை இரண்டுமே அனைத்து இயக்க சூழல்களுக்கும் கிடைக்கின்றன. விண்டோசுக்கு .exe கோப்பாகவும், லினக்சுக்கு .rpm,.deb,.bin... கோப்பாகவும், மேக் இயங்குதளத்திற்கு .dmg கோப்பாகவும் கிடைக்கின்றது.

ஜே.வி.எம் (JVM- Java Virtual Machine) என்பதுதான் ஜாவாவை இயக்குகிற மைய மென்கலம்.  ஜாவாவை இயக்குவதற்கான் இதயம் போன்றது.  தமிழில் இதை ஜாவா மெய்நிகர் கணினி என்று அழைக்கலாம்.  இதன் பயன் என்ன? இதை எப்படி நிறுவது? எனப் பல கேள்விகள் எழலாம்.

ஜே.வி.எம்மை நீங்கள் தனியாக நிறுவ வேண்டியதில்லை.  ஜே.வி.எம் என்பது ஜே.ஆர்.இக்குள் அடக்கம். JDK<----JRE<------JVM.  நீங்கள் எழுதிய ஜாவா நிரலை ஜாவா மெய்நிகர் கணினிதான் இயக்குகிறது.  ஜாவா நிரல்கள் .java என்கிற கோப்பாக இருக்கும். 
javac மொழிமாற்றி அதனை .class கோப்பாக மாற்றித் தரும்.  ஒரு மொழிமாற்றியின் வேலை உயர்நிலை மொழியிலிருந்து இரும மொழிக்கு மாற்றுவதுதான் என ஏற்கனவே பார்த்தோம்.  இன்னொன்றையும் புரிந்து கொண்டால் இதை உள்வாங்கிக் கொள்ள எளிமையாய் இருக்கும்.  


இரும மொழி கோப்புகள் (binary files) எந்த நீட்டிப்பில் (extension) இருக்கும்?  விண்டோசில் .exe என்று இருக்கும்.  லினக்சில் .bin என்று இருக்கும்.  அதுசரி பின்னர் ஏன் .java கோப்பு .exe கோப்பாகவோ .bin கோப்பாகவோ இல்லாமல் .class என்கிற ஒரு புது நீட்டிப்புடன் உருவாகிறது.

இதன் பின்னனியில்தான் இருக்கிறது ஜாவாவின் அடிப்படைத் தத்துவம்.  நேரமின்மையால் கொஞ்சம் கொஞ்சமாகத்தான் பகிர்ந்து கொள்ள முடிகிறது.  அடுத்த பதிவில் எக்லிப்ஸ் மென்பொருளை எவ்வாறு பயன்படுத்தலாம் என விரிவான விளக்கங்களுடன் (படங்களுடன்)  அடுத்த பதிவில் பார்க்கலாம்.  அதுவரை எக்லிப்ஸ் குறித்து கீழ்காணும் பதிவில் மேலோட்டமாகத் தெரிந்து கொள்ளுங்கள்.

--தொடரும்

ஆகஸ்ட் 15, 2010

ஜாவாவும் சுதந்திரமும் - ஜாவா தொடர் 3

ஜாவாவும் சுதந்திரமும் - ஜாவா தொடர் 3
சுதந்திர தின நல்வாழ்த்துகள்



இங்கு சுதந்திரம் என்பது ஓப்பன் சோர்ஸைக் குறிக்கிறது.  ஜாவாவில் எழுதப்பட்ட கட்டற்ற திறமூல மென்பொருட்கள் நிறைய உள்ளன.  ஜாவா, ஓப்பன் ஆபிஸ் இரண்டுமே சன் மைக்ரோசிஸ்டம் வழிவந்ததால் ஓப்பன் ஆபிஸ் ஜாவாவில் உருவாக்கப்பட்ட மென்பொருள் என்பதை சொல்லித் தெரிய வேண்டுமா?

ஜாவா இணைய பயன்பாடுகளை(Web applications) உருவாக்குவதற்கு ஏற்ற மென்பொருள்.  தனிமேசை பயன்பாட்டு மென்பொருள் உருவாக்கத்தைவிட இணையப் பயன்பாடு உருவாக்கத்தில் ஜாவா கோலோச்சி நிற்கிறது.  ஜாவா மொழி பலரால் பயன்படுத்தப் படாமாலா இன்று கணினி உலகில் நம்பர் ஒன் மொழியாக இருக்கிறது. 

ஒவ்வொரு ஆண்டும் நிரல் மொழிகளுக்கு தரவரிசையை வழங்கும் டையோப் நிறுவனத்தின் அறிக்கையைப் பாருங்கள்.  கடந்த சில வருடங்களாக ஜாவா மொழி தொடர்ச்சியாக முதலிடத்தில் இருப்பதைக் காணலாம்.



ஜாவாவின் மிகப்பெரிய பலம் பணிச்சூழல் சாராமை (platform independence).  ஜாவாவில் உருவாக்கத்தில் இருக்கும் ஒரு திட்டப்பணியை (project) எப்போது வேண்டுமானாலும் எந்த இயக்கச் சூழலுக்கும் மாற்றிக் கொள்ளலாம். மென்பொருள் நிறுவனங்களுக்கு இது ஒரு மிகப்பெரிய வரப்பிரசாதம். வாடிக்கையாளர் யுனிக்ஸ் அல்லது விண்டோசில் இயங்கக் கூடிய ஒரு பயன்பாட்டை கேட்கிறார் என வைத்துக் கொள்வோம்.   அதை நீங்கள் உங்களிடம் இருக்கும் இயங்குதளத்திலேயே வடிவமைக்கலாம்.  ஒரு திட்ட அறிக்கையை பகுதி பகுதியாக (modularization) பிரித்துக் கொண்டு ஒருவர் லினக்சிலும், மற்றொருவர் யுனிக்ஸ் விண்டோஸ் போன்ற சூழலிலும் உருவாக்கலாம்.

ஜாவாவின் அடிப்படைக் கொள்கை ஒருமுறை எழுதிவிட்டு எங்கு வேண்டுமானாலும் இயக்கிக் கொள்ளுங்கள் (WORA - Write once run
anywhere) என்பதே.   

பல பயனுள்ள துணைநிரல்களை (libraries) ஜாவா மொழி தாங்கி வருகின்றது.  இது நிரலாக்கத்தில் அடிக்கடிப் பயன்படும் ஒரு தேவைக்கு ஏற்கனவே நன்கு பரிசோதிக்கப்பட்ட, நம்பகமான, தரமான துணைநிரல்களைப் பயன்படுத்திக் கொள்ளலாம்.  எடுத்துக்காட்டிற்கு தரவு கட்டமைப்பில் (data structure) இருக்கும் அடுக்கு (stack) பயன்பாட்டிற்கு (push/pop) நீங்கள் நிரலெழுதிக் கொண்டிருக்கத் தேவையில்லை.    java.util.* தொகுப்பில் (package) வரும் Stack வகுப்பை (class) பயன்படுத்திக் கொள்ளலாம்.

ஜாவாவிற்கு முற்றிலும் புதியவர்கள் புரியாத வரிகளைத் தவிர்த்துவிட்டு தொடரவும்.   இவை ஒவ்வொன்றையும் அடுத்தடுத்த கட்டுரைகளில் அலசி
ஆராய்வோம்.

ஜாவாவை சன் மைக்ரோசிஸ்டமஸ் சொந்தம் கொண்டாடினாலும்,  ஜாவாவுடன் பயன்படுத்தும் நிரலாக்க சட்டங்கள் (frameworks), துணை
நிரல்கள் (libraries) அனைத்திற்கும் அவர்கள் சொந்தக்காரர்கள் அல்ல.  சன் மைக்ரோசிஸ்டம்ஸ் அறிமுகப் படுத்திய ஜாவா விவர வரையறைகளில் (java specifications servlet,ejb etc..) சில மிகக் கடினமாக இருந்தது. அதுவே ஜாவாவை பலர் வெறுப்பதற்கும் காரணம் ஆயிற்று.  

ஜாவாவில் மென்பொருள் உருவாக்குவதை எளிமையாக்க பல்வேறு நிறுவனங்கள் கோடிக்கணக்கான ரூபாயை முதலீடு செய்துள்ளன.  அவர்கள் பணம் வீணாய்ப் போக விட்டுவிடுவார்களா என்ன?  ஐ.பி.எம், கூகிள் போன்ற நிறுவனங்களும் இதில் அடக்கம்.  கூகிள் GWT - Google Web Toolkit என்றொரு நிரலாக்க சட்டத்தை (framework+tools) ஜாவாவிற்கு தருகிறது.  அஜாக்ஸ் (AJAX - Asynchronous JavaScript and XML ) முறையிலான வெப் பயன்பாடுகளை உருவாக்குவற்கு ஏற்றது.  ஜிமெயில், கூகிள் மேப்ஸ் போன்ற பயன்பாடுகளை உருவாக்க GWT பெரிது உதவும்.  இது கட்டற்ற திறமூல மென்பொருள் என்பதால் ஆர்வத்தை அதிகரிக்கின்றது.  ஐ.பி.எம், அப்பாச்சி அறக்கட்டளை... போன்றவற்றின் ஆதரவால் ஜாவா இன்றளவும் முதலிடத்தில் இருக்கிறது.


ஜாவா என்பது நிரலாக்க மொழி மட்டும் இல்லை.  ஜாவா என்பது ஜாவா நிரல் மொழியையும் உள்ளடக்கிய பணிச்சூழல் (java is not a programmiing language alone. java is a platform which includes java programming language itself).

ஆகவே உங்களுக்கு ஜே.எஸ்.பி, சர்வலெட், இ.ஜே.பி இவையெல்லாம் தெரியாதென்றால் உங்கள் சுயவிவர (Resume) அறிக்கையில் மொட்டையாக ஜாவா என்று எழுதிவிடக் கூடாது.  வெறுமனே ஜாவா என்றால் அது மொத்த ஜாவா பணிச்சூழலையும் குறிக்கும்.  எனவே ஜாவா நிரல் மொழியை மட்டும் அறிந்த நண்பர்கள் தங்கள் சுயவிவரக் குறிப்பில் "core java" என்று குறிப்பிடுமாறு கேட்டுக் கொள்கிறேன்.

சன் மைக்ரோ சிஸ்டத்தைக் கையகப்படுத்தியதன் மூலம் இன்று ஜாவா ஆரக்கிள் நிறுவனத்தின் வசம் இருக்கிறது.  வணிக மென்பொருள் சந்தையில் வெற்றிக் கொடி நாட்டிய ஆரக்கிள் ஜாவாவை சுதந்திரமாக இருக்க அனுமதிக்குமா?

உங்கள் நல்லாதரவுடன் ஜாவா தொடர் ...தொடரும்

ஆகஸ்ட் 14, 2010

புரோகிராமிங் அடிப்படைகள் - ஜாவா தொடர்

ஜாவா தொடர் - 2

அறுபதுகளில் பயன்படுத்தி வந்த நிரல் மொழிகளை விட டென்னிஸ் ரிச்சி உருவாக்கிய சி எளிமையாக இருந்தது.   சி மொழி யுனிக்ஸ் இயங்கு தளத்தில் வடிவமைக்கப் பட்டது.  அனைத்து வசதிகளையும் தரும் சி மொழியை உபயோகிப்பதற்கு அவர் எந்த நிபந்தனைகளையும் வைக்கவில்லை.  ஆகவே உலகெங்கும் பரவியிருக்கும் பல்கலைக் கழகங்கள், கணினி நிறுவனங்கள், கணிய ஆராய்ச்சி அமைப்புகள் என அனைவர் மத்தியிலும் சி மொழி பலத்த வரவேற்பை பெற்றது.  பிரச்சனையும் இங்கிருந்துதான் ஆரம்பம்.  குறிப்பிட்ட வன்பொருள் (மையச்செயலி/microprocesser) கட்டமைப்பில் உருவாக்கிய மொழியை வெவ்வேறு கட்டமைப்புகளில் (architecture) இயங்க வைக்க பிரத்யேக மொழிமாற்றிகள் (compilers) உருவாக்கப் பட்டது. 

 

இப்போது கம்பைலர் (மொழி மாற்றி) என்றால் என்னவென்று பார்ப்போம். சி,சி++,ஜாவா,விபி... போன்றவற்றை உயர்நிலை மொழிகள் (high level languages) என்கிறோம்.  ஏனெனில் உயர்திணைகளான மனிதர்கள் புரிந்து  கொள்ளும்படி மனிதர்களால் உருவாக்கப் பட்டவை. 

கணினி என்பது அஃறினை(உயிரற்றது) என்பதை மறந்துவிடக் கூடாது.  கணினிக்குத் தெரிந்தது இரும மொழிதான் (binary language 0-1) என்று சொல்வதுண்டு. உண்மை என்னவெனில் அவற்றிற்கு எந்த மொழியும் தெரியாது.  இரும மொழியும் மனிதர்கள் புரிந்து கொள்ளவே ஒரு சுருக்குக் குறிப்புகள்தான் (shortcut notations).  கணினி என்பது ஒரு மின்சார கருவி.  அதிலிருக்கும் கோடிக்கணக்கான சிப்புகளில் பாயும் மின்னழுத்தத்திற்கேற்ப வேலைகள் நடக்கின்றன. ஒரு குறிப்பிட்ட அளவு மின்சாரம் இருந்தால் அது 1 எனவும் அதற்கு குறைவாக இருந்தால் 0 என்றும் குறித்து வந்தனர்.  ஆரம்பகட்டத்தில் ஆராய்ச்சி நிலையில் ஒன்றையும் ஒன்றையும் கூட்டினால் இரண்டு என வரவழைப்பதற்கு இரும எண்கள் எளிதாக இருந்தது.

தரவுகள் (data), செயல்பாடுகள் (கூட்டல், கழித்தல்..) என அனைத்தையும் இரும எண்களிலேயே குறித்தனர். ஒரு எடுத்துக்காட்டிற்கு ‘வணக்கம்’ என்று வரவழைப்பதற்கு 01110101011110100001111010101 என்று நிரலெழுதினால் எப்படி இருக்கும் என எண்ணிப் பாருங்கள்.  என்னக் கொடுமை, கணினி முன்னோடிகள் தங்கள் கணியத் தேவைகளுக்கு இப்படித்தான் கட்டளை எழுதினார்கள்.  கொஞ்சம் கொஞ்சமாக கணிக்க வேண்டியவை அதிகரிக்க அதிகரிக்க இரும எண்களுக்கு ஒரு மாற்றாக பொறி மொழியை (assembly language) மனிதன் கண்டுபிடித்தான். 

இவை இரண்டையும் கூட்டு என்று சொல்வதற்கு 111100010101110101011 என்று கொடூரமாக எழுதுவதற்கு பதில் (add a,b) என்று மனிதர்களுக்கு புரியும் மொழியில் எழுதுவது எளிமையாக இருந்தது.  இதை கணினிக்கு எப்படி புரிய வைப்பது. அதற்கு புரிய வைக்க அவற்றிற்கு நாம் ஏற்கனவே சொல்லிக் கொடுத்த இரும மொழியில் மாற்றித் தர வேண்டும்.  அந்த வேலையைச் செய்யும் நிரலுக்கு(பயன்பாடு) பெயர்தான் பொறிமொழி மாற்றி (assembler).  
இப்படிப் படிப்படியாக நிரலாக்கத்தை எளிமை படுத்த ஒவ்வொன்றாக கண்டுபிடித்தனர்.  பொறிமொழி மாற்றி எவ்வாறு பொறி மொழியிலிருந்து இரும மொழிக்கு மாற்றுகிறதோ (assembler converts assembly language to binary code)

மொழிமாற்றிகள் உயர்நிலை மொழியிலிருந்து இரும மொழியாக மாற்றித் தருகின்றன (compiler converts high level language to machine language).

ஒவ்வொரு கட்டமைப்பிலும் சிக்கலின்றி இயங்க அந்தந்த கட்டமைப்புகளுக்குத் தகுந்தவாறு மொழி மாற்றிகள் உருவாக்கப் பட்டது. 
சிலமென்பொருட்களை பதிவிறக்கம் செய்ய முற்படும்போது x86, i382, x86-64 bit... என பலப் பிரிவுகள் இருப்பதைப் பார்க்கலாம்.  ஏன் இத்தனைப் பிரிவுகள். ஒரே மென்பொருள்தான், அதே செயல்பாடுதான் ஆனால் ஏன் வெவ்வேறு வகைகளாக தரவேண்டும். வெவ்வேறு வகையான கணினிகளில் உள்ள மையச் செயலி ஆணை அமைவுகளில் (microprocessor Instruction Set) மாற்றம் இருப்பதால்தான். இதை இத்தோடு நிறுத்திக் கொள்வோம், நம் தொடருக்குத் திரும்பலாம்.

சி++ மொழி கணினி மென்பொருட்களை உருவாக்க பெரும் புரட்சியைச் செய்ததென்று சொல்லலாம்.  ஜேன் ஸ்ட்ரூஸ்டரப் (Bjarne Stroutstrup) உருவாக்கிய சி++ பொருள் நோக்கு நிரலாக்க (OOP-object oriented programming) மொழியாகும்.  பொருள் நோக்கு நிரலாக்கம் மென்பொருள் உருவாக்கத்தில் பெரும் புரட்சியை செய்கின்றது.  பொருள் நோக்கு பகுப்பாய்வும் வடிவமைப்பும் (OOAD- Object oriented analysis and design) சி++ மொழிக்கு மட்டும் சொந்தமல்ல. பொருள் நோக்கு வடிவமைப்பு என்பது ஒரு தத்துவம்,

மென்பொருள் உருவாக்க வழிமுறை.  சி++ற்கு முன்னரே ஸ்மால்டாக் போன்ற பொருள் நோக்கு மொழிகள் உருவாக்கப் பட்டது. ஜாவா, அப்ஜெக்டிவ் சி, பி.எச்.பி... போன்றவை பொருள் நோக்கு மொழிகளே.  பொருள் நோக்கு நிரலாக்கத்தில் மரபுரிமம் (inheritance), உறைபொதியாக்கம் (encapsulation)... போன்றவை அடிப்படைத் தத்துவங்களாக உள்ளது.  மரபுரிமம் என்பது தாத்தா சொத்தில் பேரப் பிள்ளைகளுக்கு உரிமை என்பதைப் போன்றது.  நீங்கள் ஒரு நிரல் எழுதியுள்ளீர்கள். அதிலிருக்கும் சில வசதிகளை பிறர் பயன்படுத்தலாம் என்று கொடுக்கிறீர்கள் என வைத்துக் கொள்வோம், எங்களுக்கு வேண்டிய வசதிகள் அதிலிருந்தால் நாங்கள் அதை அப்படியே பயன்படுத்திக் கொண்டு இல்லாத வசதிகளுக்கு மட்டும் நிரல் எழுதிக் கொள்ளலாம்.  நமக்கு அனைத்து வசதிகளும் தேவையில்லையெனில் தேவையற்றதை நீக்கிக் கொண்டு நம் தேவைக்கேற்ப மாற்றிக் கொள்ளலாம்.

[லினக்ஸ் இயங்குதளத்தில் படிக்க முடியவில்லை என்றால் காப்பி செய்து ஓப்பன் ஆபிஸ், டெக்ஸ்ட் எடிட்டரில் பேஸ்ட் செய்து படிக்கவும்
மன்னிக்கவும்,  பிரதியெடுத்து ஒட்டி படிக்கவும்.   தமிழில் எழுதினாலும் அடைப்புகுறியில் ஆங்கிலச் சொற்களை எழுதுகிறேன், பயப்படாமல்
நகைக்காமல் படிக்கவும்.]

தொடரும்...