Thursday 18 February 2010

ഡീബഗ്ഗിങ്ങ്

മുന്നറിയിപ്പ് : ഈ പോസ്റ്റിന്റെ ചില ഭാഗങ്ങള്‍ മനസ്സിലാകണമെങ്കില്‍ അല്പം ലോകവിവരം വേണ്ടിവരും. ലിങ്കുകള്‍ വായിക്കുക. മനസ്സിലാകുന്നില്ലെങ്കില്‍ വിട്ടേക്കുക.

രണ്ടുമൂന്ന് മാസമായി ഈ വഴിക്ക് വന്നിട്ട്.
ആഗ്രഹമില്ലാഞ്ഞിട്ടല്ല - വല്ലാത്ത തിരക്കായിരുന്നു.
ജീവിതം ലാവിഷായി നായ നക്കിക്കൊണ്ടുമിരിക്കുന്നു.

ഈ ഓണംകേറാമൂലയിലേക്ക് വന്നതില്‍പ്പിന്നെ ആദ്യമായി പരീക്ഷകളെല്ലാംകൂടി എന്നെ വളഞ്ഞിട്ട് തല്ലാന്‍ തുടങ്ങി. മാര്‍ക്ക് എഴുപത് ശതമാനത്തില്‍ കുറഞ്ഞാല്‍ ബി.പി. കൂടുന്ന എനിക്ക് ബീജഗണിതത്തില്‍ അതിന്റെ പകുതിയേ കിട്ടിയുള്ളൂ. ഈ പോസ്റ്റ് എട്ടുപത്തു തവണ വായിക്കേണ്ടി വന്നു. ഒന്നുരണ്ടു വിഷയത്തില്‍ പഠിപ്പിക്കുന്നതൊന്നും കുത്തിയിരുന്ന് ചിന്തിച്ച് മനസ്സിലാക്കാന്‍ സമയം കിട്ടുന്നില്ല. മനസ്സിലാകുന്ന വിഷയത്തിന്റെ ഗതി ഇങ്ങനെയും.
വിക്കിപീഡിയയില്‍ കാലുകുത്താന്‍ തന്നെ പറ്റുന്നില്ല. ഇപ്പോള്‍ എഴുതുന്ന സാധനം തീരുമ്പോഴേക്ക് വിക്കിയില്‍ ഒരിരുപതിനായിരം ലേഖനമെങ്കിലും ആകുമെന്ന സ്ഥിതിയാണ്.
പ്രൊജക്റ്റുകളുടെ കാര്യം അതിലും രസം. ക്യൂഡയും പാരലല്‍ പ്രോഗ്രാമിംഗും ഒക്കെ വച്ച് പ്രക്ഷുബ്ധതയെക്കുറിച്ച് പഠിക്കാനായി എഴുതുന്ന കോഡ് തുടങ്ങിയിടത്തുനിന്ന് അനങ്ങുന്നില്ല. ഫിലോസഫി പ്രൊജക്റ്റ് പ്രൊപ്പോസ് ചെയ്തതില്‍ പിന്നെ പ്രൊഫസറുടെ മുഖം പോലും കാണാന്‍ പറ്റിയിട്ടില്ല. ജര്‍മ്മന്‍ ക്ലാസ്സില്‍ കയറിച്ചെല്ലുമ്പോള്‍ ടീച്ചര്‍ക്ക് മാവേലിയെ കണ്ട ആഘോഷമാണ്.
ഇന്‍സ്റ്റിറ്റ്യൂട്ടിന്റെ ടെക്നിക്കല്‍ ഫെസ്റ്റിവലില്‍ ഇപ്രാവശ്യം കാര്യമായി ഒന്നും ജയിക്കാന്‍ സാധിച്ചില്ല. അമേരിക്കയിലേക്ക് നുഴഞ്ഞ് കയറാനുള്ള പരിപാടിയിലെ നൂലാമാലകള്‍ വേറെയും.

