எழில் : முதல் பக்கம் வடிவமைப்பு

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

small-ezhil-splash-5
படம் 1: எழில் மொழி முதல் பக்கம் – செயலியில் தொடங்குதல்.
எழில் – தமிழ் கணினி மொழி

“தமிழில் நிரல்படுத்தி கணிமை பழகுவோம்!” என்பது புதிய கொள்கை

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

நன்றி

-முத்து

 

 

கணிமையில் மகளிர் பங்களிப்பு – சர்வதேச மகளிர் தினம்

ezhil_March08_2017
படம் 1: எழில் திருத்தி ‘எழுதி’ இல் ‘பெர்னோல்லி எண்கள்’ (Bernoulli Numbers) என்பதை எளிதாக இயக்கி பயன்படுத்தலாம் என்று காட்டும்.

சர்வதேச மகளிர் தினம்க அன்று கணிமையில் மகளிர் பங்களிப்பு பற்றி ஒரு சிறிய கட்டுரை.

கணினி நிரலாக்கமே ஒரு உயர்குடி பிரிட்டிஷ் பெண்  அடா லவ்லேஸ்  தனது வாத்தியார் சார்லஸ் பபேஜ் அவரது “analytical engine” ஆதி-கணினியில் “Bernoullli Numbers,” (பெர்னோல்லி எண்கள்) கணக்கிட எழுதியதால் உருவானது. ஆனால் இவருக்கோ காலம் அப்படி எழுதிய நிரல் ஓடவே இல்லை – ஏன் என்றால் அந்த கணினியின் திறன் போதவில்லை. இது ஏற்கனவே இந்த வலைப்பதிவில் எழுதினேன்.

அடுத்த கட்டமாக கணிமையில் முக்கியமான “compiler” என சொல்லக்கூடிய “தொகுப்பி”-யை உருவாக்கியவர் அமெரிக்க பெண் கிரேஸ் ஹாப்பர் (Grace Hopper).

இவை இரண்டும் கணிமையில் டூரிங் முன் (Before Turing) அடா லவ்லேஸ், மற்றும் டூரிங் பின் (After Turing) கிரேஸ் ஹாப்பர் என்று சொல்லும் அளவிற்கு பெரிய சாதனைகள். கணிமை பெண்களினாலும் ஆனது, இல்லையேல் பேங்கினால் ஆனதா ? நீங்களே சொல்லுங்கள்.

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

இன்று எழில் மொழியை பேக்கஜ் செய்யும் பணியில் ஆகிய முன்னேற்றம் பற்றி ஒரு மேம்பாடு செய்யப்பட்ட திரை-சேமித்த-படம்; இதில் ‘பெர்னோல்லி எண்கள்’ (Bernoulli Numbers) என்பதை எளிதாக இயக்கி பயன்படுத்தலாம் என்று காட்டும்.

எழில் எங்கே போகிறது ?

ezhil_March1_2017.png
படம் :  திருத்தியுடன்  எழில் மொழி  செயலி; நிரல் இடது பக்கம், இயக்கிய வெளியீடு வலது பக்கம். சாளரத்தின் கீழ் இயக்கிய விவரம். இந்த செயலி எழில் படிக்க உதவும்.       (c) 2017 எழில் மொழி அறக்கட்டளை.

 

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

