Mac OS X-இல் எழில் இடைமுகம் (GUI) செயலி உருவாக்க நேரிடும் சவால்கள்

3platforms
படம் 1: எழில் மொழி செயலி மூன்று இயங்கு தளங்களில் கிடைக்கும் படி செய்ய திட்டமிட்டோம். ஆனால் மேக் OS X-இல் சற்று தடங்கல்கள் உள்ளன என்று இந்த பதிவில் தெரிவிக்கிறோம்.

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

விண்டோஸ் தளத்தில் 64-bit கணினிகளில் Windows 7, 8, 10, என்பதில் எழில் மொழி செறிவர நிறுவி வேலைசெகிறது என்று நான் பலரிடம் அவரவர்கள் நடத்திய பரிசோதனைகளில் உறுதிபடுத்தி கொண்டேன்.

லினக்ஸ் இயங்கு தளத்தில் எதுவும் ப்ரிச்சனை இருப்பதாக தெரியவில்லை. Ubuntu-விலும்  64-bit கணினியில் சரியாக வேலை செய்கிறது.

அனால் இந்த Mac OS-X இல் மட்டும் எழில் மொழி Github repo-வில் இருந்து console வழி மட்டும் செயல் படுகிறது. எழுதி செயலி window வழி graphical interface GTK-இனை சார்ந்து உள்ளதால் இதற்க்கு Mac OS-X இல் இயக்க சற்று சிக்கல்களாக உள்ளது. காரணம் PyGobject3  Windows மற்றும் Linux தலங்களுக்கு மட்டுமே நிறுவ தயார் நிலையில் உள்ளது. Mac OS-X இக்கு  Gtk-ஐ மூல நிரல்களில் இருந்து மட்டுமே நிறுவும் நிலை உள்ளது என்பதால் இதனை திரட்டி ஆக்குவதும், ‘எழுதி’ செயலியை இயக்குவதும் சற்று கஷ்டமாக / முடியாமல் போனது.

இந்நிலையில் Mac OS-X-இல் எழில் மொழி console இடைமுகம் செயலி நன்றாக வேலை செய்கிறது என்றும் பதிவு செய்கிறேன். வரும் நாட்களில் ஏதேனும் புதிய முன்னேற்றங்கள் இல்லாத பட்சத்தில் எழில் மொழி ‘எழுதி’ இடைமுகம் இந்த தளத்தில் கிடைக்காது – கட்டளை இடைமுகம் மட்டுமே கிடைக்கும்.

உங்களில் எவருக்கும் Mac OS X-இல் GTK அல்லது packaging வல்லமைகளை, பரிந்துரைகள் இருந்தால் பகிரவும்.

-முத்து,

சான் ஓசே, கலிபோர்னியா

தொடர் பட்டியல் (Linked lists)

தொடர் பட்டியல் என்பது ஒரு எளிதான தரவு வடிவம். சுலபமாக பல ஆயிரக்கணக்கான மதிப்புகளை சேமிக்க இந்த தொடர் பட்டியல் பயன்படுத்தலாம்.

தொடர் பட்டியல் அவதாரங்கள்

இந்த தொடர் பட்டியல் இரண்டு வகையாக அமையும்: ஒருபடை தொடர் பட்டியல் (singly linked list) மற்றும் இருபடை(doubly linked list) இவை கீழே படங்களில் காணலாம். இதனையும் தாண்டி வட்டம் தொடர் பட்டியல் (circular linked list) என்றும் செய்யலாம் இதனை கடைசியில் காண்போம்.

408px-singly-linked-list-svg

படம் 1: ஒருபடை தொடர் பட்டியல் (singly linked list). இதன் முதல் தலை நுனி ‘12’ என்ற மதிப்பை கொண்டது. இதன் ‘அடுத்த’ மதிப்பு ‘99’ மதிப்பு கொண்ட நுனியின் விலாசத்தை கொண்டது. மேலும் ‘99’ நுனி ‘37’ என்ற மதிப்பு கொண்ட நுனியின் விலாசம் கொண்டது. ‘37’ நுனி என்பது கடைசி நுனி என்பதால் இதற்க்கு அடுத்து மதிப்பு காலி என கொண்டது. இந்த ‘அடுத்து’ என்ற இணைப்பே ‘12’ நுனியில் தொடங்கி ‘37’ வரை செல்லும் அம்சத்தை தொடர் பட்டியல் என்று ஆகும் படி இந்த தரவு வடிவத்திற்கு அளிக்கிறது.

610px-doubly-linked-list-svg

படம் 2: படம் 1-ஐ போலவே தொடர் பட்டியல் ஆனால் ‘அடுத்து’ மதிப்பை போலவே கூடுதலாக ‘முந்தைய’ என்ற மதிப்பையும் ஒவ்வொரு நுனியும் கொண்டது. இதன் காரணமாக இதனை ‘இருபடை தொடர் பட்டியல்’.

 

