Sunday, 23 February 2020

Ajax හදුනාගනිමු.

Ajax ගැන ඉතා සරලවම කිව්වොත්, මෙය web page එක reload නොකරම දත්ත හුවමාරු කරවීමයි. ඒ කියන්නේ
https://blog.arvixe.com/opencart-create-ajax-function/ ඇසුරින්

  • Reload නොකර web page එක update කිරීමට
  • Load වී තිබියදී data, request(ඉල්ලීමට) කිරීමට
  • Load වී තිබියදී data, receive(ලබාගැනීමට) කිරීමට
  • පසු තලයේ දීම සර්වරයට දත්ත යැවීමට
Asynchronous JavaScript + XML කෙටී වී Ajax  යන්න ගොඩනැගී තිබෙනවා. මෙය තේරුම් ගැනීම ඉතා අමාරු දෙයක්  නොවේ. Asynchronous(අසමමුහූර්තක) වලින් කියන්නේ අනෙක් process අවසන් වනතුරු නොහිද දත්ත process කරවීමයි.
Ajax හීදි පහත.

  • AJAX හා JavaScript  සමග XHTML, CSS යොදාගනිමින් වෙබ් පිටුවට ගතික අන්තර් ගතයක් ලබාදෙන්න පුලුවන්.
  • සාම්ප්‍රදායික වෙබ් යෙදුම් synchronous requests භාවිතයෙන් සර්වරයට තොරතුරු යැවීම හා සර්වරයෙන් ලබාගැනීමට. ඒ කියන්නේ form එක fill කරලා submit ක්ලික් කළාම  අලුත් තොරතුරු අඩංගු නව පිටුවක් load කරවීමයි.  නමුත් Ajax භාවිතා වන විට JavaScript වලින් request එකක් සාදා සර්වරයට යවා, දත්ත කියවා පවතින පිටුව යාවත්කාලීන කරවයි. සක්සුදක් සේ කිව්වොත් පරිශීලකයා යවන දත්ත හුවමාරු වනවද කියලත් පරිශීලකයා කිසිදාකවත් 
  • Server එකෙන් දත්ත ලබාගැනීමට යොදාගැනෙන්නේ XML(Extensible Markup Language). මීට අමතරව plain text ඇතුළත් ව ඕනෑම format එකක දත්ත හුවමාරු කළහැක.
  • AJAX, web browser හි තාක්ෂණක් වන අතර එය web server මෘදුකාංග වලින් ස්වායත්ව වේ.
  • request එක යවා අපසු server  එකෙන් එන තෙක් user ට තමන්ගේ කාර්යය දිගටම කරගෙන යා හැක.
  • නූතන web browser සියල්ලෙම ක්‍රියත්මක වේ.

XMLHttpRequest Object

AJAX හිදී XMLHttpRequest Object භාවිතා කරන්නේ දත්ත server එකත් එක්ක හුවමාරු කරගැනීම සදහායි.

XMLHttpRequest එකක් සෑදීම

නව browser සදහා
variable  = new XMLHttpRequest();

පැරැණි IE5 හා IE6 
variable new ActiveXObject("Microsoft.XMLHTTP");

Domains හරහා ප්‍රවේශ වීම

ආරක්ෂක හේතුන් මත නව browser, domains හරහා ප්‍රවේශ වීමට ඉඩ ලබා නොදේ. එයින් අදහස් වන්නේ  web page හා load කිරීමට උත්සහ දරන XML file එක එකම සර්වරයක තිබිය යුතු බවයි.

භාවිතා කරන browser එක අනුව හැදෙන request එක handle කළ යුතු වේ.