“ஆளே இல்லாத கடையில ஏண்டா டீ ஆத்தூர்?” நக்கலுக்கு தமிழ் எந்த மொழியிர்க்கும் சளச்சது இல்லை. சிலர் நேரில் என்னை, சற்று வெகுளி தனமாக – இங்கு அமெரிக்காவில் முதல் தலைமுறை தமிழர் (எழுதவோ, நல்லா பேசவோ சாகஜமாக வராதவர்) – “ஏன் நீங்கள் தமிழில் மென்பொருள் ரீதியில் செயல்படுகிறீர்கள்” என்று கேட்டார்; என்னமோ செவ்வாயில் குடிபுகுவது போல நான் செய்யும் வேலைகள் எனது நண்பர்களிடமும், முகம் அறியா இணைய நபர்களிடமும் தெரியும். தமிழில் செயல்படுவது எனது சுய உறிமை, சில நேரம் பெருமை, தன்னிரக்கம், அகராதி என்றும் பலர் கூறலாம்; ஆனால், அதில் சமூக பொறுப்பு, அறிவியலாளரின் சமூக பார்வை, அறிவியல் மொழி வளர்ச்சி, தேடல், தொழில்நுட்ப கண்டெடுப்பு, தியானம் போன்ற நுட்ப்பமான  விஷயங்களை மறந்து விடுவார்கள். சில நேரங்களில் எழில் எங்கே போகிறது என்று எண்ணுவேன்; ஆனால் முதலில் அந்த எட்டு வயது குழந்தைகள் நிரலாக்கத்தை தமிழ் வழி கற்பிக்கும் பொது தமிழ் கணிமை உலகம் நாம் அனைவரும் கூடி கண்ட வெற்றி என்பதில் ஐயமில்லை.

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

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

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

எழில் மொழியில் உள்ள “installer” திரட்டியில் இவை இடம் பெறவேண்டும் என்று எனக்கு தற்சமய நிபந்தனை:

  1. Platform Support: இயங்கு தளங்களில் வேலை செய்ய வேண்டும்:
    1. Windows 64, 32 bit
    2. Linux 64
  2. திரட்டியில் வேண்டியவை : Installer package
    1. எழில் மொழி திருத்தி ; இதனை ‘ezhuthi’ (எழுதி) என்று pygtk-இல் இங்கு இங்கு வடிவமைத்து வருகிறேன்.
    2. எழில் மொழி ezhil module python library
    3. தமிழில் நிரல் எழுது புத்தகம்
    4. தமிழில் நிரல் எழுது புத்தகம் பயிற்சி நிரல்கள்
    5. மேல் நிலை எழில் எ.கா. உதாரணங்கள்
    6. பாடம், ஆசிரியர்களுக்கு உண்டான காணொளி, கேள்வி தாள், வினா-விடை பாட திட்டம்.
  3. பரிசோதனைகள்
    1.  மொத்தமாக நிறுவுதல் பரிசோதனை (அணைத்து தளங்களிலும்)
    2. நிரல் எழுதுவது
    3. கோப்புகளை திறப்பது, இயக்குவது, சேமிப்பது
    4. தனியன்க்கி பரிசோதனைகள் (automatic tests)
    5. பயனர் நடப்பு பரிசோதனை (interactive tests)
  4. வெளியீடு
    1. md5 checksum, zip/exe/tgz package generation and upload to networks
    2. release notes, credits, contribution notes, credits to open-source software

ஒரு தவம், வரம் மறக்கப்படாது – முயற்சி திருவினையாக்கும். கை கூடுவோம், வாருங்கள்.

 

தமிழ்கணிமை வரலாற்று பார்வை, தமிழ் கற்பித்தல் சிந்தனைகள் – திரு. முத்து நெடுமாறன்

murasu_muthu_nedumaran.png
திரு. முத்து நெடுமாறன் (கலிபோர்னியா : 2016, உலக தமிழ் கற்றல் மாநாடு)

முரசு அஞ்சல் உருவாக்கிய திரு. முத்து நெடுமாறன், அவர்கள் பார்வையில் தமிழ் கணிமையின் வளர்ச்சி பற்றிய வீடியோ இங்கு (36 நிமிடங்கள்).

 

இரு கிளை மரம் தரவு உருவம் – (binary tree data structure)

கணிமையில் நமது மாறிலி (variables) மற்றும் தரவு மதிப்புகளை (data values) வரிசை படுத்தியோ அல்லது சீரற்ற வழியில் ஒரே மாதிரி அடுக்கி தரும் தரவு உருவம்  வகையில் (data structure) ஒன்று ‘இரு கிளை மரம்’ (binary tree)- இதனை இரட்டித்த மரம் என்றும் சுருக்கி சொல்லலாம்.

மரம் – நிஜமாவா ?