தொடர் பட்டியல் அமைப்பு

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

# நுனி உருவாக்குதல்

நிரல்பாகம் ஒருபடை_நுனி( மதிப்பு )

      நு = {“அடுத்து” : [], “மதிப்பு” : மதிப்பு  }

      பின்கொடு நு

முடி

# நுனியின் அடுத்து விலாசத்தை மற்றோரு நுனியில் அமைத்தல் /

நிரல்பாகம் ஒருபடை_இணை( நுனி_முதல், நுனி_அடுத்து  )

      நுனி_முதல் [“அடுத்து”] = நுனி_அடுத்து

      பின்கொடு நுனி_அடுத்து

முடி

தொடர் பட்டியலில் அணுகுதல்

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

தொடர் பட்டியலில் தேடல்

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

# ஒருபடை தொடர் பட்டியலை வரிசையில் அணுகுதல்

நிரல்பாகம் ஒருபடை_அணுகு( நுனி  )

   நுனி_அடுத்து = []

   காலி =  []

   @(    நுனி != காலி  ) வரை  

       #பதிப்பி “முதிப்பு  => “,

       பதிப்பி நுனி [“மதிப்பு”]

       நுனி_அடுத்து = நுனி [“அடுத்து”]

       நுனி = நுனி_அடுத்து

   முடி

   பின்கொடு  நுனி_அடுத்து

முடி

தேடிய ‘குறிப்பிட்ட மதிப்பு’ கிடைக்காவிட்டால் -1 என்ற மதிப்பு பின்கொடுக்கப்படும்; கிடைத்தால், தலை நுனியில் இருந்து தூரத்தை  வரிசை எண் என்று பின்கொடுக்கப்படும்

நிரல்பாகம் ஒருபடை_தேடு ( நுனி, குறிப்பிட்ட_மதிப்பு   )

   நுனி_அடுத்து = []

   காலி =  []

   வரிசை_எண்  = 1

   @(    நுனி != காலி  ) வரை

       @( நுனி [“மதிப்பு”] == குறிப்பிட்ட_மதிப்பு ) ஆனால்

           பின்கொடு வரிசை_எண்        

       முடி

        நுனி_அடுத்து = நுனி [“அடுத்து”]

        நுனி = நுனி_அடுத்து

        வரிசை_எண் = வரிசை_எண் + 1

   முடி

   பின்கொடு  -1

முடி

 

# நுனி உருவாக்குதல்

நு12 = ஒருபடை_நுனி( 12 )

நு99 = ஒருபடை_நுனி( 99 )

நு37 = ஒருபடை_நுனி( 37 )

 

# நுனியின் அடுத்து விலாசத்தை மற்றோரு நுனியில் அமைத்தல் /

ஒருபடை_இணை( நு12, நு99 )

ஒருபடை_இணை( நு99, நு37 )

 

# ஒருபடை தொடர் பட்டியலை வரிசையில் அணுகுதல்

ஒருபடை_அணுகு( நு12 )

#சாவே இல்லாத வீட்டிலே கைப்பிடி கடுகு  கிடைக்குமா ?

பதிப்பி ஒருபடை_தேடு(நு12, 10) 

பதிப்பி ஒருபடை_தேடு(நு12, 37)

இதன் வெளியீடு :  12, 99, 37. முழு நிரல் இங்கு.

இந்த மாதிரி தொடர் பட்டியலில் பல கேள்விகளை எழுப்பலாம், உதாரணத்திற்கு:

  1. இரண்டு தொடர்பட்டியலை எப்படி இணைப்பது ?
  2. ஒரு தொடர்பட்டியலில் குறிப்பிட்ட மதிப்பு எத்தனை முரை அவதானிக்கிறது ?
  3. தொடர்பட்டியலை முன்னுக்கு பின் எப்படி வேகமாக மாற்றுவது ?
  4. இரு தொடர் பட்டியலில் உள்ள பொதுவான மதிப்புகளை கண்டு எடுக்க முடியுமா ?
  5. அணிகள் (arrays) என்பதற்கும் தொடர் பட்டியல் என்பதற்கும் என்ன வித்யாசம் ?

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

  1. “Introduction to algorithms” by Cormen, Leiserson, Rivest, and Stein. MIT press இங்கு.
  2. “The Algorithm Design Manual” by Steven Skiena. இங்கு

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

மேலும் அடுத்த வாரம்.

-முத்து

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

தொடக்க அளவு பைத்தன் (Beginning Python)

தொடக்க அளவு பைத்தன் கற்பதற்கு, Swaroop எழுதிய “Byte of Python” என்ற மின் புத்தகம் மிக அறுமையானது. இதை இங்கிருந்து தரவிரக்கலாம்.

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