ആകെപ്പാടെ പരമസുഖം - കഴിഞ്ഞ നാലഞ്ച് സെമസ്റ്റര്‍ ആര്‍മ്മാദിച്ചത് നിരപ്പാകുന്നത് ഇങ്ങനെയാണ്.

ഇനി കാര്യത്തിലേക്ക്. ഇതിനൊക്കെ പുറമെ ഇവിടെ ചെയ്യുന്ന വേറൊരു പരിപാടിയാണ് ജുഗുനു. ഈ കലാപങ്ങള്‍ക്കൊക്കെ ഇടയില്‍ ഇതില്‍ തലയിടാതെ മുങ്ങി നടക്കാറാണ് സാധാരണ പതിവ്. കുറേപേര്‍ ഇക്കാര്യത്തില്‍ എന്നെപ്പോലെയായതിനാലും പരിപാടി അല്‍പം വിഷമമുള്ളതായതിനാലും ഒടുവില്‍ വാണം വിടുന്ന ഡേറ്റ് ഇങ്ങനെ നീണ്ടുനീണ്ടുപോവുകയാണ്. ഇതിന്റെ പിന്നില്‍ പ്രവര്‍ത്തിച്ച ഒരു സെറ്റ് വിദ്യാര്‍ത്ഥികള്‍ ഈ സെമസ്റ്റര്‍ തീരുമ്പോഴേക്ക് മൂത്തുനരച്ച് പാസൗട്ടാകാന്‍ പോകുകയാണെന്നതുകൊണ്ട് ഒരുവിധം കൊണ്ടുപിടിച്ച് പണി നടക്കുന്നുണ്ട്. എന്നെ മിന്നാമിനുങ്ങന്മാര്‍ക്ക് വല്ല്യ വിശ്വാസമായതിനാല്‍ ഇടയ്ക്കിടെ ഓരോ പണി ചെയ്യാന്‍ തരും. കോഡിങ്ങാണ് അധികവും. മൈക്രോകണ്ട്രോളറുകളെ എനിക്ക് കാര്യമായി പരിചയമില്ലാത്തതുകൊണ്ട് സാധാരണ സിയില്‍ കോഡ് ചെയ്യുന്നു - അത് മൈക്രോകണ്ട്രോളറിലേക്ക് പോര്‍ട്ട് ചെയ്യുന്ന കാര്യം ബാക്കിയുള്ളവര്‍ നോക്കിക്കോളും.

ഇന്ന് അതുപോലൊരു പണി കിട്ടി. ചെയ്യാന്‍ നോക്കിയപ്പോള്‍ ശരിക്കും പണികിട്ടി. കാര്യം സിമ്പിളായിരുന്നു. ബഹിരാകാശത്തിരിക്കുന്ന ഉപഗ്രഹത്തിന് ഹലോ പറയാനുള്ള കോഡെഴുതണം. അതിന് ഓരോ പ്രോട്ടോകോളും കോപ്പും. അവസാനം എല്ലാ പ്രോട്ടോകോള്‍ നിയമങ്ങളും അനുസരിച്ച് ഡാറ്റ പാക്കറ്റാക്കി സൈക്ലിക് റിഡണ്ടന്‍സി ചെക്കും ചേര്‍ത്ത് ബിറ്റ് സ്റ്റഫ് ചെയ്ത് അയക്കണം. ഒക്കെ ശരിയാണെങ്കില്‍ റിസീവ് ചെയ്യുന്നിടത്ത് ബിറ്റ് സ്റ്റഫ്ഫൊക്കെ ഒഴിവാക്കി വരുമ്പോഴേക്ക് അയച്ച സാധനം തന്നെ കിട്ടണം.