எண் ‘2’-ஐ  வேர் என்றும், ‘5’, ’11’, ‘4’, ‘2’ என்ற எண்கள் இலைகள் ஆகவும் இந்த இரட்டித்த மரம் அமைந்திருக்கு.

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

  1. வேர் (root)
  2. கிளை (branch)
  3. இலைகள் (leaves)

உள்ளதோ அதே போன்று இந்த இரட்டித்த மரம் தரவு வகையில் இதற்கு இணையான (isomorphic) அம்சங்கள் இருக்கு. இந்த பதிவில் இதை பார்க்கலாம்.

இரட்டித்த மரம் நடுவோம் – கட்டுமானம்

மேல் கண்ட படத்தில் உள்ள மரத்தை எப்படி உருவாக்குவது ? இது சுலபம்.

மரத்தின் எல்லா மதிப்புகளையும்  நுனிகள் (nodes) என்று பெயரிடுவோம். இரட்டித்த மதத்தின் குணம் என்ன என்றால், நுனிகளில் இரண்டு கிளைகள் இருக்கும் – வலது (right) நுனி, இடது (left) நுனி, மற்றும் நுனியின் மதிப்பு (value).

முதலில் வேர் நுனி என எண் ‘2’ நியமிக்கவும். இந்த வேர் நுனியிர்க்கு இரண்டு வலது கிளை நுனி (right node) என எண் ‘5’-ம், இடது கிளை நுனி (left node) என எண் ‘7’-ம் அமைக்கவும்.

அடுத்து,  நுனி 7 என்பதில் வலது நுனி 6, இடது நுனி 2 எனவும் இணைக்கவும். நுனி 5-இல் வலது நுனி 9, மற்றும் 9-இன் இடது நுனி 4 எனவும் அமைக்கவும்.

கடைசியாக நுனி 6-இன் வலது புரம் 11 எனவும் இடது புரம் 5-உம் அமைக்கவும்.

இதனை போல் தொடர்ச்சியாக செய்தால் நமக்கு கணினி நினைவில் ஒரு ‘இரட்டித்த மரம்’ என்ற தரவு  உருவத்தை நீங்கள் செய்யலாம்.

விளக்க நிரல் எடுத்துகாட்டுகள் 

இந்த பதிவில் உள்ள நிரல்களை Github-இல் இருந்து இயக்கி பாருங்கள்.

பைதான் மொழியில், இதனை கீழ்கண்டவாறு செய்யலாம்:

root = make_tree(2)
node5 = make_tree(5)
node7 = make_tree(7)
set_right(root,node5)
set_left(root,node7)

node9 = make_tree(9)
node4 = make_tree(4)
set_right(node5,node9)
set_left(node9,node4)

node2 = make_tree(2)
node6 = make_tree(6)
set_right(node7,node6)
set_left(node7,node2)

node11 = make_tree(11)
node5 = make_tree(5)
set_right(node6,node11)
set_left(node6,node5)

எழில் மொழியில், இதனை கீழ்கண்டவாறு செய்யலாம்:

நிரல்பாகம் மரம்_செய்( அளவு )
# left, right,value
ம = {“இடது_நுனி”: [],”வலது_நுனி”: [], “மதிப்பு”:அளவு}
பின்கொடு ம
முடி

நிரல்பாகம் வலது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி[“வலது_நுனி”] = நுனி
முடி

நிரல்பாகம் இடது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி[“இடது_நுனி”] = நுனி
முடி

# இரட்டித்த மரம் நடுவோம் – கட்டுமானம்
வேர் = மரம்_செய்(2)
நுனி5 = மரம்_செய்(5)
நுனி7 = மரம்_செய்(7)
வலது_நுனி_செய்(வேர்,நுனி5)
இடது_நுனி_செய்(வேர்,நுனி7)

நுனி9 = மரம்_செய்(9)
நுனி4 = மரம்_செய்(4)
வலது_நுனி_செய்(நுனி5,நுனி9)
இடது_நுனி_செய்(நுனி9,நுனி4)

