open-tamil வரிசை எண் 1.1 வெளியீடு

இன்று open-tamil வரிசை எண் 1.1 வெளியீடு ஆகிறது. இதனை கீழ் உள்ள கட்டளையின் வழியாக பெறலாம்:

$ python3 -m pip install open-tamil --upgrade

இந்த வெளியீடில் உள்ள புதியது தமிழில் நாள் திகதி விவரங்களை பெறக்கூடிய செயற்பாடுகளாவன. இதனை பங்களித்த அருண்மொழி (@techolic) அவருக்கு நன்றி.

  1. date module: new update to this module in the v1.1 release was added by Arunmozhi (Techolic) adds datetime class with strftime, tamil_weekday(), Example usage:
>>> from datetime.datetime import now
>>> from tamil.date import datetime 
>>  n = now()
>>> d = datetime(n.year,n.month,n.day,n.hour,n.minute) 
>>> d.strftime_ta("%a %d, %b %Y") 
'வியாழன் 26, மே 2022'

முழு அறிக்கையை இங்கு பெறலாம் – https://pypi.org/project/Open-Tamil/1.1/

நன்றி

முத்து

கலிபோர்னியா, அமெரிக்கா.

உளியருவி – Tamil tools for AI/ML

Motivation

In 2022 we are reaching a point where more Tamil datasets are available than Tamil tools – arunthamizh அருந்தமிழ். However the accessibility of fully-trained models and capability of providing pre-trained models are much harder and still require domain expertise in hardware and software. Personally I have published some small Jupyter notebooks (see here), and some simple articles, but they still remain inadequate to scale the breadth of Tamil computing needs in AI world among:

  1. NLP – Text Classification, Recommendation, Spell Checking, Correction tasks
  2. TTS – speech synthesis tasks
  3. ASR – speech recognition

While sufficient data exist for 1, the private corpora for speech tasks (அருந்தமிழ் பட்டியல்), the public corpora of a 300hr voice dataset recently published from Mozilla Common Voice (University of Toronto, Scarborough, Canada leading Tamil effort here) have enabled data completion to a large degree for tasks 2 and 3.

Ultimately the tooling provides capability to quickly compose AI services based on open-source tools and existing compute environment to host services and devices in Tamil space.

Proposal

My proposal is the following:

  1. Develop a open-source toolbox for pre-training and task training specialization
  2. Identify good components to base effort
  3. Contribute engineering effort, testing, and validation
    1. R&D – DataScience, Infra, AI framework
    2. Engineering Validation – DataScience, Tamil language expertise
    3. Engineering – packaging, documentation, distribution
    4. Project management
  4. Library to be liberally licensed MIT/BSD
  5. Open-Source license for developed models
  6. Find hardware resources for AI model pre-training etc.
  7. Managed by a steering committee / nominated BDFL
  8. Scope – decade time frame
  9. TBD – மேலும் பல.

Summary

Let’s build a pytorch-lightning like API for Tamil tasks across NLP, TTS, ASR via AI.

Leave your thoughts by email ezhillang -at- gmail -dot- com, or in comments section.

சில பைத்தான் தொகுப்புகளின் வெளியீடு

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

1. தமிழிணையவாணி

Python package released for Tamilinaya-Spellchecker by @tshrinivasan and team’s work (based on @Neechalkaran creation) http://pypi.org/project/tamilinayavaani/0.13/ Windows, Mac and Linux users can get the package by command:

$ pip install tamilinayavaani==0.13

Demo co-lab: here

2. தமிழ்சொற்பிழைதிருத்தி

Packaged tamilspellchecker https://github.com/malaikannan/TamilSpellChecker from @malai_san +team for Python https://pypi.org/project/tamilspellchecker/0.10/ – APACHE 2.0. Get your copy:

$ pip install tamilspellchecker>=0.10

Demo co-lab: here

Python வழு நீக்கம் – PDB Debugging

ஆசிரியர்: லிசா டாக்லியபெரி,

தமிழாக்கம்: முத்து அண்ணாமலை.

This article is a translation of tutorial article on PDB from DigitalOcean; இந்த கட்டுரை ஏற்கனவே வெளியீடான பயிற்சி கட்டுரை தமிழாக்கம் ஆகும்.

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

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

Computer Bug

தொடர்வது லிசா எழுதிய https://www.digitalocean.com/community/tutorials/how-to-use-the-python-debugger இந்த 2017-ஆம் ஆண்டு கட்டுரையின் தமிழாக்கம்.

அறிமுகம்

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

பைத்தான் மொழியில் pdb என்ற ஒரு வழு நீக்கி செயலி உள்ளது; இது python மொழியில் எழுதிய நிரல்களுக்கு ஒரு வழுநீக்கம் செய்யும் சூழலை அளிக்கிறது. pdb மூலம் நிபந்தனை நிறுத்தங்கள் (conditional breakpoints), வரிவரியான கண்காணிப்பு இயக்கம் (stepping through the source code one line at a time), அடுக்கு கண்கானிப்பு (stack inspection), என பல வைகயான உத்திகளைக்கொண்டு நிரலின் இயக்க நிலைகளை காணமுடிகிறது.