மேலும் உதாரணங்கள் – மாறி, வரவு செலவு கணக்கு,scientific notation

அடுத்த வீடியோவில்

  1. மாறி
  2. strings
  3. வரவு செலவு கணக்கு,
  4. scientific notation,

Strings, Print statement, variables

Arithmetic and calculations in Ezhil

Calculations with variables

Ezhil – தமிழ் நிரல் எழுது / Write Code in Tamil! – part 1

எழில் (தமிழ் நிரலாக்க மொழி) மூலம் இப்போது நீங்கள் தமிழ் கணினி #நிரல்களை எழுத முடியும்!
Ezhil is Tamil programming language. Write Code in Tamil.

This video explains concepts of Ezhil language, and how you can program via the http://ezhillang.org website. Try programs at http://ezhillang.org/ezhil_eval.html

எண்ணிக்கையிலான இலக்கங்களின் தொகை (sum of digits of a number)

எண்ணிக்கையிலான இலக்கங்களின் தொகை (sum of digits of a number)

அறிமுகப்படுத்துதல் (Introduction)

எல்லோருக்கும் வணக்கம்! நான் ஒரு போது இந்த வலைப்பதிவு இடுகை எதிர்பார்த்து இருந்தது.

இந்த இடுகையில், இலக்கங்களின் தொகை கணக்கிட எவ்வாறு, நான் எப்படி காண்பிக்கிறேன்.
Hello everyone! I am excited to show you how to calculate the sum of digits of a number, in Ezhil language, through this blog post.

கேள்வி கூற்று – வினா / (Problem Statement)

ஒரு எண் என்ன? இது இலக்கங்களின் ஒரு சரம். What is a number? It is a string of digits.
e.g. 1, 2, 1729, 314159, 355, 113, 1001, etc.
மேலே காட்டப்பட்டுள்ள எண்களை, எண்ணிக்கையிலான இலக்கங்களின் தொகை; the sum of digits for above numbers.
e.g. 1 -> 1, 2->2, 1729 -> 1+7+2+9 = 19, 314159 -> 3 + 1 + 4 + 1 + 5 + 9 = 23, etc.

 யோசனை/ (Solution Idea)

இது எளிதாக இருந்தது! ஆனால் நமது பிரச்சனை இதை ஒரு நிரல் எழுதுவது இருக்கிறது. This was easy! But our problem is to write a program for doing this.
எண் 1279 பரிசீலிக்க. Consider the number 1279.
  1. 10 மூலம் எண்ணிக்கையை வகுப்பதன், மற்றும் எஞ்சிய எடுத்து கணக்கிடலாம். மட்டு ஆபரேட்டர் “%” மற்றும் பிரிவு “/” பயனுள்ளதாக இருக்கும். Dividing the number by 10, and take the remainder. Modulo operator “%” and division “/” are useful.
  2. sum = 0; எண்  = 1279; எஞ்சிய = 9 = 1279%10; வகுப்பதன் = 127 = (1279/10) ;
  3. எஞ்சியவை சேர்த்து வைத்துக்கொள்ள. Add remainder to the total.
  4. sum = sum + எஞ்சிய.
  5. ஆதாய பங்கு >=  0 வரை, 4 – படிகள் 1 செய்யவும். Repeat steps 1 – 4, with the dividend as the new number until dividend > 0.

அனைத்து ஒன்றாக நீங்கள் அதை வைத்து  (Putting it all together you get),

# இது ஒரு எழில் தமிழ் நிரலாக்க மொழி உதாரணம் 
# sum of digits of a number
# எண்ணிக்கையிலான இலக்கங்களின் தொகை

நிரல்பாகம் எண்_கூட்டல்( எண் )
  தொகை = 0
  @( எண் > 0 ) வரை
     d = எண்%10;
     பதிப்பி "digit = ",d
     எண் = (எண்-d)/10;
     தொகை  = தொகை  + d
  முடி
  பின்கொடு தொகை 
முடி

பதிப்பி எண்_கூட்டல்( 1289)#20
பதிப்பி எண்_கூட்டல்( 123456789)# 45

நீங்கள் நிரலை ezhillang.org  முயற்சி செய்யலாம்; You can try out the code at ezhillang.org

வாசிப்பு நன்றி, மற்றும் உங்கள் கருத்துக்களை பகிர்ந்து கொள்ள!
அன்புடன்,
முத்து

Thanks for reading, and share your comments!
Regards,
Muthu

A hour of Code – அனைவருக்கும் நிரலாக்க ஒரு மணி நேரம் கற்பிக்க

Code.org has launched an all American initiative to teach programming to everyone. See the promotional video here. Code.org project, is to teach everyone one hour of programming!
One day I hope we can make this a community outreach for Ezhil language.

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

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