if (window.XMLHttpRequest) {
    // code for modern browsers    xmlhttp = new XMLHttpRequest();
 } else {
    // code for old IE browsers    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

XMLHttpRequest Object එකට අදාළ Methods

new XMLHttpRequest()
නව XMLHttpRequest object එකක් නිර්මාණය කිරීමට.
abort()
පවතින request එක cancel කිරීමට
getAllResponseHeaders()
header එකේ තොරතුරු ලබා දේ
getResponseHeader()
එක් සුවිශේෂි වු header එකක තොරතුරු ලබා දේ
open(method,url,async,user,psw)
request එක අර්ථ දැක්වීමට

  • method: request එකේ type එක GET ද POST ද කියන එක
  • url: file එකේ location එක. නැතිනම් ලිනක් එක
  • async: true (asynchronous) ද false (synchronous) ද කියන එක
  • user: optional user name එක
  • psw: optional password එක
send()
GET සදහා request එක සර්වරයට යැවීම
send(string)
POST සදහා request එක සර්වරයට යැවීම
setRequestHeader()

යවන්න හදන request  එකට header එකට label/value යුගලයක් එකතු කිරීමට.

XMLHttpRequest Object එකට අදාළ Properties

onreadystatechange
readyState එකේ property වෙනස් වීම් වෙන කොට call කිරීමට function එකක් නිර්මාණය කිරීමට.
readyState 
XMLHttpRequest එකේ තත්වය රදවා ගනී. තත්වය 5ක් පවති.


  • 0: request එක initialize කරලා නැත

  • 1: server එකේ connection ස්ථාපිත වී තිබේ.

  • 2: request එක බාර ගත්තා

  • 3: request එක සැකසීමේ ක්‍රියාවලියක

  • 4: request එක අවසනයි response සූදානම්
responseText
response එකේ data, string එකක් ලෙස ලබා දේ
responseXML
response එකේ data, XMLඑකක් ලෙස ලබා දේ
status
request එකේ තත්වය සංඛ්‍යාත්මක ලෙස ලබාදේ. එනම් HTTP Status Messages හි අගයන්


  • 200: "OK"


  • 403: "Forbidden"


  • 404: "Not Found"
statusText
status එක textඑකක් ලෙස ලබා දේ්. උදා "OK","Not Found"

Saturday, 9 March 2019

Design Pattern වර්ගීකරණය


Design Pattern ඒවායේ සංකීර්ණතාවය, විස්තර වල මට්ටම හා යොදුම් පරාසය(ආදේශ කළ හැකි අවස්ථාවන් ප්‍රමාණය) අනුව වෙනස් වේ. එය හරියට මාර්ග ඉදිකීරීමේ ව්‍යුහය වගේ. මාර්ගයේ මගී හා රථවාහන අරාක්ෂාව  සදහා කඩ ඉරි සමග Traffic light පද්ධතියක් ස්ථාපිත කිරීම හෝ මගී ගුවන් පාලම්(හෝ භූගත උමං) සෑදීම යන දෙකෙන්  එකක් යොදා ගත හැක. ඒ දෙකම එකම ගැටලුවට විසදුම් ලබා දුන්නත් විසදුම් දෙක එකිනෙකට වෙනස් ය.

ගොඩක්ම මූලික හා පහල මට්ටමේ Pattern  හදුන්වන්නේ idioms(ඉංගිසියේදී රූඩි, වාග සම්පදාය හා පිරුඑ යන අර්ථය ලබා දේ) කියාය. මේවා තනි ක්‍රමලේඛ භාශාවකට පමණක්ම යෙදේ.

ගොඩක්ම universal(සර්වත්‍ර) හා ඉහළ මට්ටමේ Pattern  එක architectural patterns වේ. මේවා තනි ක්‍රමලේඛ භාශාවකට පමණක්ම යෙදේ. Developers ලට මෙම patterns  තාත්විකව ඕනෑම භාෂාවකින් ගොඩනැංවිය හැක. අනෙක් Pattern මෙන් නොව මේවා සම්පූර්ණ application එකේ architecture  එක design කිරීමට යොදා ගැනේ.

මීට අමතරව patterns, ඒවායේ අරමුණු හා බලාපොරොත්තු(intent එක) අනුව බෙදේ. ඒ අනුව මූලික කොටස් 3කී.
ඒවා

  • Creational patterns
  • Structural patterns
  • Behavioral patterns


Creational patterns

මෙම pattern වර්ගය class එකකින් object නිර්මාණය වීම පිළිබදව වේ. මේවා තවදුරටත්  කොටස් දෙකකට බෙදේ. ඒවා class-creation patterns හා object-creational patterns වේ. class-creation patterns වලදී instantiation ක්‍රියා වලියේදී inheritance එක එලදායිව යොදාගැනීම ගැන සලකා බැලෙන අතර object-creational patterns වලදී කාර්ය අවසන් කර ගැනීමට එලදායි ලෙස delegation (පැවරීම් ) සිදුකිරීම සලකා බැලේ.

Structural patterns

මෙම pattern වර්ගය class එකේ හා object එකේ සංයුතිය පිළිබදව වේ. මෙය ද ඉහත  patterns එක මෙන් කොටස් දෙකකට බෙදේ. එවා Structural class-creation patterns එක හා Structural object-patterns. අතුරුමුණත් තනා ගැනීමට  inheritance භාවීතා කිරීම Structural class-creation patterns වලින් සිදුකරන අතර අලුත් functionality ලබා ගැනීමට objects තනා ගන්නා විදිහ Structural object-patterns වලදී සලකා බැලේ.

Behavioral patterns

මෙම pattern වර්ගය class එකේ  object වල සන්නීවේදනය පිළිබදව වේ. ඒ කියන්නේ object අතර එලදායි ලෙස සන්නීවේදනය  කරන ආකාරය හා ඒවා අතර වගකීම් පැවරීම් ආදීය ගැන සලකා බැලේ.

Design Pattern හි වැදගත්කම



ඇත්ත නම් ඔබට Design Pattern එකක් වත් නොදැන වසර ගණනාවක් ක්‍රමලේඛකරුවකු ලෙස වැඩ කළමනාකරණ කරනවා විය හැක. දැනටත් බොහෝමයක් මිනිසුන් එසේමයි. එවැනී අවස්ථා වලදී ඔබ කෙසේ හෝ Design Pattern ගැන නොදැන වුවත් සමහර Pattern ගොඩනගා ගන්නවා.ඉතින් ඇයි ඔවුන්(ක්‍රමලේඛකරුවන්) වේලාවන් වැයකරමින් මේවා හදාරන්නේ?

පළමු වැන්න නම්, Design Pattern කියනනේ අත්හදා බලා පරික්ෂාවට ලක් කෙරූ ක්‍රමලේඛ Design කරන විට එන ගැටලු විසදන මෙවලම් කට්ටලයකි. එවැනී ගැටලු මුණනොගැසුනත් එය දැන සිටීම ප්‍රයෝජනවත් මන්ද එය උගන්වනවා අපට object-oriented design හි මූලධර්ම යොදා ගනිමින් සියලූම ගැටලු විසදන ආකාරය.

දෙවැනි කාරණය නම්, Design patterns එක ඔබට හා ඔබේ කණ්ඩායමේ සමාජිකයන් අතර වඩා කර්යක්ෂමව සන්නිවේදනය කිරීමේ භාෂාවක් ලෙස භාවිතා කළ හැකි වීම. ඒ කියන්නේ solution(විසදුම) එක ගැන විස්තර කර කර දෙනවට වඩා patterns නම විතරක් කිවීමෙන් පමණක්  ප්‍රමණවත් වීම. 
උදාහරණයක් ලෙස ඔබ කියන්නේ "මෙයට singleton pattern එක දැම්මානම් හොදයි" කියාය. මෙය මීට වඩා විස්තර කරන්න අවශ්‍ය නැහැ. එවිට අනෙක් සමාජිකයන් ඔබේ යෝජනාව පිළිබදව අදහස ඉන් ලැබෙනවා.

Friday, 8 March 2019

Design Pattern හි ඉතිහාසය


මෙම Pattern සංකල්පය මුලින්ම පෙන්වා දුන්නේ Christopher Alexander විසින් 1977/78 දී රචිත A Pattern Language: Towns, Buildings, Construction නම් කෘතියෙනි. මෙම ග්‍රන්ථයෙන් නාගරික පරිසර නිර්මාණය පිළිබද භාෂාවක් ගැන කියැවේ. මෙම භාෂාවේ එක් එක් ඒකකයන් Pattern නම් වේ. මෙම කෘතියෙන් ගොඩනැගිල්ලේ ජනේල කොපමණ උස් විය යුතුද, ගොඩනැගිල්ලේ තට්ටු කීයක් විය යුතුද,  වටපිටා වේ තණකොළ කොටස කොපමණ විශාල විය යුතුද ආදී විය යුතු දේ ගැන කියැවේ.

මෙම අදහස ලබාගත් Erich Gamma, John Vlissides, Ralph Johnson, හා Richard Helm විසින්  Design Patterns: Elements of Reusable Object-Oriented Software නම් ග්‍රන්ථය 1995 දී ප්‍රකාශයට පත් කරන ලදී. මෙහිදී ඔවුන් design patterns සංකල්පය programming වලට යොදා ගෙන තිබුණි. මෙම ග්‍රන්ථයේ Pattern වර්ග 23 ක් ගැන කියැවේ. මෙය සීග්‍රයෙන්  ජනතාව අතර විකිණි තිබු අතර එය “the book by the gang of four” නමින් හැදින්විය. පසුව එය “the GOF book” යන කෙටි නමින් ද හැදින්විය.

Design pattern හදුනාගනිමු


Design pattern යනු  software design කරද්දී පොදුවේ ඇතිවන ගැටලු සදහා වන විසදුම් වේ. මේවා  ක්‍රමලේඛ design කරද්දී ඔබේ කේත වල  නිතර නිතර ඇතිවන ගැටලු වලදී වෙනස්කම් කර විසැදිය හැකි පෙර නිර්මිත සැලසුම් මෙන් පවති.

ඔබට ගැලපෙන pattern එක සොයා ගැනීමට හෝ සොයාගත් විසදුම ක්‍රමලේඛයට උකහා ගැනීමට නොහැකි වුවහොත් එයට විසදුමක් ලෙස off-the-shelf functions හෝ libraries යොදාගත නොහැක. Design pattern යනු කොඩ් කෑල්ලක් නොවේ සුවිශේෂි ගැටලුවක් විසදා ගැනීමට ඇති පොදු සංකල්පයකී. ඔබට pattern එකේ විස්තර අනුගමනය කර ඔබට ඔබේම ක්‍රමලේඛයට ඔබින විසදුමක් ගොඩනැංවිය හැක.

මෙහි pattern හා algorithms දෙක පටලවා නොගන්න.  මේ සංකල්ප දෙකම programming වලදී හදුනාගත් ගැටලු සදහා solutions ලබා දේ. algorithms සෑම විටම අරමුණක් සපුරා ගැනීමට පැහැදිලි action සමූහයක් ලබා දෙන අතර pattern එකක් කියන්නේ විසදුම පිළිබද වඩා ඉහළ මට්ටමේ(high level) විස්තරයක් වේ. කමලේඛයන් වෙනස් වුවත් ඒවායේ කේතයන්හි pattern එක සමාන විය හැක.

algorithms එක හරියට cooking recipe එකක් වගේ එහි goal එක achieve කරන්න පියවරයන් පැහැදිලිව දක්වා තිබේ. අනෙක් අතට pattern එක blueprint එක වගේ, එහි ප්‍රතිඑලයන් හා අංගයන්  මොනවාද කියා අපට දකින්න පුලුවන් නමුත් එය ගොඩානැංවීමේ නිවැරදී පියවරයන් ඔබට බාර වේ.

Pattern එකක අඩංගු වන දෑ

බොහෝමයක් pattern විධිමත් ලෙස විස්තර කෙරුණූ නිසා මිනිසුන්ට විවිධ තත්ව යටතේ ඒවා ප්‍රතිනිෂ්පාදනය කළ හැක.
මෙහි ඇත්තේ pattern එකේ විස්තර නිරූපනය කරන අංශ කිහිපයකි


  • Intent- මෙහිදී problem එකයි solution එකයි පුලුල්ව විස්තර කරයි.
  • Motivation - මෙහිදී තවදුරටත් problem එකයි solution එකයි පුලුල්ව වැඩිපුර විස්තර කරයි.
  • Structure - මෙහිදී pattern එකේ class වල ආකෘතියන් හා ඒවා එකිනෙක සම්බන්ධ වන ආකාරය පෙන්වයි.
  • Code example- මෙහිදී  වඩා ධාරණය වීම පිණිස solution  එක ප්‍රකට(සෑම දෙනකුම බාවිතා කරන) ක්‍රමලේඛකයකින් නිරූපනය කරයි.


දත්ත ආරක්ෂාව - MD2 Hash ඇල්ගොරිතමය

දත්ත වල ආරක්ෂාව සදහා භාවිතා කරන සුවිශේෂී ආරක්ෂා ක්‍රමයක් ලෙස දත්ත විකේතනය, විකේතනය කිරීම සිදුකරයි. දැනට දත්ත වල ආරක්ෂාව වෙනුවෙන්  ඇල්ගොරිතම බොහෝමයක් තිබෙනවා ඉන් එකක් තමා MD2 Hash ඇල්ගොරිතමය. මෙය  Message-Digest ඇල්ගොරිතමයකි. එය cryptographic hash function එකකි.

මෙය 1989 දී Ronald Rivest විසින් ගොඩනගන ලද්දකි. මෙය  Java හි java.security කියන Java library package එක තුළ අඩංගු වේ. මෙය  8-bit පරිගණක වලට යෝග්‍යය වේ. ජාල කරණයේ දී RFC 1319 යන්නේ නිරූපණය කරයි. මෙය public key එකක ව්‍යුහය විදිහට භාවිතා විය. 2014 දී මෙම ඇල්ගොරිතමය ආරක්ෂිත නොවන ඇල්ගොරිතමයක් ලෙස සලකන ලදී.

Input : hello world

Output : d9cce882ee690a5c1ce70beff3a78c77

java.security කියන package හි ඇති MessageDigest යන Class හි Message-Digest ඇල්ගොරිතමයන් බොහෝමයක් පවති.
ඒවා නම් MD2, MD5, SHA-1, SHA-224,SHA-256,SHA-384, SHA-512 ආදීයයි.


Wednesday, 6 March 2019

Java හි Static keyword එක හදුනා ගනිමු

ප්‍රධාන වශයෙන් මෙම  Static keyword එක යොදා ගන්නේ මතක කළමනාකරණය (memory management) සදහාය. මෙය variables, methods, blocks හා nested class වලට දැමිය හැක.

Static variables

variables එකක් ඉදිරියෙන් Static දමා Static variables සදා ගැනේ. එය class variable නමින් ද හදුන්වයි.  බොහෝ විට යෙදෙන්නේ objects සියල්ලටම පෙදුවේ භාවිතා කළ හැකි property නිර්මාණය කිරීම සදහාය.
උදාහරණ- 

  • සේවකයින් වැඩ කරන ආයතනයක නාමය :- 
සේවකයන්ට Employee කියන  class එක බාවිතා කරලා අදාළ එක්කෙනාට වෙන වෙනම objects සාදා ගත හැක. ඒවා තුළ තිබෙන නම, තනතුර, වයස  පුද්ගලයාගෙන් පුද්ගලයාට වෙනස් වේ. නමුත් ඔවුන් සිටින්නේ එකම ආයතනයක නම් object එකෙන් object එකට ආයතන නාමය දැමීම අවශ්‍ය නොවේ. මෙය පොදු variable එකක් නිසා Static කළ යුතුයි.

මෙමගින් අනවශ්‍ය මතකය භාවිතය අවම වේ.

  1. class Employee{  
  2.    int empno;  
  3.    String name;  
  4.    String company="Google"; 
  5.    public Employee(int empno, String name){
  6.       this.empno=empno;
  7.       this.name=name;
  8.    }
  9. }  

ඉහත උදාහරණය සැලකුවහොත් company එක Static වී නැහැ. මෙයින් objects සිය දහස් ගණනක් සෑදීමෙන් object එකෙන් object එකට company කියන variable එකේ දත්තය මතකයේ සිය දහස් ගණනක් සෑදීමෙන් අනවශ්‍ය ඉඩක් ලබා ගෙන ඇත.
  1. class Employee{  
  2.    int empno;  
  3.    String name;  
  4.    static String company="Google"; 
  5.    public Employee(int empno, String name){
  6.       this.empno=empno;
  7.       this.name=name;
  8.    }
  9. }  
ඉහත උදාහරණය සැලකුවහොත් company එක Static වී ඇත. මෙයින් objects සිය දහස් ගණනක් සෑදීමෙන් object එකෙන් object එකට company කියන variable එක සෑදෙන්නේ heap memory එකේ තැනක එක් වරක් පමණි. object කොපමණ තිබුණත් ඒ සියල්ලම company එක ලබා ගන්නේ මතකයේ එක් තැනකිනි.

Static Methods

Methodsඑකක් ඉදිරියෙන් Static දමා Static Methods සදා ගැනේ. එය class Methods නමින් ද හදුන්වයි. 

  • මෙය object එකකට වඩා class එකට අයිති වේ.
  • මෙම Static method එකක් class එකේ instance එකක් නොසාදා ලබාගත හැක.
  • static method එකට static variable එකේ දත්ත වලට access කරලා දත්ත වෙනස් කළ හැක.
උදාහරණය

  1. class Employee{  
  2.    int empno;  
  3.    String name;  
  4.    static String company= "ITS";  
  5.    
  6.    static void change(){  
  7.       college = "BBDIT";  
  8.    }  
  9.   Employee(int r, String n){  
  10.      empno= r;  
  11.      name = n;  
  12.   }  
  13.   void display(){System.out.println(rollno+" "+name+" "+college);}  
  14. }  
  15. public class TestStaticMethod{  
  16.    public static void main(String args[]){  
  17.       Employee.change();
  18.       Employee e1 = new Employee(111,"Karan");  
  19.       Employee e2 = new Employee(222,"Aryan");  
  20.       Employee e3 = new Employee(333,"Sonoo");  
  21.       e1.display();  
  22.       e2.display();  
  23.       s3.display();  
  24.    }  
  25. }  

static method වල සීමාවන් හා නීතී

  • static method වලට static නොවන variable වල දත්ත වලට ප්‍රවේශ වීම හෝ  static නොවන method වලට සෘජුව ප්‍රවේශ විය නොහැක.
  • this හා super වැනි දේ මේ තුළ තිබිය නොහැක.
ක්‍රමලේඛය මෙම නීතී පිළිනොපදී නම් Compile Time Error සිදුවිය හැක.

Java තුළ ඇති main method එක ද static method එකකී. මෙය static නොවන method එකක් වුවහොත් අනිවාර්යෙන් object එකක් පළමුව සාදා ගෙන main method එක call කළ යුතුයි. මෙහිදි අමතර මතකයක් වෙන්කරීමේ දී ඇතිවන දෝෂ හටගනී. main method කියන්නේ Java program එකට JVM(Java Virtual Memory) එකට ඇතුල් වන මාර්ගයයි. JVM එක main method එක call කරලා Java program දියත් කරවයි.

Static Blocks

මෙය static data member නිරූපනය කීරීමට යොදා ගැනේ. class එක load කරන වෙලාවේ ඇති main method එකට මෙම Static Blocks ක්‍රියත්මක වේ.

  1. static{
  2.    System.out.println("static block is invoked");
  3. }
JDK 1.6 ට පෙර තිබු Java සංස්කරණ වල ක්‍රමලේඛයේ main method එක නොමැතිව Static Blocks විතරක් තිබුණද ක්‍රියත්මක විය. නමුත් JDK 1.7 නිසා main method එක අනිවාර්යය එකක් විය.

Static Class

මෙය බොහෝ විට inner class එකකි. මන්ද Java වලදී top-level static classes සෑදීය නොහැකි බැවිනී. මෙය class එක group කිරීමේ ක්‍රමයකි.

  1.  public class CarParts { 
  2.     public static class Wheel {
  3.        public Wheel() {
  4.           System.out.println("Wheel created!");
  5.        }
  6.    }

  7.    public CarParts() {
  8.        System.out.println("Car Parts object created!");
  9.    }
  10. }
මෙම උදාහරණය caveofprogramming.com එකෙන් ගත්තේ මෙහි ධාවන ක්‍රමලේක පහත පරිදි වේ.

  1. public class App {
  2.     public static void main(String[] args) {
  3.         CarParts.Wheel wheel = new CarParts.Wheel();
  4.     }

  5. }
මෙම static class එකට එය අඩංගු වූ class එකේ static data members ලට ප්‍රවේශ වියහැකි අතර static නොවන data members ලට ප්‍රවේශ විය නොහැක. 

මෙහිදී  inner class එක static class එක එකක් නොවුනොත් ඒවා ඉහත අකාරයට group කළ නොහැකි අතර ඒවායේ instances වෙන වෙනම සදාගත යුතුයි.

CarParts.Wheel wheel2 = new CarParts().new Wheel();

මෙහි ඉහත  inner class එකක් වන wheel inner එක static බව ඉවත් කර ඇති අවස්ථාව දැක්වේ.