pdbஐ படிப்படியாக பயன்படுத்துதல்

பைத்தான் மொழியில் தரப்படுத்தப்பட்ட ஒரு நிரல்தொகுப்பு (module) வழியாக இந்த pdb வழுநீக்கி நமக்கு கிடைக்கிறது. இந்த Pdb வழுநீக்கியையே நீட்சி செய்து நாம் ஒரு நிரல்கூட எழுதலாம்க். pdb பற்றிய மூல ஆவணத்தை இங்கு படிக்கலாம்.

pdb பற்றி கற்றுக்கொள்ள நாம் ஒரு சின்ன நிரலின் வழுநீக்கம் வழியாக கற்றுக்கொள்ளலாம்; இந்த நிரலில் இரு பொதுவெளி மாறிகள் (global variables), ஒரு நிரல்பாக சார்பும் (function) அதனுள் உள்ள அடுக்கு மடக்கு வாக்கியமும் (loop), இவை அனைத்தையும் தொடங்கிவைக்கும் if __name__ == '__main__': என்ற நிரல்தொடக்க நிபந்தனையும் (அதாவது சார்பு nested_loop() என்பதை தொடக்கிவிடும்) வகையில் அமைந்தது இந்த நிரல் looping.py

num_list = [500, 600, 700]
alpha_list = ['x', 'y', 'z']

def nested_loop():
    for number in num_list:
        print(number)
        for letter in alpha_list:
            print(letter)

if __name__ == '__main__':
    nested_loop()

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

python -m pdb looping.py

இந்த -m என்ற flag பைத்தான் moduleஐ ஒரு நிரலாக இயக்க வழிசெய்யும். மேல் கண்டபடி கட்டளையிட்டால் நமது நிரல் (looping.py) பைத்தான் வழு நீக்கியான pdb-யினைக்கொண்டு அதன் கண்காணிப்பில் இயங்கும்.

மேல்கண்ட கட்டளை இயங்கியதும் இவ்வறு வெளியீடை காணலாம்:

Output> /Users/sammy/looping.py(1)<module>()
-> num_list = [500, 600, 700]
(Pdb) 

இதில், முதல் வரியில் (அதாவது <module> என்ற வரி) நிரல் கோப்பின் இருப்பிடம், மற்றும் நிரலின் இயங்கும் வரி (இங்கு முதல் வரி இயங்குகிறது). ‘->’ என்ற குறியிடின் அடுத்து வரும் வரி நிரலின் தற்சமயம் உள்ள இயக்கப்புள்ளியைச் சேர்ந்த வரியாகும். வழு நீக்கியின் திறன்கள் மற்றும் கட்டளைகளை பற்றி கற்றுக்கொள்ள  help <கட்டளை>  என்று கட்டளையின் பெயரை pdb shell-இல் இட்டு அந்த கட்டளையினைப்பற்றி குறிப்பாக கற்றுக்கொள்ளலாம். pdb கட்டளை திறை என்பதும் பைத்தான் console என்பதும் வெவ்வேரான விஷயங்கள் என்பதை கருத்தில் கொள்ள வேண்டும்.

pdb வழு நீக்கி நிரலின் இருதியில் மீண்டும் தொடங்கும் வகை கட்டமைக்கப்பட்டது; இதில் இருந்து வெளியேர quit அல்லது exit என்று கட்டளையிடவேண்டும். மேலும் நிரலின் ஏதேனும் குறிப்பிட்ட வரியில் இருந்து இயக்கத்தை தொடர வேண்டும் என்றால் run என்ற கட்டளையை pdb வழுநீக்கியால் செலுத்தலாம்.

வழு நீக்கியில் நிரல் இயக்கத்தை கண்கானித்தல்

pdb கட்டளைகளான list, step, மற்றும் next உங்களது நிரல் இயக்கத்தை கண்கானிக்கலாம். இந்த கட்டளைகளைப்பற்றி விரிவாக இந்த பத்தியில் பார்க்கலாம்.

pdb shell அதனில் list என்ற கட்டளையை இட்டால் தற்சமயம் இயங்கும் புள்ளியின் வரியின் சுற்றத்தில் உள்ள வரிகளை பார்க்கலாம்.  உதாரணமாக looping.py நிரலின் முதல் வரியின் சுற்றத்தில் — num_list = [500, 600, 700] — இப்படி வெளியீடு அளிக்கும்:

(Pdb) list
  1  -> num_list = [500, 600, 700]
  2     alpha_list = ['x', 'y', 'z']
  3     
  4     
  5     def nested_loop():
  6         for number in num_list:
  7             print(number)
  8             for letter in alpha_list:
  9                 print(letter)
 10     
 11     if __name__ == '__main__':
(Pdb) 

‘->’ என்ற குறியிடின் அடுத்து வரும் வரி நிரலின் தற்சமயம் உள்ள இயக்கப்புள்ளியைச் சேர்ந்த வரியாகும்.