நுனி2 = மரம்_செய்(2)
நுனி6 = மரம்_செய்(6)
வலது_நுனி_செய்(நுனி7,நுனி6)
இடது_நுனி_செய்(நுனி7,நுனி2)

நுனி11 = மரம்_செய்(11)
நுனி5 = மரம்_செய்(5)
வலது_நுனி_செய்(நுனி6,நுனி11)
இடது_நுனி_செய்(நுனி6,நுனி5)

# மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( வேர், ம_வரிசை )
பதிப்பி ம_வரிசை

மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது :

கேள்வி : “வேர் நுனி மட்டும் கிடைத்தால் மரம் நுனிகளை அனைத்தயும் வரிசையில் எப்படி எடுப்பது ? ”

இது ஒரு சராசரியான செயல்பாடு; எப்போது இரட்டித்த மரம் என்றாலும் உடனடியாக அந்த இடத்தில் “அனைத்து நுனிகளை எடுக்க” என்ற செயல் புரியும் தேவை உங்கள் கணிமை programming-இல் வந்து விடும்.

சரி இதன் கேள்விக்கு விடை ஒரு induction வழியாக பார்க்கலாம்;

  1. நிலை : மரத்தில் வேர் மற்றும் உள்ளது – (மொத்தம் 1 நுனி)
    • வேர்[“மதிப்பு”] மட்டும் அணுகினால் போதும்.
    • நமது மரம் படத்தில், 2
  2. நிலை : மரத்தில் 2 அல்லது 3 நுனிகள் மட்டும் உள்ளன.
    • வேர்[“இடது_நுனி”][“மதிப்பு”],   வேர்[“மதிப்பு”], வேர்[“வலது_நுனி”][“மதிப்பு”] என்ற வரிசையில் நுனிகளை சிந்திப்போம்
    • நமது மரத்தில், 7, 2, 5 என்றும் காண்போம்
  3. நிலை : மரத்தில் 4,5,6,7 அல்லது 8 நுனிகள்
    1. இரண்டாம் படியில் வேர் என்ற மாறிலிக்கு பதில் வேர்[“இடது_நுனி”], வேர்[“வலது_நுனி”] என்றும் கூடுதலாக தொடக்கத்தில் மாற்றத்தை செய்து செயல் பட்டால் இது முடிந்து விடும்

ஆகவே நமது செயல்முறை வழி (algorithm) என்பது இதன்போல் காட்சி அளிக்கும்:

வரிசையில் அணுகு ( உள்ளீடு : மரம் வேர்_நுனி )

படி 1: மரத்தின் இடது பக்கத்தை வரிசையில் அணுகு, எடு

படி 2: தன்னிலை வேர்_நுனி மதிப்பை எடு

படி 3: மரத்தின் வலது பக்கத்தை வரிசையில் அணுகு, எடு

