வேண்டும் வேண்டும் என வேண்டும்]]>வெற்றிகள்
என்னிடம் போதும் போதும் என கூறும் தோல்விகள்
சிறுசிறு வெற்றிக்கும் மகிழ்ச்சி அடைந்தேன் அன்று
தினமும் மூன்று...கிடைக்குமா? சற்று பார்ப்போம் முயன்று
தீராக் காதல் அதீத அன்பினால் தினமும் மோதல்
போதும் எல்லாம் என்று முடிக்கையில் மீண்டும் பூக்கும் சிறு காதல்
ஊடலும் முடியவில்லை கோபமும் குறையவில்லை
முயற்சி செய்கிறேன் அமைதியாக! சந்தேகங்கள் எழாமலில்லை
மதிமுகம் காணவந்தவன் நிம்மதி தேடியே அலைகிறேன்
விதை விதைக்கையில் மரம் தழைக்குமா யோசிக்கிறேன்
பிடித்ததை செய்கையில் பித்துப் பிடித்து போகிறது
கதையை முடிக்க செல்கையில் கவிதையோ தொடங்குகிறது
-- --
எழுத்து : ஹரிஹரன் உமாபதி
வரைகலை: செய்யறிவு மற்றும் கிம்ப்(Gimp)
ஒரு மரக்கன்று வழங்கும் நிகழ்வில் இருக்கும் மரக்கன்றுகள் என்னை பார்த்து கேட்டன.
சும்மாதானே நிற்கிறாய்! எங்களில் ஒருவரை எடுத்து செல் என்றது.
மரக்கன்றுகளை வளர்க்க மனமிருக்கிறது ஆனால் வீட்டில் இடமில்லை என்று எவ்வாறு அவைகளுக்கு நான் புரியவைப்பேன்! .
]]>நீங்கள் ஒரு நாள் சரியாக இல்லாத (messy) code-ஐ கண்டிப்பாக நிச்சயமாக ஏதோ ஒரு வழியில் பெறுவீர்கள்.
அதை எழுதிய developer-ஐ கேலி செய்ய வேண்டாம். சில சமயங்களில் அது நீங்கள் எழுதியதாக கூட இருக்கலாம்.
பல developers ஒரு file-ஐத் திறந்தவுடன்,
“இந்த குப்பையை யார் எழுதியது ? எல்லாத்தையும் rewrite பண்ணிடலாம்” என்று சொல்வதை நான் பார்த்திருக்கிறேன்.
ஆனால் Context மிகவும் முக்கியம்.
அந்த நிர:
அதனால் code-ஐ மட்டும் பார்த்து தீர்ப்பு சொல்லக் கூடாது.
இதற்கு ஒரு நல்ல விதி இருக்கிறது — Boy Scout Rule.
“நீ கண்ட code-ஐ விட,
அதை கொஞ்சமாவது சுத்தமாக்கி விட்டு போ.”
Day 1-லேயே உலகத்தையே மறு உருவாக்கம்(rewrite) செய்ய வேண்டிய அவசியம் இல்லை.
பல சமயங்களில் அது தேவையில்லாமல் கூட இருக்கலாம்.
வேலை செய்யும் இடங்களில்,
சின்ன சின்ன refactor-களை செய்து,
code-ஐ மெதுவாக நல்ல நிலையில் கொண்டு வருவது தான் புத்திசாலித்தனம் அதுதான் எளிமையாக செய்யக்கூடியதும் கூட.
இன்னொரு முக்கியமான கருத்து — Chesterton’s Fence.
“ஒரு வேலி ஏன் போடப்பட்டது என்று தெரியாமல்,
அதை இடிக்கக் கூடாது.”
அந்த logic, அந்த hack, அந்த workaround —
அது ஏதோ ஒரு காரணத்துக்காக அங்கே இருக்கலாம்.
சில சமயங்களில் காரணங்கள் கூட குறிப்பிடப்பட்டிருக்காது.
அந்த காரணத்தை புரிந்து கொள்ளாமல் மாற்றினால்,
புதிய பிரச்சனைகள் உருவாகும்.
இறுதியாக ஒரு சிந்தனை:
நீங்கள் எதைக் அதிகம் ரசிக்கிறீர்கள்?
இருக்கும் code-ஐ புரிந்து, மெதுவாக மேம்படுத்துவதையா?
அல்லது
புதிதாக, greenfield project-ஐ ஆரம்பிப்பதையா?
இரண்டும் developer வாழ்க்கையின் ஒரு பகுதி தான்.
ஆனால் நல்ல developer என்பவர்,
கெட்ட code-ஐ பார்த்து கோபப்படாமல்,
அதன் பின்னணி கதையை புரிந்து கொண்டு,
அதை நாளுக்கு நாள் சிறப்பாக்குபவரே.
மாற்றங்களே வினா மாற்றங்களே விடை!
ஆகவே சற்று சிந்தித்து செயலாற்றுங்கள்!
]]>In 2024, I have started porting a python library open tamil
https://github.com/Ezhil-Language-Foundation/open-tamil/.
I faced difficulties on tracking the port status of the application and noting the python symbols with php implementation with testing and documenting the changes over time because the code base itself not a small one.
so i have decided to prioritize tracking than the porting.
kick started the tracking with a mapping file and a php script fine tuned the process with explaining the difficulties
Step 1 :
i want a porting status tracker in php which reads the symbols in a python code and it require equivalent symbol with working status and documentation is it possible?
CHATGPT : Yes, it’s absolutely possible 
You can build a porting status tracker in PHP that analyzes Python code, extracts symbols (functions, classes, methods, variables), and then checks against a mapping of equivalent PHP symbols with their status (e.g., ported / not ported / partially working) and optional documentation.
Here’s how you can approach it:
High-Level Approachdef function_name, class ClassName, global variables, and imports.ast module and returning JSON for PHP to read.python_symbol → php_equivalent, status, notes{ "print": { "php_equivalent": "echo", "status": "ported", "notes": "Direct replacement" }, "len": { "php_equivalent": "count", "status": "ported", "notes": "Works on arrays" }, "dict": { "php_equivalent": "associative array", "status": "in-progress", "notes": "Limited support" } }Total Symbols: 50 Ported: 30 (60%) Pending: 20 (40%)
Example PHP Implementation (Simple Version)<?php
class PortingTracker {
private $mapping;
public function __construct($mappingFile) {
$this->mapping = json_decode(file_get_contents($mappingFile), true);
}
public function analyzePythonFile($pythonFile) {
$code = file_get_contents($pythonFile);
// Simple regex to find defs and classes
preg_match_all('/def\s+([a-zA-Z0-9_]+)/', $code, $functions);
preg_match_all('/class\s+([a-zA-Z0-9_]+)/', $code, $classes);
$symbols = array_merge($functions[1], $classes[1]);
$report = [];
foreach ($symbols as $symbol) {
if (isset($this->mapping[$symbol])) {
$report[$symbol] = $this->mapping[$symbol];
} else {
$report[$symbol] = [
"php_equivalent" => null,
"status" => "missing",
"notes" => "No mapping found"
];
}
}
return $report;
}
}
// Example usage
$tracker = new PortingTracker("mapping.json");
$result = $tracker->analyzePythonFile("example.py");
echo "<table border='1' cellpadding='5'>";
echo "<tr><th>Python Symbol</th><th>PHP Equivalent</th><th>Status</th><th>Notes</th></tr>";
foreach ($result as $py => $info) {
echo "<tr>
<td>{$py}</td>
<td>{$info['php_equivalent']}</td>
<td>{$info['status']}</td>
<td>{$info['notes']}</td>
</tr>";
}
echo "</table>";
Output Example (HTML Table)| Python Symbol | PHP Equivalent | Status | Notes |
|---|---|---|---|
| echo | ported | Direct replacement | |
| len | count | ported | Works on arrays |
| dict | associative array | in-progress | Limited support |
| MyClass | NULL | missing | No mapping found |
Next-Level Featuresast module) to extract symbols more reliably instead of regex.python3 script.py example.py > symbols.json and then load that JSON in PHP.)
Do you want me to make a standalone PHP tool (self-contained with regex parsing), or do you prefer a hybrid approach (use Python AST to export JSON, then PHP reads it)?
The hybrid one is much more reliable for real-world Python code.
This answer make me a decision on the porting of the python.
Started implementing the same but I have to satisfy the how ? inside me.
]]>Dec 7, 2024 20:30-22:00 IST
Members Joined
Boopalan S
Syed Jafer
Hariharan
Topics discussed
Where to maintain the code base ?
Language to be maintained in the code ? TBD
-> check point => Jan 20th.
காஞ்சிபுரம் லினக்ஸ் பயனர் குழுவின் ஒருங்கிணைப்பாளர் பொறுப்பிலிருந்து விடுபடுவதாக திரு. பரமேஸ்வர் அருணாச்சலம் அவர்கள் வாராந்திர கூட்டத்திலும் ,மடல் பட்டியலிலும் அறிவித்திருந்தார்.
நான் காஞ்சி லினக்ஸ் பயனர் குழுவில் இணைந்ததில் இருந்து பரமேஸ்வர் அவர்கள் சிறப்பாக வாராந்திர மற்றும் மாதாந்திர கூட்டத்தினை நடத்திவந்தார்.
வரும் வாரங்களில் அவரைப் போலவே சிறப்பாக வாரந்திர மற்றும் மாதாந்திர கூட்டங்களை நடத்தும் ஒருங்கிணைப்பாளராக நான் பொறுபேற்றுக்கொள்ள இருக்கிறேன்.
சில பொறுப்புகளை ஏற்று நடத்துதலில் நல்ல நிர்வாக திறனை பெறலாம். அப்படி நான் கற்பனவற்றையும் எழுதுகிறேன் வலைப்பதிவுகளாக…
]]>ஆக என்ன பயன்?
ஒரு ftp தளத்திலிருந்து கோப்பு மேலாளர்(nautilus,nemo…etc) மூலமாகவே ஒரு தளத்தினை வன்வட்டில் உள்ளது போலவே அணுக இயலும்.
எவ்வாறு நிறுவுவது?
sudo apt install curlftpfs
எனும் கட்டளையை இயக்கி நிறுவலாம்.
எவ்வாறு பயன்படுத்துவது?
முதலில் நமது கோப்பு அமைப்பில் நாம் பயன்படுத்தபோகிற ftp தளத்திற்கு ஒரு கோப்புறை உருவாக்குக (கோப்புறைக்கு 777 அனுமதி வழங்கு).
mkdir my-ftp
chmod 700 my-ftp
பின்னர் பின்வரும் கட்டளைகளில் எதாவது ஒன்றை இயக்கி நாம் ftp தளத்தினை இணைக்கலாம்.
curlftpfs ftp://username:password:ftpsite.com ~/my-ftp
(அ)
curlftpts ftpsite.com -o user="username:password" ~/my-ftp
(அ)
curlftpfs ftpsite.com
எந்த அளவு பாதுகாப்பானது ?
உங்களுக்கு உங்களுடைய ftp வழங்கியின் கடவுச்சொல் செயல்பாடு அளவில் (process level) பிற பயனர்களுக்கு தெரியாமல் இருக்க .netrc கோப்பில் பயனர் பெயர் மற்றும் கடவுச்சொல் ஆகியவற்றை காட்டாமல் பயன்படுத்தலாம்.
~/.netrc எனும் கோப்பினை உங்களது விருப்ப உரைதொகுப்பியில் திறக்கவும். கோப்பு இல்லையேல் புதியதொன்றை உருவாக்கிகொள்ளவும்.
machine ftpsite.com username yourfancyusername password yourhardpassword
கோப்பினில் மேற்கண்டவாறு ftp தளத்தின் பெயர் பயனர் பெயர் மற்றும் கடவுச்சொல் ஆகியவற்றை சேமித்துக்கொள்ளவும்.
கோப்பு ஆனது 600 அனுமதி கொண்டிருப்பதை உறுதிசெய்துகொள்ளவும். உங்களது கடவுச்சொல் வெறும் உரையாக சேமிக்கப்பட்டிருக்கிறது. பிற பயனர்களின் தேவையற்ற அனுகலை இது தடுக்கிறது.
FTP : கோப்பு அனுப்பும் நெறிமுறை plain text ஆக இருப்பதால் அதில் நீங்கள் பெரிய பாதுகாப்பை எதிர்ப்பார்க்க முடியாது உங்களுடைய திறன்பேசியின் hotspot , வீட்டில் இருக்கும் wifi மூலமாக மட்டுமே அணுகுவீர்கள் எனில் நல்லது.
FTPS : கோப்பு அனுப்பும் நெறிமுறை பாதுகாக்கப்பட்டது இதில் மறைப்பாக்கம் (encryption) மூலம் பாதுகாக்கப்படுவதால் ftp யை விட சற்று பாதுகாப்பானது
SFTP : பாதுகாப்பான கோப்பு பரிமாற்ற நெறிமுறை ஆனது sshன் மறைப்பக்க யுக்திகளை பின்பற்றுவதால் மேற்சொன்ன மூன்றில் இது அதிக பாதுகாப்பினை வழங்குகிறது.
மேலும் அறிய
https://curlftpfs.sourceforge.net/
https://techworldkb.wordpress.com/2014/07/02/how-to-set-ftp-autologin-with-netrc-file-in-linux/
FUSE- https://medium.com/@goamaral/fuse-filesystem-b44768f27aa2
வினாக்கள் இருப்பின் கமண்ட்ஸ் பகுதியில் கேட்கவும்.
]]>பிஹெச்பி பொதிகளை பிஹெச்பி கம்போசர்-உடன் உருவாக்க மற்றும் வெளியிடுவது ஒரு நேரடியான வழிமுறை இந்த வழிமுறையை பின்பற்றினால் நாம் எளிமையாக பிஹெச்பி சமூகத்துடன் நமது நிரல்களை பொதிவடிவத்தில் பகிர்ந்துகொள்ளலாம்.
கம்போசர் – (பிஹெச்பி சார்புகளின் நிர்வாகி) – PHP Dependency Manager
தேவையானவை:
உங்களது கணினியில் பின்வருவற்றை நிறுவி இருப்பது அவசியம்.
படிகள்:
படி 1: நம்முடைய பொதிக்கான ஒரு கோப்புறையை உருவாக்கி கொள்ளவும்.
mkdir open-tamil
cd open-tamil
படி 2: கம்போசர் பொதியை துவக்குதல்
நம் கணினியில் கம்போசர் பொதியை துவக்க பின்வரும் கட்டளையை பயன்படுத்தவும்.
composer init
மேற்கண்ட கட்டளையை பயன்படுத்தும் கட்டளைவரி இடைமுகம் பின்வரும் கேள்விகளை கேட்கும்
Package name: your-username/my-php-package
Description: A sample PHP package
Author: Your Name <[email protected]>
Minimum Stability: stable (or leave blank)
Package Type: library
License: MIT
இந்த கேள்விகளுக்கு விடையளித்த பின்பு பிறசார்புகளை கேட்கும் no கொடுக்கவும்.
இறுதியாக composer.json உருவாக்க தூண்டியில் yes கொடுத்து உருவாக்கி கொள்ளவும்.
படி 3 :
composer.json கோப்பு உருவாக்கிய பிறகு அது பின்வருமாறு தோன்றும்
{
"name": "your-username/my-php-package",
"description": "A sample PHP package",
"type": "library",
"require": {
"php": ">=7.4"
},
"autoload": {
"psr-4": {
"MyPackage\\": "src/"
}
},
"authors": [
{
"name": "Your Name",
"email": "[email protected]"
}
],
"license": "MIT"
}
படி 4
பின்னர் உங்களது குறிமுறையை கிட் பயன்படுத்தி கிட்ஹப்பில் பதிவேற்றவும்.
படி 5
குறியீட்டை கம்போசரில் பதிப்பிக்க பேக்கேஜிஸ்டில் உள்நுழையவும். பின்னர் submit பொத்தானை அழுத்தவும்