പക്ഷെ നടക്കുന്നില്ല. ചിലപ്പോള്‍ പാക്കറ്റുകള്‍ നഷ്ടമാകുന്നു. ചിലപ്പോള്‍ അയക്കുന്നതല്ല കിട്ടുന്നത്. കുറേ ദിവസമായി ഒ.ബി.സി (ഓണ്‍ ബോര്‍ഡ് കമ്പ്യൂട്ടിങ്ങ് - അല്ലാതെ റിസര്‍വേഷനുമായി യാതൊരു ബന്ധവുമില്ല) സബ്സിസ്റ്റത്തിലെ മൂന്നാലുപേര്‍ ഓരോ മൂലക്ക് പിടിച്ച് നേരെയാക്കാന്‍ നോക്കിക്കൊണ്ടിരിക്കുകയാണ്. ഇന്നിത് തീര്‍ത്തിട്ടേയുള്ളൂ എന്ന് ഞാനും സബ്സിസ്റ്റം തലവന്‍ അങ്കുഷ് ദേശായിയും തീരുമാനിച്ചു. സൈഡില്‍ മാന്വല്‍ ലേബര്‍ ചെയ്യാനായി മിത്തല്‍ സിസ്റ്റഴ്സും (എനിക്ക് ഹാര്‍ഡ്‌വെയറിനെക്കുറിച്ച് അഞ്ചുപൈസക്ക് വിവരമില്ലാത്തതുകൊണ്ട് കോഡിങ്ങിതര പരിപാടികള്‍ ബാക്കിയുള്ളവര്‍ക്ക് വിട്ടുകൊടുക്കുകയാണ് പതിവ്).

കോഡ് കുത്തിയിരുന്ന് വായിച്ചുനോക്കാന്‍ തുടങ്ങി. അഞ്ചു മിനിറ്റിന് ഒരു ലോജിക്കല്‍ എറര്‍ വച്ച് പൊന്തിവരാന്‍ തുടങ്ങി. അവസാനം ഒപ്റ്റിമൈസേഷനും സിംപ്ലിഫിക്കേഷനും ഒക്കെ കഴിഞ്ഞ് രണ്ടാളും കോഡ് ശരിയാണെന്ന ധാരണയിലെത്തി. പക്ഷെ ഇതുകൊണ്ട് മാത്രം കാര്യമില്ല - ഇതിനുമുമ്പ് നാലഞ്ച് തവണയെങ്കിലും ഇതുപോലെ ധാരണയിലെത്തിയതും റിസീവര്‍ വിസമ്മതിച്ചതും ഒക്കെ ആയിരുന്നു. അതുകൊണ്ട് ടെസ്റ്റ് ചെയ്യാന്‍ മിത്തല്‍ സിസ്റ്റഴ്സിന് വിട്ടുകൊടുത്തു. പ്രതീക്ഷിച്ചതുപോലെ റിസീവര്‍ അതേപടി.

മൈക്രോകണ്ട്രോളറിന്റെ മേല്‍ ഒരു ദിവസം എന്നെക്കൊണ്ട് നേരിട്ട് പണിയെടുപ്പിക്കുമെന്ന് അങ്കുഷ് ദൃഢപ്രതിജ്ഞയെടുത്തിട്ട് മാസങ്ങളായി. ഞാനാ വഴിക്ക് ഇതുവരെ പോയിട്ടില്ല. ഇന്ന് പക്ഷെ വേറെ വഴിയില്ല. കോഡിലും ഔട്പുട്ടിലും കണ്ണുമിഴിച്ച് നോക്കിയിരിക്കാന്‍ തുടങ്ങി. അവസാനം പിടികിട്ടി. കോഡ് പുതിയത് എഴുതിയെങ്കിലും പഴയതാണ് റണ്‍ ചെയ്തിരിക്കുന്നത്. പുതിയ കോഡ് റണ്‍ ചെയ്ത് ഔട്പുട്ടെങ്ങനെയുണ്ടെന്ന് നോക്കാന്‍ പറഞ്ഞു.

ഇതുപോലൊരു എറര്‍ സാധാരണ പിടിക്കാന്‍ പറ്റിയാല്‍ ബാക്കിയൊക്കെ ശരിയാകേണ്ടതാണ്. ടെസ്റ്റിങ്ങ് ശരിയായെന്ന വാര്‍ത്തയുമായി മിത്തല്‍ സിസ്റ്റഴ്സ് വരുന്നതും കാത്ത് ഞാനിരുന്നു. പക്ഷെ റിസീവറാരാ മോന്‍? ഓരോ രണ്ടാമത്തെ പാക്കറ്റും വിഴുങ്ങിയിരിക്കുന്നു.