இதுவே recursion சார்ந்த செயல்முறை வழி. இதனை ‘inorder traversal’ (நேர் வரிசையில் அணுகுதல் என்றும் சொல்லலாம். இது எப்படி செயல்படுகிறது என்பதை ஒரு காகிதத்தில் நீங்களே எழுதி பார்த்தால் இன்னமும் எளிமையாக இருக்கும்.   காணொளிகளை மற்ற மென்பொருள் பறிச்சியாளர்கள் youtube-இல்பார்க்கவும் பதிவித்தார்கள்.

எழில் மொழியில் இந்த நேர் வரிசை அணுகல் என்பதை நிரல்க்கி பார்த்தால்,

# walk in in-order; ப – பட்டியல் என்ற மாறிலி (ப- variable is a list)
நிரல்பாகம் வரிசையில்_எடு(வேர்,ப)
@( வேர்[“இடது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“இடது_நுனி”] , ப)
முடி

பதிப்பி “%d,”, வேர்[“மதிப்பு”]
பின்இணை( ப, வேர்[“மதிப்பு”] )

@( வேர்[“வலது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“வலது_நுனி”] , ப)
முடி

பின்கொடு ப
முடி

பைதான் மொழியில் இதனை, inorder traversal என்றும் எழுதலாம்

# walk in in-order
def walk_inorder(root,listval):
if root.left:
walk_inorder(root.left,listval)
#print(“%d, “%root.value)
listval.append(root.value)
if root.right:
walk_inorder(root.right,listval)
return

இதே அணுகுமுறையை, வலது, இடது மாற்றியும் செய்தால் அதற்கு மற்ற விளைவுகள் உண்டு; இதனால் மரத்தின் நுனிகளை அணுக மூன்று முறைகள் சொல்லுவார்கள்,

  1. நேர் வரிசை அணுகல் – inorder traversal
    • அணுகும் வரிசை: இடது, வேர், வலது
  2. தன் முன் வரிசை அணுகல் – pre-order traversal
    • அணுகும் வரிசை: வேர்இடது, வலது
  3. தன் பின் வரிசை அணுகல்  – post-order traversal
    • அணுகும் வரிசை: இடது, வலது, வேர்

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

தகவல் தொழில்நுட்பம் துறையில் தகவல் பாதுகாப்பு – (data privacy on Internet today)

தகவல் தொழில்நுட்பம் துறையில் தகவல் பாதுகாப்பு

இணையத்தில் உங்களது தகவலை பாதுகாப்பது

ஆசிரியர் : முத்து அண்ணாமலை

இடம் : பாஸ்டன் (மே, 19, 2016)

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

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

சமிபத்தில் ஆப்பில் நிறுவனத்தை FBI நீதிமன்றத்தில் (Apple vs FBI) வழக்கு ஒன்றை தொடர்ந்தது. காரணம் அமெரிக்காவில் ஊடுருவிய தீவிரவாதிகள் தாக்குதலில் உயிர் சேதத்தின் காரணமாகவும், உள்நாட்டின் பாதுகாப்பின் காரணமாகவும் அவர்களது iPhone திரன்பேசி (Smart Phone) FBI விசாரணை மூலம் அவர்கள் ஆலோசனை செய்யமுடியவில்லை. இதற்கு ஆப்பில் நிறுவனத்தின் உதவி தேவை பட்டது. ஆனால், எங்கு FBI நிறுவனத்தின் தேவைகளை பூர்த்தி செய்ய குறுக்கு வழி மென்பொருள் தயாரிப்பதில் (ஆப்பில் உடைய) தங்களது வாடிக்கையாளர் தகவல் பாதுகாப்பை கோட்டை விட்டு விடுவோமோ என்ற பயத்திலும் பொருளாதார நோக்கிலும் FBI தொடர்ந்த வழக்கினை நீதி மன்றத்தில் சந்திக்க தயாரானது. FBI கடைசியாக ஆப்பில் உடைய உதவி இன்றி வெளி அமைப்புகள் உடன் “முதல் நாள் பலவீனம்” (zero day hack) என்ற முறையில் இந்த விசாரணைக்கு தேவைப்பட்ட iPhone உள்ளே செல்ல முடிந்தது.

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

சென்ற ஆண்டு (2015) இந்தியாவில் BSNL நிறுவனம் பகிரங்கமாக இரண்டு டசன் வலை தளங்களை அணுக முடியாத வாறு தடை செய்தது. இந்த பட்டியலில் github.com போன்ற சமூக திறவூற்று மென்பொருள் தளங்களும், இவற்றை போன்றவையும் ஆபாச பரப்பும் தளங்களுண்டன் சேர்த்து ஒர குட்டையில் தடை செய்யப்பட்டது. இது தகவல் பாதுகாப்பின் மீரல் என்று பலர் குரலெழுப்பி, பின்னர் BSNL நிறுவனம் இவற்றை DNS-தடையில் இருந்து விடுவித்தது.

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

இணையம் 1960-ஆம் பாத்தாண்டில் DARPA நிறுவனம் ARPANET என்ற ஒரு பரிசோதனை ஆறாய்சியை தொடர்ந்த விளைவுகள் தான் இன்று இணையம் எனவும், CERN நிறுவனத்தின் 1990-இல் உருவாகிய WWW – உலாவும் வலை தளங்கள் என்று அமைந்துள்ளது [மேற்கோள்]. முக்கியமாக ARPANET-இன் பங்களிப்பு இரண்டு வேறுபட்ட கணிபொறிகள் ஒரு பொதுவான வலை தொடர்பு (1960 களில் இது தொலைபேசி வலை என்றே இருந்தது) மூலம் எப்படி தகவல்களை பரிமாற்றம் செய்துகொள்ளலாம் என்ற கடினாமான ஒரு கேள்விக்கு, TCP/IP தொழில்நுட்பத்தை உருவாக்கி விடையளித்து. WWW என்ற உருவாக்கம் 1990-களில் இந்த அடித்தளத்தை கொண்டு இணையத்தை சுலபமாக பயன்படுத்தும் வகையில் அமைந்தது.

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

இணையம் என்பது தனி ஒரு இடத்தில் இல்லை; இது இந்திய எல்லை கோட்டை கனியாகுமரி கடற்கரையில் தேடுவது போல மணலும் கடலும் சேர்ந்து ஒரு தொடர்ச்சியாக உள்ளது எல்லை கோடு, ஆனால் அது முற்றிலும் ஒரு மனதில் உருவாக்கிய யோசனை, பூமியில் எல்லை கோடுகள் கிடையாது. சுமார் அதே போல இணையம் செயல்படுவதற்கு உலகில் உள்ள அணைத்து கணினிகளும் ஒரு தொலைபேசி நிலையம் (telephone exchange) போன்ற DNS, IP-router வழிகாட்டி சேவைகளின் மூலம் உலகமெங்கும் கருத்து பரிமாற்றம் செய்து கொள்ளும் வகையில் வடிவமைகப்பட்டது.

இந்த வகையில் அமைந்துள்ள இணையத்தை ஒரு தபால் பெட்டி, அஞ்சல் சேவை போலவே உள்ளது என்றும் உணரலாம். ஒரே வேற்றுமை தபால் 3-4 நாட்கள் ஆகும் பொய் சென்றடைய, ஆனால் உங்களது இணையம் வழி உலாவுதல் optical-fiber cable மூலம் சில நொடிகளில் கண்டங்களையும் தாண்டும். இது பல தொழில் நுட்பங்களால், பல தலைமுறைகளால் ஆன சாத்தியம்.

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

சரி; இவ்வளுவுக்கும் மேல எப்படி இந்த பஜாரில் காசையும் பொருளையும் தொலைக்காமல் நாம் தொழில் செய்வது ? இதற்குதான் பல காப்பு கட்டவேண்டும்:

Amazon அல்லது Flipkart என்றும் இணையத்தில் நீங்கள் பொருள் வாங்குவதற்கு அல்லது எங்கேயும் இணையத்தில் கணக்கு விவரங்களை கொடுபதற்க்கும் முன்பே ‘https’ நெறிமுறை வழியாகவே செயல்படவும்; அல்லது ஒரு பஜாரில் நீங்கள் உங்களது இரகசியங்களை கூறி பேரம் பேசும் நிலையில் சென்றுவிடுவீ ர்கள்.

விடியோ காணும் தளங்களிலும் செல்லும்போது உங்கள் வலை உலாவியில் ஒரு “Ad-Block” நீட்சியை செர்துகொள்ளவேண்டும். இதன் மூலம் உங்களுக்கு தேவையில்லாத, உங்கள் இணைய தடங்களை வெளிச்சமிட்டு (உங்கள் விருபதிருக்கு மாறாக) தொடரும் “Cookie” அடையாள அட்டைகளை கொள்வதை நீங்கள் தவிற்கலாம்.

மேலும் கூடுதல் பாதுகப்பிர்க்கு நீங்கள் “crytography” என்ற இரகசிய படுத்தும் செயலிகளை பயன்படுத்தலாம்; இவற்றில் மின் அஞ்சலை சிலர் கண்களுக்கும் மட்டும் படும் வகையிலும் அனுப்பியும் படிக்கவும் செய்வது “PGP” என்ற திறன் கொண்ட அஞ்சல் செயலிகள்.

உங்கள் இணைய தடங்களை பாதுகாப்பாக வைத்து கொள்ள ஒரு தனிப்பட்ட செயலி “Tor” என்பதையும் நீங்கள் கொண்டு செயல்படலாம். இது உங்கள் இடம் என்பதை உலாவும் வலைதளத்திற்கு மறைமுகமாக்கும். அதாவது “principle of parsimony,” என்பது தமிழ் வாய்மொழி (ஆடுகிற மாட்டை ஆடி கரைக்கவும், பாடுற மட்டை … ) போல வேண்டியதை மட்டும் கொடுத்தல் மட்டும் போதும் என்றளவில் செயல்படுத்தி இந்த Tor வலை செயலி உங்கள் எண்ணிம தகவலை பாதுகாக்கும்.

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

தகவல் பாதுகாப்பு என்பது எழுதிய மை காய்வதற்கும் முன்பே எழுது பழதடைந்து விடும் வகையில் முன்னேறும் துறை. இதில் நாம் பார்க்கவேண்டிய தலைப்புகளும், எடுக்கேவேண்டிய பாதுகப்புகளும் ஏராளம். அனால் APPLE நிறுவனம் உங்கள் iPhone தகவல்களை FBI போன்ற அரசாங்கமிடமும் ஒரு அதிகரமின்றி தகவல் பாதுகாப்பை விட்டு கொடுக்காமல் போராடியது. நமது இந்திய பொது நிறுவனம் BSNL வாசகர் செல்லும் வலை தளங்களை “tracking” பதிவு செய்து துப்பரிகிறது, தடை செய்கிறது.

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

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

புது தொழில்நுட்பம் சார்ந்த சொற்கள்

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

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

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

இந்த மாதிரி உருவாக்கிய தமிழ் இனங்கு சொற்கள் கீழ் காணலாம்.

  1. Pay wall – சுங்கசுவார்
  2. Fire wall – அகழ்வுசுவர்
  3. Hackathon – தொடர் நிரலாக்கம்
  4. Hacker – கணிமேதை, கணினி மேதாவி
  5. Back seat coder – ஒப்புநிரலாளர்
  6. Cracking – மென்பொருள் வழிப்பறி
  7. Evaluate – கணித்திடு, கணி, கணக்கிடு
  8. Import – இணை, சேர், பயன்படுத்து

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

நீங்கள் என்ன நினைக்கிறீர்? விவாதிக்க.

நன்றி
-முத்து

ஹானொய் இன் கோபுரம் (Tower of Hanoi)

ஹனோய் கோபுரம் அறிமுக கணினி அறிவியலில் ஒரு சிறந்த பிரச்சனை. (Tower of Hanoi is a classic introductory computer science problem) see: http://en.wikipedia.org /wiki/Tower_of_Hanoi

பிரச்சனை நோக்கம், பின்வரும் நிலைமைகளின் கீழ், அச்சு # 3 மது # 1, முதல் வட்டுகள் அனைத்து நகர்த்த உள்ளது

R1: ஒரு சிறிய வட்டு பெரிய வட்டு மேல் உட்கார முடியாது
R2: நீங்கள் தற்காலிக அச்சு இரண்டு அச்சு ஏதாவது பயன்படுத்தலாம்
R3: நீங்கள் செய்ய முடியும் நகர்வுகள் எண்ணிக்கை இல்லை

Goal of the problem is to move all of disks from peg #1, to peg #3, under the following conditions,

  1. R1: Only a smaller disk can sit on top of the larger disk
  2. R2: You may use any of two pegs as temporary store
  3. R3: There is no limit on number of moves you can make
Tower of Hanoi (Ref: http://en.wikipedia.org/wiki/Tower_of_Hanoi)
Tower of Hanoi
(Ref: http://en.wikipedia.org/wiki/Tower_of_Hanoi)

How can you solve this problem ?

  1.  Let us reduced the size of the problem to 1 disk on the peg #1.
  2. We can make a drawing like [1,0,0].
  3. We can simply move the disk 1 from peg #1 to peg #3, and we have completed the problem!
  4. That was easy. [0,0,1].
  1. For 2 disks how do you solve it?
  2. We initially have [1 2, 0, 0]. we want to get to [0,0,1 2]
  3. By moving smaller disk 1 from peg #1, to peg #2, we have [2, 1, 0].
  4. Now your situation is same as problem with 1-disk on peg #1, and 1-disk on peg #2 which we will ignore temporarily.
  5. Next we can move either of disks from peg #1 or peg #2 to peg #3. However the rule, R1, requires us to move the peg #1 disk as it is the larger disk and it should go at bottom.
  6. Now your configuration is like, [0,1,2]
  7. Clearly the final step is to move disk #1 from peg #2 to peg #3, on top of the existing disk #2. Now your configuration is [0,0,1 2]. Solved!

So what does the general solution look like, for n-disks? Well the problem has a dynamic-programming structure, where solving smaller problems, inductively, leads to solution of the larger problem.

  1. Here, you need to move all n-1 smaller disks from peg #1 to peg #2,  and to do that, you will use peg #3 as temporary.
  2. Once you have achieved this, you have to move disk-n from peg #1 to peg #3.
  3. Now move (1,2, … n-1) disks from peg #2 to peg #3 using the peg #1 as intermediate.

This is a recursive solution and harder to visualize at first reading, but you will eventually get the hang of it.

Move 1,2,3 disks from peg #1 to peg #2, with peg #3 as intermediate. Move disk 4 from peg #1 to peg #4. Then move all disks from peg #2 to peg #3 using peg #1 as intermediate.
Move 1,2,3 disks from peg #1 to peg #2, with peg #3 as intermediate. Move disk 4 from peg #1 to peg #4. Then move all disks from peg #2 to peg #3 using peg #1 as intermediate.

The follow program describes the Ezhil program solution to Tower of Hanoi problem,

# (C) 2013 Ezhil Language Project
# Tower of Hanoi – recursive solution

நிரல்பாகம் ஹோனாய்(வட்டுகள், முதல்அச்சு, இறுதிஅச்சு,வட்டு)

@(வட்டுகள் == 1 ) ஆனால்
பதிப்பி  “வட்டு ” + str(வட்டு) + “ஐ \t  (” + str(முதல்அச்சு) + ”  —> ” +  str(இறுதிஅச்சு)+ “) அச்சிற்கு நகர்த்துக.”
இல்லை

@( [“இ”, “அ”,  “ஆ”]  இல் அச்சு ) ஒவ்வொன்றாக
@( (முதல்அச்சு != அச்சு)  && (இறுதிஅச்சு  != அச்சு) ) ஆனால்
நடு = அச்சு
முடி

முடி

# solve problem for n-1 again between src and temp pegs                      ஹோனாய்(வட்டுகள்-1, முதல்அச்சு,நடு,வட்டுகள்-1)

# move largest disk from src to destination
ஹோனாய்(1, முதல்அச்சு, இறுதிஅச்சு,வட்டுகள்)

# solve problem for n-1 again between different pegs
ஹோனாய்(வட்டுகள்-1, நடு, இறுதிஅச்சு,வட்டுகள்-1)
முடி
முடி

ஹோனாய்(4,”அ”,”ஆ”,0)

Try this program online, at, ezhillang.org Alternative solution by @tshrinivasan can be found towers_of_hanoi.n

Solution is illustrated in Fig. 2, with following output,

வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 3ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (ஆ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (ஆ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 4ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (இ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (ஆ  —> அ) அச்சிற்கு நகர்த்துக.
வட்டு 3ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (அ  —> இ) அச்சிற்கு நகர்த்துக.
வட்டு 2ஐ       (அ  —> ஆ) அச்சிற்கு நகர்த்துக.
வட்டு 1ஐ       (இ  —> ஆ) அச்சிற்கு நகர்த்துக.

I hope you had fun!