நமது இந்த நிரல் சற்று சிறிதாக உள்ளதால் முழு நிரலையும் list கட்டளை இங்கு அளித்துவிடுகிறது. சராசரியான பயன்பாட்டில் list கட்டளை 11 வரிகளையும் முழுதாக வெளியிடுகிரது; ஆனால் list 3, 7 வரிகள் 3-இல் இருந்து 7-வரை மட்டும் வெளியிட வேண்டுமெனில் கீழ்கண்டபடி கட்டளையிடவும்: list 3, 7

(Pdb) list 3, 7
  3     
  4     
  5     def nested_loop():
  6         for number in num_list:
  7             print(number)
(Pdb) 

செயலியின் இயக்கத்தை நிரல் வரிகளில் ஒவ்வொரு வரியாக அலசுவதற்கு step அல்லது next கட்டளைகளை பயன்படுத்தலாம்; உதாரணம்:

(Pdb) step
> /Users/sammy/looping.py(2)<module>()
-> alpha_list = ['x', 'y', 'z']
(Pdb) 

(Pdb) next
> /Users/sammy/looping.py(2)<module>()
-> alpha_list = ['x', 'y', 'z']
(Pdb) 

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

step கட்டளை மடக்கு வாக்கியங்களில் படிபடியாக ஒவ்வொரு வரியிலும் நிறுத்தி இயக்கத்தைக் காட்டும்; இதனைக்கொண்டு மாறிகளின் மதிப்புகள், மாறிகளை அச்சிடுவது, print(number), என்றும் letter என்றதை அச்சிடுவதும் print(letter), return number என்ற வரியை செயல்படுத்துவதையும் பார்க்கலாம்.

(Pdb) step
> /Users/sammy/looping.py(5)<module>()
-> def nested_loop():
(Pdb) step
> /Users/sammy/looping.py(11)<module>()
-> if __name__ == '__main__':
(Pdb) step
> /Users/sammy/looping.py(12)<module>()
-> nested_loop()
(Pdb) step
--Call--
> /Users/sammy/looping.py(5)nested_loop()
-> def nested_loop():
(Pdb) step
> /Users/sammy/looping.py(6)nested_loop()
-> for number in num_list:
(Pdb) step
> /Users/sammy/looping.py(7)nested_loop()
-> print(number)
(Pdb) step
500
> /Users/sammy/looping.py(8)nested_loop()
-> for letter in alpha_list:
(Pdb) step
> /Users/sammy/looping.py(9)nested_loop()
-> print(letter)
(Pdb) step
x
> /Users/sammy/looping.py(8)nested_loop()
-> for letter in alpha_list:
(Pdb) step
> /Users/sammy/looping.py(9)nested_loop()
-> print(letter)
(Pdb) step
y
> /Users/sammy/looping.py(8)nested_loop()
-> for letter in alpha_list:
(Pdb)

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

python -m pdb looping.py

இப்பொழுது next கட்டளையின் செயல்பாடை காணலாம்:

(Pdb) next
> /Users/sammy/looping.py(5)<module>()
-> def nested_loop():
(Pdb) next
> /Users/sammy/looping.py(11)<module>()
-> if __name__ == '__main__':
(Pdb) next
> /Users/sammy/looping.py(12)<module>()
-> nested_loop()
(Pdb) next
500
x
y
z
600
x
y
z
700
x
y
z
--Return--
> /Users/sammy/looping.py(12)<module>()->None
-> nested_loop()
(Pdb)  

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

(Pdb) pp num_list
[500, 600, 700]
(Pdb) 

pdb இல் உள்ள பல கட்டளைகளுக்கும் முழு கட்டளை பெயரை இடாமல் சற்று குறுகிய வடிவில் (shortcut) தட்டச்சு செய்யலாம்; break என்பதற்கு b, step என்பதற்கு s, next என்றால் n என்றும் எழுதலாம். இதற்குமுன் இட்ட கட்டளை மருஇயக்கம் செய்ய ENTER என்ற விசை தட்டினால் போதும்.

நிறுத்தங்கள் (Breakpoints)

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

நிறுத்தப்புள்ளிகளுக்கு pdb 1-இல் தொடங்கியவாரு முழு எண்களை (கூடும் வரிசையில்) குறியீடாக வைத்திருக்கும்; ஆகையால் நிறுத்தப்புள்ளிகளை முழு எண்கள் கொண்டும் குறிப்பிடலாம்.

நிறுத்தப்புள்ளிகளைக் குறிப்பிட <நிரல் கோப்பு>:<வரி எண்> என்றபடி குறிப்பிடலாம்:

(Pdb) break looping.py:5
Breakpoint 1 at /Users/sammy/looping.py:5
(Pdb)

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

(Pdb) break looping.nested_loop
Breakpoint 1 at /Users/sammy/looping.py:5
(Pdb) 

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

(Pdb) break looping.py:7, number > 500
Breakpoint 1 at /Users/sammy/looping.py:7
(Pdb)     