ഞാന്‍ ഡിറ്റക്റ്റീവ് മോഡിലേക്ക് മാറി. തെറ്റ് വല്ലതും കണ്ടാല്‍ കുട്ടികളുടെ കോഡ് വായിച്ച് അതിന് കാരണം കണ്ടെത്തുകയായിരുന്നു ഒളിമ്പ്യാഡ് കാമ്പില്‍ എന്റെ പ്രധാന പണി. ഇവിടെയും അതുതന്നെ ചെയ്യണം. അവസാനം കാര്യം മനസ്സിലായി - ബിറ്റ് സ്റ്റഫിങ്ങ് നടക്കുന്ന പാക്കറ്റുകളാണ് നഷ്ടമാകുന്നത്. ഡിഡക്റ്റീവ് റീസണിങ്ങ് വഴി തെറ്റും മനസ്സിലാക്കാന്‍ പറ്റി - ബിറ്റ് സ്റ്റഫ് ചെയ്ത് അവസാനം വരുന്ന അര-മുക്കാല്‍ ബൈറ്റ് ആരും അയക്കുന്നില്ല, റിസീവറിലെ കോഡ് അതിനെ പ്രോസസ് ചെയ്യുന്നതും മര്യാദയ്ക്കല്ല. കോഡ് ഞാന്‍ ശരിയാക്കി. ബൈറ്റുകള്‍ മൊത്തം അയക്കാന്‍ സിസ്റ്റഴ്സിനോട് പറയുകയും ചെയ്തു.

എന്നിട്ടും നീ റണ്ണീലല്ലോ...
എനിക്ക് പ്രാന്താവാന്‍ തുടങ്ങി. കോഡ് മൊത്തം വീണ്ടും വീണ്ടും വായിച്ചു. അസൈന്‍മെന്റ് ചെയ്യാനുണ്ടെന്ന് പറഞ്ഞ് മിത്തല്‍ സിസ്റ്റഴ്സും മുങ്ങി. അങ്കുഷ് മാത്രം ഫെറാറി വില്‍ക്കാന്‍ പോലുമില്ലാത്ത സന്യാസിയെപ്പോലെ (കടപ്പാട് : സിദ്ധാര്‍ത്ഥ് മോങ്ങ) കൂളായിരിക്കുന്നു. ഒടുവില്‍ ഞങ്ങള്‍ക്ക് തോന്നി :പ്രശ്നം റിസീവറിന്റെ കോഡിലായിരിക്കില്ല, അയക്കുന്ന പാക്കറ്റ് തന്നെ തെറ്റായിരിക്കാം. അങ്കുഷ് പോയി നോക്കി. അയക്കുന്ന ക്യാരക്ടറുകളുടെ ലിസ്റ്റില്‍ പുതുതായി ചേര്‍ക്കാന്‍ പറഞ്ഞ 0x00 കൂടി ചേര്‍ത്തിരിക്കുന്നതായി കാണിച്ചുതന്നു.

രണ്ടുപേരും കാന്റീനിലേക്ക് പോയി ഓരോ ചിക്കന്‍ ബര്‍ഗറടിച്ച് തിരിച്ചുവന്നു. ഇതിനിടയില്‍ ഒരുവിധം ഇന്ററപ്റ്റുകളുടെയും ഡിലേകളുടെയും ഒക്കെ തിയറി മൊത്തം ഡിസ്കസ് ചെയ്ത് പ്രശ്നം അവിടെയൊന്നുമല്ലെന്ന് ഉറപ്പിച്ചിരുന്നു. പിന്നെ കോഡ് റീവാമ്പ് ചെയ്യലായി പണി. പ്രോസസിങ്ങ് സമയം തുല്യമായി വിഭജിക്കുന്ന രീതിയില്‍ കോഡ് മാറ്റുകപോലും ചെയ്തു. ഒടുവില്‍ കാച്ചിക്കുറുക്കി കോഡ് വല്ല കവിതാമത്സരത്തിനും അയക്കാമെന്ന സ്ഥിതിയായി.