submit பொத்தானை அழுத்தியவுடன் பொதியை எற்றும் பக்கம் திறக்கப்பட்டு உங்களது கிட்ஹப் கணக்கில் உள்ள பொதுவாக அனுமதியில் இருக்ககூடிய ரெபொசிடரியின் வலைமுகவரியை உள்ளிட்டு சரிபார்க்கும் பொத்தானை அழுத்தி சரிபார்த்துகொள்ளவும்.
குறிப்பு : கம்போசரை பொறுத்தவகையில் பதிப்பிப்பவர் வென்டார் (vendor) என்று குறிப்பிடப்படுவர். நான் hariharan என்ற வென்டார் பெயரை பயன்படுத்தி இரு பொதிகளை பதிப்பித்துள்ளேன்.

புதிய பொதியை சரிபார்த்த பின் பொதியானது பதிப்பிக்க தயராகிவிடும்.
பார்க்க :
https://packagist.org/packages/hariharan/open-tamil
https://packagist.org/packages/hariharan/thirukural
நிறுவி பார்க்க:
composer require hariharan/thirukural
composer require hariharan/open-tamil
]]>அண்மையில் நான் டூயல் பூட் முறையில் விண்டோசுடன் நிறுவிய அனுபவத்தினை இந்த பதிவில் காணலாம்.
நான் SSDல் விண்டோஸ் இயங்குதளம் பயன்படுத்திவருகிறேன். என்னுடைய இன்னொரு HDDல் உபுன்டு இயங்குதளம் வைத்திருக்கிறேன். அந்த வன்வட்டு பழுதடையும் தருவாயில் இருப்பதால் SSDல் உபுண்டு இயங்குதளம் நிறுவ தயாரானேன்.
எப்பொழுதும் புதிய இயங்குதளம் நிறுவ தாயராகும் போது காப்பு பிரதி(Backup) எடுத்துவைத்து தயாராகவும்.
குறிப்பு : நான் இயங்குதளம் 3 முறை நிறுவியுள்ள அனுபவத்தில் காப்பு பிரதி எடுக்காமல் தொடங்கினேன். ஆனால் இவ்வாறு செய்வது பரிந்துரைக்கபடவில்லை.
நான் லைவ் USB ventoy எனும் மென்பொருளின் உதவியுடன் தயார் செய்தேன்.
References :
Setting UP ubuntu’s GRUB as primary bootloader using efibootmgr https://superuser.com/questions/1247300/how-to-make-uefi-bios-start-grub-not-windows
]]>