ஒரு நிறுத்தப்புள்ளியில் இருக்கும் பொழுது continue (தொடர்) என்ற கட்டளையை கொடுத்தால், நிபந்தனை மெய்யாகும் வரை அந்த நிறுத்தப்புள்ளி செயல்தவிர்க்கப்படும் – அதாவது இங்கு number என்ற மாறி 500-க்கும் கூடுதலான வகையில் இயங்கும் வரை அது செயல்படாமல் இருக்கும் (வேறு வகையில் சொல்லவேண்டுமானால் number என்ற மாறி 600 என்ற மதிப்பை வெளி மடக்கின் இரண்டாம் சுற்றில் பெரும் பொழுது இந்த நிறுத்தப்புள்ளி செயல்படும்):

(Pdb) continue
500
x
y
z
> /Users/sammy/looping.py(7)nested_loop()
-> print(number)
(Pdb) 

pdb-இல் உள்ள நிறுவப்பட்ட நிறுத்தப்புள்ளிகளை பார்க்க ‘break’ என்ற கட்டளையை அளிக்கவும்:

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /Users/sammy/looping.py:7
    stop only if number > 500
    breakpoint already hit 2 times
(Pdb) 

disable என்ற கட்டளையைக்கொண்டு ஒரு நிறுத்தப்புள்ளியை செயல்தவிர்க்கலாம்:

(Pdb) break looping.py:11
Breakpoint 2 at /Users/sammy/looping.py:11
(Pdb) disable 1
Disabled breakpoint 1 at /Users/sammy/looping.py:7
(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep no    at /Users/sammy/looping.py:7
    stop only if number > 500
    breakpoint already hit 2 times
2   breakpoint   keep yes   at /Users/sammy/looping.py:11
(Pdb) 

enable என்ற கட்டளையைக்கொண்டு ஒரு நிறுத்தப்புள்ளியை செயல்பாட்டிற்கு கொண்டுவரலாம்; clear என்ற கட்டளையினால் நிறுத்தப்புள்ளியை அழித்துவிடலாம்.

(Pdb) enable 1
Enabled breakpoint 1 at /Users/sammy/looping.py:7
(Pdb) clear 2
Deleted breakpoint 2 at /Users/sammy/looping.py:11
(Pdb) 

pdbயின் நிறுத்தப்புள்ளிகள் வழியாக நிரல் இயத்தின் மீது அதிகளவு கட்டுப்பாடு கிடைக்கிறது. நிறுத்தப்புள்ளிகளில் கூடுதல் செயல்பாடுகளானவை, ignore என்ற கட்டளை – இது நிறுத்தப்புள்ளியினுடன் இணைக்கப்பட்ட இணைசெயல்கள்/நிரல்துண்டுகளை அழித்துவிடு; அதேபோல் command என்ற கட்டளை நிறுத்தப்புள்ளியினுடன் சேர்ந்த இணைசெயல்கள்/நிரல்துண்டுகளை குறிப்பிட உதவும் – எ.கா. ‘command 1’ என்று தொடங்கி இணைசெயல்களைக் குறிப்பிட்டு முடிந்தபின் ‘end’ என்று முடிக்கலாம். மேலும் ‘tbreak’ என்ற கட்டளை ‘temporary break’ என்றதன் சுருக்கமாக முதன்முறை மட்டும் நிறுத்தப்புள்ளியை செயல்படுத்தி இரு இயக்கத்தில் பிடிபட்டபின் ‘clear’ என்ற கட்டளையை இதே நிறுத்தப்புள்ளிக்கு தானாக செலுத்திவிடும் தன்மை உடையது; ‘tbreak 3’ என்பது நிரலின் மேலே இயக்கப்பட்டது.

உங்கள் நிரல்களில் pdb-ஐ இணைப்பது

உங்கள் நிரல்களில் வழுநீக்கம் தானாக நிரல் செயல்பாட்டின் இடையேயும் தொட்டவைக்கலா; இதனைச்செய்ய pdb module-ஐ இணைத்தும் pdb சார்பான pdb.set_trace() என்ற நிரல்பாகம் குறிப்பிட்டிருக்க வேண்டும்; இயக்கம் இந்த நிரல் வரிக்கு வரும்பொழுது உங்கள் நிரலின் இயக்கத்தினிடையே வழு நீக்கி தொடக்கமாகிவிடும்.

உதாரணமாக, நமது மாதிரி நிரலில் (கீழே கொடுக்கப்பட்டது) import வாக்கியத்தின் மூலம் pdb-யின் set_trace சார்பினை அழைக்கவும். நமது உதாரணத்தில், இந்த வழு நீக்கம் சார்பை அடுக்கு மடக்கு வாக்கியதின் (nested loop) முன் சேர்த்துப் பரிசோதனை செய்யலாம்.

# Import pdb module
import pdb

num_list = [500, 600, 700]
alpha_list = ['x', 'y', 'z']

def nested_loop():
    for number in num_list:
        print(number)

        # வழு நீக்கி இங்கு தொடங்கும்
        pdb.set_trace()
        for letter in alpha_list:
            print(letter)

if __name__ == '__main__':
    nested_loop()

இந்த பத்தியில் காட்டியபடி உங்கள் நிரலில் இருந்தபடியே வழு நீக்கியை இணைத்தால் தனிப்பட்டபடி pdb-ஐ இணைக்கவும் வேண்டாம், நிறுத்தப்புள்ளிகளும் தேவையில்லை.

அதாவது pdb module வழியாக அழைக்கப்பட்ட pdb.set_trace() சார்பு உங்கள் நிரலில் எங்கு இங்குகிறதோ அதே இடத்தில் அந்த நிரல் வழு நீக்கியினில் செயல்படும்.

நிரல் இயக்கத்தை மாற்றுவது

Python pdb கட்டளை jump வழியாக இயங்கும் நேரத்தில் ஒரு நிரலின் இயக்கத்தை திசைமாற்றலாம். இதன் மூலம் ஒரு நிரலில் உள்ள சில நிரல்பாகங்களை முன் – பின் வரிசை மாற்றியும் செயல்படுத்தலாம்.

இந்த பகுதியில் sammy (நிரலில் "sammy") என்ற சரத்தில் உள்ள எழுத்துக்களை ஒரு பட்டியலாக பெருவதற்கு நிரல் எழுதுவோம்: letter_list.py

def print_sammy():
    sammy_list = []
    sammy = "sammy"
    for letter in sammy:
        sammy_list.append(letter)
        print(sammy_list)

if __name__ == "__main__":
    print_sammy()

python letter_list.py என்று இயக்கினால், இந்த வெளியீடை பார்க்கலாம் (இது நேர்கோட்டான இயக்கம் – எதுவும் மாற்றங்கள் இல்லாமல் இயக்கப்படுகிறது):

Output['s']
['s', 'a']
['s', 'a', 'm']
['s', 'a', 'm', 'm']
['s', 'a', 'm', 'm', 'y']

அடுத்த முறை இதே நிரலை pdb-யின் மூலம் for மடக்கு வாக்கியதின் இரண்டாம் சுற்றை நீக்கி (நேர்கோட்டற்ற இயக்கத்தின் வழி) இயக்கி பார்க்கலாம்:

python -m pdb letter_list.py

> /Users/sammy/letter_list.py(1)<module>()
-> def print_sammy():
(Pdb) list
  1  -> def print_sammy():
  2         sammy_list = []
  3         sammy = "sammy"
  4         for letter in sammy:
  5             sammy_list.append(letter)
  6             print(sammy_list)
  7     
  8     if __name__ == "__main__":
  9         print_sammy()
 10     
 11     
(Pdb) break 5
Breakpoint 1 at /Users/sammy/letter_list.py:5
(Pdb) continue
> /Users/sammy/letter_list.py(5)print_sammy()
-> sammy_list.append(letter)
(Pdb) pp letter
's'
(Pdb) continue
['s']
> /Users/sammy/letter_list.py(5)print_sammy()
-> sammy_list.append(letter)
(Pdb) jump 6
> /Users/sammy/letter_list.py(6)print_sammy()
-> print(sammy_list)
(Pdb) pp letter
'a'
(Pdb) disable 1
Disabled breakpoint 1 at /Users/sammy/letter_list.py:5
(Pdb) continue
['s']
['s', 'm']
['s', 'm', 'm']
['s', 'm', 'm', 'y']

மேல்கண்டதில் வழுநீக்கி வரி 5-இல் ஒரு நிறுத்தப்புள்ளியை இடுகிறது; இதனை அடைந்த பின் letter என்ற மாறியின் சேமிக்கப்பட்ட மதிப்பை அச்சிடுகிறது. அடுத்தபடியாக, pdb கருவியில், jump கட்டளையைக்கொண்டு வரி 6-இல் நேர்கோட்டுக்கு மாறாக இயக்கத்தை வரி 5-ஐ கடந்து செல்கிறோம். அதாவது மாறி letter-ஐ 'a' என்ற மதிப்பு கொண்டுள்ளது ஆனால் இது பட்டியலில் சேர்க்காமல் வரி 5-ஐ தாவி வரி 6-இல் இயக்கம் தொடர்ந்து செல்கிறது.

இதன்பின் வரி 5-இல் உள்ள நிறுத்தப்புள்ளியை செயல்தவிர்த்து பழையபடியே நிரல் உள்ளவடிவில் இயக்கம் முடிவடைகிறது.

அடுத்து நாம் நிரலில் இயக்கம் முடிந்த ஒருவரிக்கு மீண்டும் இயக்கத்தை திருப்பிச் செல்ல jump  கட்டளையைக் கொண்டு முயற்சிக்கலாம். இந்தமுறை for வாக்கியத்தின் முதல் சுற்றை மீண்டும் pdb-யில் இயக்கிப்பார்க்கலாம்.

> /Users/sammy/letter_list.py(1)<module>()
-> def print_sammy():
(Pdb) list
  1  -> def print_sammy():
  2         sammy_list = []
  3         sammy = "sammy"
  4         for letter in sammy:
  5             sammy_list.append(letter)
  6             print(sammy_list)
  7     
  8     if __name__ == "__main__":
  9         print_sammy()
 10     
 11     
(Pdb) break 6
Breakpoint 1 at /Users/sammy/letter_list.py:6
(Pdb) continue
> /Users/sammy/letter_list.py(6)print_sammy()
-> print(sammy_list)
(Pdb) pp letter
's'
(Pdb) jump 5
> /Users/sammy/letter_list.py(5)print_sammy()
-> sammy_list.append(letter)
(Pdb) continue
> /Users/sammy/letter_list.py(6)print_sammy()
-> print(sammy_list)
(Pdb) pp letter
's'
(Pdb) disable 1
Disabled breakpoint 1 at /Users/sammy/letter_list.py:6
(Pdb) continue
['s', 's']
['s', 's', 'a']
['s', 's', 'a', 'm']
['s', 's', 'a', 'm', 'm']
['s', 's', 'a', 'm', 'm', 'y']

இந்த மேல் காட்டப்பட்ட வழுநீக்கத்தில் வரி-6 இல் முதல் நிறுத்தப்புள்ளி இருக்கிறது; இது வரி 5-ஐ கடந்து செல்கிறது. ஆனாலும் வரி 5-ஐ மீண்டும் நாம் இயக்கச்செய்கின்றோம். இதனால் மாறி ‘letter’ இல் உள்ள மதிப்பான 's' இரண்டு முறை பட்டியலில் இணைக்கப்படுகிறது.

pdb-இல் அனைத்து வரிகளுக்கும் jump கட்டளையைக்கொண்டு நகர்த்திச்செல்ல முடியாது; குறிப்பாக, try:except வாக்கியங்கள், finally வாக்கியங்கள் போன்றவற்றின் இடையிலும், இயக்கத்தை தாவிச்செல்ல முடியாது.

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

பொதுவான pdb கட்டளைகள்

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

கட்டளைசுறுக்கம்விளக்கம்
argsaநிரல்பாகம் சார்பின் உள்ளீடுகளை (function arguments) அச்சிடும்
breakbஇயங்கும் செயலியில் ஒரு நிறுத்தப்புள்ளியை உறுவாக்கும்
continuec or contநிரல் இயக்கத்தை நிறுத்தப்புள்ளியில் இருந்து மீண்டும் தொடங்கச்செய்யும்
helphpdb இல் உள்ள அனைத்து கட்டளைகளையும் உதவிக்குறிப்புகளுடன் காட்டும்
jumpjஅடுத்த நிரல் வரி எடு என்பதை நாம் குறிப்பிட உதவும் கட்டளை
listlஇயக்கப்புள்ளியைச்சுற்றி அமைந்துள்ள நிரல் வரிகளை காட்டும்
nextnநிரல் இயக்கத்தை நிறுத்தப்புள்ளியில் இருந்து சார்பின் அடுத்த வரிக்கு அல்லது அதன் முடிவடையும் வரை நகர்த்திச்செல்லும்.
stepsநிரல் இயக்கத்தை நிறுத்தப்புள்ளியில் இருந்து தொடங்கி அடுத்த நெருக்கமான இடத்தின் வரையில் நிறுத்தம் செய்யும்
ppppநிரலின் ஏதேனும் மாறியின் மதிப்பினை அழகாக அச்சிடும்
quit or exitqநிரல் இயக்கத்தை திடீர் என நிறுத்திதம் செய்யும் அல்லது வெளியேரும்
returnrநிரல் இயக்கத்தை நிறுத்தப்புள்ளியில் இருந்து வெளியேறும்
pdb – பொதுவான கட்டளைகள்

முடிவுரை

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

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

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

ஓப்பன்-தமிழ் வெளியீடு – வரிசை எண் 0.97

ஒப்பன்-தமிழ் வரிசை எண் v0.97

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

$ pip install –upgrade open-tamil==0.97

என்று கட்டளை கொடுக்கலாம்.

1 புதிய மேம்பாடுகள்:

  1. மாத்திரை கணித்தல் – தமிழ் உரையில் உள்ள சொற்களின் மாத்திரை அளவை கணிக்க புதியசார்பு ‘tamil.utf8.total_maaththirai()’ என்று திரு. பரதன் தியாகலிங்கம் அவரால் பங்களிக்கப்பட்டது.
  2. வடமொழி சொல்பட்டியல் மோனியர்-வில்லியம்ஸ் அவரது அகராதியில் இருந்து திரிக்கப்பட்டு இங்கு சேர்க்கப்பட்டது
  3. ‘tabraille’ என்ற module-இல் கண்பார்வை குறை உள்ளவர்களினால் தமிழ் பாரத பிரெயில் என்ற தரத்தை கையாளும் வகை சில உத்திகள் உள்ளன.
  4. ‘kural’ என்ற module-இல் திருக்குறளை நேரடியாக கையாள சில உத்திகள் உள்ளன. இது 2013-இல் வெளிவந்த ‘libkural’ என்பதன் மீள்பதிவாகும்.
  5. ‘solthiruthi’ என்ற module-இல் எளிதான சில மேம்பாடுகள் செய்யப்பட்டுள்ளன – இவற்றினால் வரும் மாற்றுச்சொற்கள் சற்று மேன்மை அடையும்.6.  தமிழ் எழுத்துவழி எண்களை பகுப்பாய்வு செய்து எண்களாக மாற்ற ஒரு சார்பு #221
  6. olini.py supports natual language arithmetic evaluation in Tamil for
  7.        all numbers based on this work.7. ‘tamiltts’ என்ற ஒரு module-இல்  normalize numbers to numeral text என்றும் வேறு பல சொல்/உரை நெறிப்படுத்தும் பயன்பாடுகள் உள்ளன.   இதுவும் ஒரு பழைய நிரலில் மீள் பதிப்பு.
  8. ‘tamil.tace16’ – என்ற நிரல் தொகுப்பில் தமிழ் TACE16 என்ற குறியீட்டிற்க்கு உதவும்வழி சில நிரல் சார்புகள் உண்டு.
  9. ‘transliterate.ITRANS’ – என்ற நிரல் தொகுப்பில் ITRANS transliteration – ஒலிவழி தட்டச்சு செய்தல் உருவாக்கப்பட்டது

2 வழு நீக்கம்:

  1. பாமிணி எழுத்துருவில் இருந்து ஒறுங்குறியில் மாற்றத்தில் வழு நீக்கம் சரிபார்க்கப்பட்டது
  2. நெடில் பட்டியலை சரிபார்த்தல்
  3. Python3-இல் உகந்தவாறு sorting, ‘tamil.utf8.tamil_sorted’ என்ற சார்பு சேர்க்கப்பட்டது
  4. நாள், நேரம் – tamil.date நிரல் தொகுப்பில் உள்ள சில வழு நீக்கம் செய்யப்பட்டது

3 புரவலர்களுக்கு நன்றி தெறிவித்தல்

We thank @pycharm for donation of 1 seat professional license towards Open-Tamil development. __/|\__. Thanks to @infitt and Prof. @crselvakumar1 for their support toward 1-way airfare cost of attending 2017-Tamil Internet Conference in Toronto, Canada. https://github.com/Ezhil-Language

வாய்ப்பிற்கு நன்றி.

-முத்து (கலிபோர்னியா).

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

ஆடுகளம் – 2020

Tamil projects for 2019-2020

Over the course of this year, since translating Ruby Kin, and preparing a summary of 3 years work on spell-checker for Tamil Internet Conference – 2019, I’ve been thinking of next level of interesting projects.

The following have come to mind, expressed in Twitter @ezhillang in various forms. Here they are in simply chronological order,

  1. Translating “Data Structures and Algorithms” book in Tamil
  2. Translating/Writing a “Debugging Techniques” book in Tamil: ‘கணினி செயல்முறை நிரகளில் வழுநீக்கம்‘ – பயிற்சி, நூல்
    • Debugging techniques are important learning milestone for any professional software/hardware developer which are usually learnt on the job and essentially skipped in academia (perhaps for practical purposes).
  3. (Research/Proof-of-concept) Viterbi algorithm based spelling correction algorithm for Tamil
  4. (Research/Proof-of-concept) Concordance based context ambiguity resolution for Tamil spelling correction.

Contingent on our levels and degrees of success we can share our work in forums like Tamil Internet Conference, ACL or ACM, etc.

நிவாடா மாகனத்தில் மலையேரும் சமயம் மொட்டை வெயிலில் எடுத்த தம்படம் 🙂

As always collaborators are welcome: email: ezhillang -AT- gmail -DOT- com

தமிழ்கருவி

2007-இல் எனது முதல் தமிழ் மென்பொருளை உருவாக்கினேன். இன்று தொலைந்த மென்பொருள்கலில் ஒன்று. எப்படி தொலயவிட்டேன் ? காலம்.

மிதம் https://egovindia.wordpress.com/2007/01/09/tamil-transliteration-tool-using-gtk-toolkit-for-gnome-environment/

Screen Shot 2018-08-11 at 1.47.00 AM

 

Tournament Model

Muthu@SFO-May-2018.jpg

This year I had chance to speak at my undergraduate institution – a well recognized engineering school in Trichy, India – about various things concerning my professional development and understanding of Science, Engineering and innovation in my short career as software developer and scientist-in-training.

Primarily, my goal was to communicate the tournament model and how we may enjoy our time in educational institutions pursuing a quest for truth regardless of some of the outcomes – just because they are governed by the tournament model.

Consider your task: to pick a winner in 2-player games from a group of N (say 128 or 64 players – like a typical Tennis tournament [or teams of smaller sizes for IPL or World Cup cricket tournaments]) then goal is to organize the games as a championship format with league rounds and knock-out tournaments to eventual final which decides the winner. This is the tournament model.

An alternate version where number of teams/players participating is not a power of 2, we may setup the model as follows algorithm/pseudocode;

  1. Enter all teams/payers in a double-ended-queue [deque]
  2. Select first-2 teams in queue and let them play;
  3. Take the winner of this game and enqueue to the end of queue; discard the loser (obviously!)
  4. Now we have N-1 teams/players in the queue.
  5. Repeat steps 2-4, till number of players is 1.
  6. We have a winner!

Key insight of tournament model is the fact that small differences between entities participating in the model can be amplified by the model making winners, and effects like the Matthew effect can ensure initial advantages snowball over time [esp. in industries like entertainment, social networking etc.]

The tournament model decides frequency of India vs Pakistan cricket matches, why Nadal vs Federer is most likely grand-slam final match up; the system decides success of professional actors and actresses. Why are Kamal Hassan and Rajinikanth more famous than other talented male actors of their generation (e.g. Sathyaraj, Karthik, Prabhu, etc.)[not to mention other female actresses – a whole other question]. Modern day movie star rivalries are also plenty, to wit – Danush vs Simbu etc. in their ascent to fame.

Many principles of randomness of outcomes, and regression toward mean explain the outcomes in retrospect; but none of the techniques have an ability to explain these phenomenon in a predictive manner which one may seek.

Hence as students approaching a potentially lifetime of work in field of engineering or science, I recommend everyone to aspire to understand the fundamental pieces – to learn the instruments, notes, chords, scales of their musical pieces – not just the piece itself- so in the future you can compose your own orchestral music; so that you can build tools for future challenges that you may face – surely different from challenges you were taught to resolve – using an open ended approach to learning.

Tournament model also helps you handle failures – be it product, strategy, problem areas in life. Usually, losing at something is by not making the grade or placing second or being edge out is by being marginally “less” in some way, shape or form, compared to competition.

What is your experience with managing technology projects, and their outcomes ? Leave your comment below.

-M.A.

iMessage troubles with Telugu language display

I’m somewhat late to hear this news, but recently there was a bug in iMessage application of iOS and Mac platforms causing it to crash/freeze up as reported here.

The crashing character consists of 5 codepoints.

U+0C1C [Lo] TELUGU LETTER JA
U+0C4D [Mn] TELUGU SIGN VIRAMA
U+0C1E [Lo] TELUGU LETTER NYA
U+200C [Cf] ZERO WIDTH NON-JOINER
U+0C3E [Mn] TELUGU VOWEL SIGN AA

and has a complex ligature form.

Sadly the poor usage of Telugu language Unicode block is potential cause to discover the bug so late; however the root cause of bug is some unsightly buffer overflow in Apple’s codebase.

கஷ்டகாலம்.

Who knows if Tamil Unicode has any equivalent horrible bugs living in Android/Apple/Mac/Linux/Windows platforms. Hopefully not.

Chennai Python 24th, March, 2018

24th March, 2018,  Chennai Python Meet-up

Open-Tamil and Ezhil-Language Projects

“எழில் என்பது முதல் திர மூலமாக கிடைக்கக்கூடிய தமிழ் ஸ்கிரிப்டை அடிப்படையாகக்
கொண்ட நிரலாக்க மொழி ஆகும், இது விண்டோஸ் 32, 64 மற்றும் Ubuntu, Fedora Linux மற்றும் Docker தளங்களில் 2017 ஆம் ஆண்டில் வெளியான http://ezhillang.org. எழில் ஒரு பைத்தான்-அடிப்படையிலான மொழிஇயக்கி. வளர்ச்சி GitHub வழியாக நடைபெறுகிறது.

திறந்த-தமிழ் தமிழ் நெருக்கமாக தொடர்புடைய தமிழ் மொழி செயலாக்க கருவிகள் கொன்டது; நூலகம் ஆரம்பத்தில் எழில் மொழியின் ஒரு கீற்றாக துவங்கியது; ஆனால் விரைவாக வார்த்தை-வடிகட்டுதல், N- கிராம் பகுப்பாய்வு, புணற்சசி இலக்கணம், தமிழ் எழுத்துப்பிழை சொல்திருத்தி உருவாக்கம் முதலியன, பல மொழிகளில் பைத்தான், முக்கியமாக, ஜாவா, ரூபி முதலியவற்றிற்கான தமிழ் தொகுப்புகள் பரிசுரம் செய்யபட்டன். http://tamilpesu.us வலையில், மற்றும் Play Store இல் Kalsee பயன்பாட்டில் எங்கள் வேலைகளை பயன்படுத்தலாம்.”

600_469542627

 

Thanks to kind arrangements of friends in Chennai Python, and open-tamil community I had an opportunity to make a presentation on Open-Tamil and Ezhil-Lang projects, and completion. Talk was well received, and delivered in unique Tamil mixed with English due to comfort of being in Chennai only!