പക്ഷെ റിസീവര്‍ മാത്രം വഴങ്ങുന്നില്ല. കൂട്ടക്കൊലയ്ക്കൊരു വഴിയും കൊല്ലേണ്ട ആളുകളുടെ പട്ടികയുമായി പിന്നെ എന്റെ ചിന്താവിഷയം. വിദേശസര്‍വകലാശാലകള്‍ ഉപഗ്രഹമുണ്ടാക്കുന്നതു മാത്രം ഇന്ത്യയില്‍ റിപീറ്റ് ചെയ്താല്‍ പോരല്ലോ, വെര്‍ജീനിയ ടെകിനും ഇന്ത്യയില്‍ ഒരു അപരന്‍ വേണ്ടേ? അതും എവിടേം എത്തുന്നില്ല എന്നായപ്പോഴാണ് പെട്ടെന്ന് തലയില്‍ ബള്‍ബ് മിന്നിയത്. പാക്കറ്റ് അയക്കുന്ന കോഡ് ഒന്നുകൂടി വായിച്ചുനോക്കി. അയക്കുന്ന ക്യാരക്ടറുകളുടെ ലിസ്റ്റില്‍ പുതുതായി 0x00 ചേര്‍ത്തിരിക്കുന്നെങ്കിലും ക്യാരക്റ്ററുകളുടെ എണ്ണം കൂട്ടാത്തതുകൊണ്ട് അത് അയക്കപ്പെടുന്നില്ല. തല ചുമരിലടിച്ച് പൊളിക്കാനുള്ള പ്രലോഭനമൊഴിവാക്കാന്‍ ഞാന്‍ പോയി ബീന്‍ബാഗിലേക്ക് വീണു. "ഇത് വര്‍ക്ക് ചെയ്യുകയാണെങ്കില്‍ എന്നെ കൊല്ലരുത്", അങ്കുഷ് പറഞ്ഞു. കൊല്ലുന്നതിനെപ്പറ്റി ആലോചിക്കേണ്ടി വന്നില്ല.

ഗുണപാഠം :
1. ഡീബഗ് ചെയ്യുമ്പോള്‍ ഒരൈഡിയയും കിട്ടുന്നില്ലെങ്കില്‍ പ്രധാനപ്പെട്ട ഡാറ്റയൊക്കെ ഒന്ന് ഔട്പുട്ട് ചെയ്തുനോക്കുക. പാക്കറ്റിനു പുറമെ റിജക്റ്റഡായ ക്യാരക്റ്ററുകളും കൂടി എവിടെയെങ്കിലും സ്ടോര്‍ ചെയ്തുവച്ചിരുന്നെങ്കില്‍ മൂന്നാലു മണിക്കൂര്‍ വെയിസ്റ്റാകില്ലായിരുന്നു.
2. കമ്പ്യൂട്ടര്‍ സയന്‍സിനു പകരം ഫിസിക്സെടുത്തത് നന്നായി. ഇടയ്ക്കിടെ ഒരു പ്രോഗ്രാമിംഗ് കോണ്ടസ്റ്റ് ഒക്കെ സഹിക്കാം, പക്ഷെ മുഴുവന്‍ സമയവും ഇതുതന്നെ ചെയ്തുകൊണ്ടിരുന്നാല്‍ ഞാന്‍ പി.എച്.ഡി കുതിരവട്ടത്ത് ചെയ്യേണ്ടിവരും (ഇങ്ങനെയൊക്കെയാണെങ്കിലും ഞാന്‍ ഏറ്റവുമധികം ചെയ്യുന്നത് കോഡിങ്ങാണെന്നത് വേറെ കാര്യം)

1 comment:

  1. തല ഒരുപാടു പുകച്ചാല്‍ എന്താ ?..വില പിടിച്ച ഗുണപാഠങ്ങള്‍ ഉരുത്തിരിഞ്ഞു വന്നില്ലേ..

    ReplyDelete