Tuesday, September 6, 2011

ദ ഗ്രേറ്റ്‌ നൈജീരിയന്‍ ഫ്രോഡ്സ്..

ഒരു ലോട്ടറി അടിച്ച, ചത്തു പോയ പിതാവിന്‍റെ സ്വത്ത് സംരക്ഷിക്കാന്‍ സഹായം തേടുന്ന ഒരു ഇമെയില്‍ ലഭിക്കാത്തവര്‍ ഇമെയില്‍ ഐഡി ഇനിയും ഇല്ലാത്തവര്‍ മാത്രം ആയിരിക്കും. എന്തെങ്കിലും ഒരു കഥ മെനഞ്ഞുണ്ടാക്കി വായിക്കുന്ന ആള്‍ക്ക് കുറെ പണം കിട്ടും എന്ന പ്രതീക്ഷ ഉണ്ടാകുകയും, പ്രസ്തുത പണം അയച്ചു തരാന്‍ ആദ്യം കുറച്ചു പണം അവര്‍ പറയുന്ന അക്കൗണ്ടില്‍ അയക്കാന്‍ പറയുകയാണ്‌ ഇത്തരം തട്ടിപ്പുകളുടെ അടിസ്ഥാന രീതി.എനിക്ക് കിട്ടിയ ഒരു ഇമെയില്‍ ഇവിടെ ചേര്‍ക്കുന്നു:(ചിത്രത്തില്‍ ഞെക്കിയാല്‍ വലുതായി കാണാം)






ആദായ നികുതി മടക്കം ഓണ്‍ലൈന്‍ ആയി സമര്‍പ്പിക്കുന്ന എനിക്ക് ഈ മെയിലില്‍ താല്പര്യം തോന്നുക സ്വാഭാവികം. ലോട്ടറി മെയിലുകള്‍ തുറന്നു പോലും നോക്കാതെ ഡിലീറ്റ് ചെയ്യുന്ന എനിക്ക് ഇത് വായിച്ചു നോക്കാതെ കളയാന്‍ മനസ്സ് സമ്മതിക്കുന്നില്ല!

ഇത് ഒറിജിനല്‍ തന്നെയോ എന്ന് പരീക്ഷിക്കാന്‍ ചില നിരീക്ഷണങ്ങള്‍ നടത്തിയപ്പോള്‍ കിട്ടിയ അറിവുകള്‍ പങ്കു വെക്കണം എന്ന് തോന്നിയപ്പോള്‍ വന്നതാണ് ഈ പോസ്റ്റ്‌.

ആ മെയിലിലെ പ്രസക്ത ഭാഗങ്ങള്‍ നോക്കാം.
(മെയില്‍ കിട്ടിയിരിക്കുന്നത് ജിമെയിലില്‍ ആണ്. അതില്‍ "show details" എന്ന ലിങ്ക ക്ലിക്ക്‌ ചെയ്‌താല്‍ അയച്ചവരെ കുറിച്ച് താഴത്തെ ചിത്രത്തില്‍ കാണുന്നത് പോലെ കുറച്ചു വിവരങ്ങള്‍ കിട്ടും.)





1) ഇത് മെയില്‍ അയച്ച ആളുടെ ഏറ്റവും അടുത്ത ജിമെയില്‍ സെര്‍വറില്‍ വന്നെത്തിയ സമയവും പ്രസ്തുത സെര്‍വര്‍ സ്ഥിതി ചെയ്യുന്ന സ്ഥലത്തെ സമയ മേഖലയും (time zone) കാണിച്ചിരിക്കുന്നു. GMT+1.00 ആണ് അതിന്‍റെ സമയ മേഖല. Google.co.in തുറന്നു ചുമ്മാ "GMT+1" അടിച്ചു നോക്കി.. ആദ്യത്തെ ലിങ്ക തന്നെ തുറന്നു.. ഈ സമയ മേഖലയിലെ രാജ്യങ്ങള്‍ ഏതൊക്കെ എന്ന് പരിശോധിച്ചു.. നൈജീരിയ കാണുന്നുണ്ടോ? അമ്പട കള്ളാ...

2) ഇത്രയും അധികം തുക എനിക്ക് തരാന്‍ ഉണ്ടായിട്ടും എന്റെ പേര് കൃത്യമായി അറിയില്ലേ?

3) tax refund request കൊടുക്കാന്‍ പറഞ്ഞിരിക്കുന്ന ലിങ്കിന്‍റെ അടുത്തേക്ക് മൗസ് ഒന്ന് പിടിച്ചു നോക്കി.(ഞെക്കിയില്ല). അത് ഏതു വെബ്‌സൈറ്റിലേക്ക് കൊണ്ട് പോകും എന്ന് കാണാം.
തീര്‍ച്ചയായും ഇത് ഇന്ത്യന്‍ സര്‍ക്കാറിന്‍റെ വെബ്സൈറ്റ് അല്ല.

4) എന്തൊരു ശുഷ്കാന്തി! 25 പൈസ പോലും കളയാതെ തരാനാണ് ഉദ്ദേശം! ഗൊച്ചു ഗള്ളന്‍!!

പിന്നെ, ചെറുതെങ്കിലും പ്രസക്തമായ ചില കാരണങ്ങള്‍ ,

- കിട്ടാന്‍ ഉള്ളതെല്ലാം ഊറ്റി എടുത്തു, മറച്ചു പിടിക്കാനുള്ളതെല്ലാം മറച്ചു വെച്ച്, നികുതി സമര്‍പ്പിക്കുന്ന നമ്മക്കും റീഫണ്ടോ?! കോടികള്‍ വെട്ടിക്കുന്ന സൂപ്പര്‍ സ്റ്റാറുകള്‍ ഉള്ളപ്പോള്‍ ആയിരങ്ങള്‍ വെട്ടിക്കുന്നവരെ പിടിക്കാന്‍ ഉദ്യോഗസ്ഥര്‍ക്ക് സമയം ഇല്ലത്തത് കൊണ്ട് മാത്രം ജീവിച്ചു പോവുന്ന നമ്മള്‍ക്ക് നികുതി മടക്കി തരുമെന്നോ?!!
- പണം എനിക്ക് തിരിച്ചു തന്നെ അടങ്ങൂ എന്ന ഒരു ആവേശം മെയിലില്‍ ഉടനീളം കാണാം. പ്രത്യേകിച്ചും, 7 ദിവസത്തിനകം തന്നേ പറ്റൂ എന്ന മട്ടിലുള്ള വരികള്‍ .


അങ്ങനെ, ഇങ്ങനെയെങ്കിലും കുറച്ചു പണം കിട്ടും എന്ന പ്രതീക്ഷയും പോയി :-(

Tuesday, November 2, 2010

അഭാജ്യ സംഖ്യയാണോ എന്നറിയാന്‍ ഒരു C function

തന്നിരിക്കുന്ന അക്കം ഒരു അഭാജ്യ സംഖ്യ (pime number ) ആണോ എന്നറിയാന്‍ ഒരു ചെറിയ C function താഴെ കൊടുക്കുന്നു.

int IsPrime(unsigned int num)
{
int count;
if (num%2 == 0) return (num == 2);
for (count = 3; count*count<=num; count+=2)
{
if ((num%count) == 0) return 0;
}
return 1;
}

ഈ function , തന്നിരിക്കുന്ന സംഖ്യ അഭാജ്യ സംഖ്യ ആണെങ്കില്‍ 1 മടക്കി നല്‍കുന്നു. അഭാജ്യ സംഖ്യ അല്ലെങ്കില്‍ 0 മടക്കി നല്‍കുന്നു. നിരവധി optimaisation വരുത്തിയ ഒരു code ആണ് ഇത്. പ്രോഗ്രാമിന്‍റെ യുക്തികള്‍ പരിശോധിക്കാം
1 ) ഇരട്ട സംഖ്യകളില്‍ 2 മാത്രമാണ് അഭാജ്യ സംഖ്യ. if (num%2 == 0) return (num == 2); എന്ന കോഡ് ഈ യുക്തിയെ ഉപയോഗപ്പെടുത്തിയിരിക്കുന്നു. രണ്ടു അല്ലാത്ത ഇരട്ടസംഖ്യ ആണ് തന്നിരിക്കുന്നതെങ്കില്‍, വേറെ ഒന്നും നോക്കേണ്ടതില്ല, സംഖ്യ ഭാജ്യ സംഖ്യ ആണെന്ന് നിസ്സംശയം പറയാം.
2 ) ഇരട്ട സംഖ്യ അല്ലെങ്കില്‍ തന്നിരിക്കുന്ന സംഖ്യ,
a ) 3 , 5 , 7 , 9 തുടങ്ങിയ ഒറ്റ സംഖ്യകളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിക്കുക, ആണെങ്കില്‍ അത് ഭാജ്യ സംഖ്യ ആണെന്ന് ഉറപ്പിക്കാം. ഇരട്ട സംഖ്യകളുടെ ഗുണിതം എന്നും ഇരട്ട സംഖ്യ തന്നെ ആയിരിക്കും എന്നതിനാല്‍ 2 , 4 , 6 , 8 തുടങ്ങിയ ഇരട്ട സംഖ്യകളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിക്കേണ്ടതില്ല. (ഇരട്ട സംഖ്യകളുടെ വിധി നമ്മള്‍ ( 1 ) ല്‍ തീരുമാനിച്ചിട്ടുണ്ട്) .
b ) സംഖ്യയുടെ വര്‍ഗമൂലം (square root ) വരെയുള്ള അക്കങ്ങളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിച്ചാല്‍ മതി. അത് വരെയുള്ള ഒരു അക്കത്തിന്‍റെയും ഗുണിതം അല്ലെങ്കില്‍ നിസ്സംശയം പറയാം, സംഖ്യ അഭാജ്യ സംഖ്യ ആണ്.

സാധാരണയായി കാണാറുള്ള പ്രോഗ്രാമുകളില്‍ മുകളിലുള്ള യുക്തികള്‍ കാണാറില്ലാത്തതിനാല്‍ അവ വളരെ അധികം സമയം എടുക്കും, പ്രത്യേകിച്ച് വലിയ സംഖ്യകള്‍ പരിശോധിക്കുമ്പോള്‍.
നിങ്ങളുടെ ആടുത്ത് സാധാരണ യുക്തിയിലുള്ള ഒരു C function ഉണ്ടെങ്കില്‍, അതില്‍ 15485863 ഒരു അഭാജ്യ സംഖ്യ ആണോ എന്ന് പരിശോധിക്കൂ. പിന്നീട് ഈ പ്രോഗ്രാം ഉപയോഗിച്ച് ഉത്തരത്തിന് എടുക്കുന്ന സമയം താരതമ്യപെടുത്തി നോക്കൂ.

Monday, August 23, 2010

അധിവര്‍ഷം കാണാന്‍ ഒരു C function

ഒരു വര്‍ഷം കിട്ടിയാല്‍ അത് അധിവര്‍ഷം(leap year) ആണോ അല്ലയോ എന്ന് നോക്കാനുള്ള ഒരു കൊച്ചു C function.

int Isleap(unsigned int year)
{
/*Return 1, if it is a leap year. return 0 if it is not a leap year*/
return ( !(year % 4) && ((year % 100) || !(year % 400)));
}

ഈ function ഉപയോഗിച്ച് നിരവധി ഉപയോഗങ്ങളുണ്ട്. ഉദാഹരണമായി, 1990 എന്ന വര്‍ഷത്തിലെ ദിവസങ്ങളുടെ എണ്ണം കാണണം എന്നിരിക്കട്ടെ, താഴെ കൊടുത്തിരിക്കുന്ന ഒരൊറ്റ ലൈന്‍ കോഡ് മതിയാവും.

noofdays = 365 + Isleap(1990);

പ്രോഗ്രാമിലെ യുക്തി:

താഴെ പറയുന്ന വസ്തുതകള്‍ പരിഗണിക്കുക.

1) ഒരു വര്‍ഷത്തെ 4 കൊണ്ട് ഹരിക്കാന്‍ കഴിയുമെങ്കില്‍, അത് 100 കൊണ്ട് ഹരിക്കാന്‍ പറ്റാതിരിക്കുകയോ 400 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുകയോ ചെയ്യുകയാണെങ്കില്‍ അത് അധിവര്‍ഷം ആണ്.
2) ഒന്നാമത്തെ വിഭാഗത്തില്‍ പെടാത്തതൊന്നും അധിവര്‍ഷം അല്ല.
3) ( divisor % divident) = 0 , ആണെങ്കില്‍ divident devisorഇന്‍റെ ഒരു ഘടകം(factor) ആണ്.
4) expression1 അല്ലെങ്കില്‍ expression2, ഇവയില്‍ ഏതെങ്കിലും ഒന്ന് പൂജ്യം ആയാല്‍ (expression1) && (expression2) ഉം പൂജ്യം ആയിരിക്കും.

ഇനി പ്രോഗ്രാമിലേക്ക്..

ചുവട് 1:
!(year % 4) : year എന്നത് 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുമെങ്കില്‍ ഇത് 1 ആണ്. ഇല്ലെങ്കില്‍ ഇത് 0 ആണ്. വസ്തുത 4-ഇല്‍ പറഞ്ഞ expression1 ആണിത്.

ചുവട് 2:
ചുവട് 1 ലെ ഉത്തരം പൂജ്യം ആണെങ്കില്‍ ഈ ചുവടിനു പ്രസക്തി ഇല്ല(വസ്തുത 4 നോക്കുക). അതായത്, 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുമെങ്കില്‍ മാത്രം ഈ ചുവട് ചെയ്‌താല്‍ മതി.
(year % 100) || !(year % 400): 100 കൊണ്ട് ഹരിക്കാന്‍ പറ്റാതിരിക്കുകയോ 400 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുകയോ ആണെങ്കില്‍ ഇത് 1 ആണ്. 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുന്നതാണ് എന്ന് നേരത്തെ ഉറപ്പുള്ള സ്ഥിതിക്ക്, വസ്തുത 1 പ്രകാരം ഇത് അധിവര്‍ഷം ആയി കണക്കാക്കാം.

ഇനിയും ലളിതമായ വഴികള്‍ കണ്ടേക്കാം. പങ്കു വെക്കുമല്ലോ..

Wednesday, March 31, 2010

Tired of local spammers?

It was not so long back; I received a forwarded email to my gmail inbox from a stranger. I pressed archive button, thinking that he is an innocent don't care guy and also the mail was no so boring one. To be fair, I felt nothing annoying. Unfortunately, that was just a start. I used to receive forward mail daily from that guy, all with huge sized attachments in it. He was forwarding mails like he had promised to send atleast one mail of 2-3 MB attachments in it. I tried to recollect who he is. Is he an old friend of mine? or else how he got my email id? I started scanning the huge "To" and "cc" list of his mail. There were many friends of mine in that list. I couldn't guess any relation with him since he had many of my friends in different fields. If there were only my class mates/ batch mates, I could have guessed he is my college mate I lost from my memory. But what will I do when I know there are friends of me from work places too?
I had nothing to do, except just deleting those mails. When I asked my friends who was in the cc list, they were also in the same position like me! I was ok with it untill I received a mail from him which contains pictures of a very ugly dead bodies and pool of blood in it. I was fed up when I received more of it. I politely replied to that person asking to remove me from his mailing list. The result? No, he didn't remove me from his mailing list, instead there was a flammable reply from him, abusive and he continued his work. What next? I didn't go behind him, here is what I did.


Opened my gmail inbox
Clicked on "create a filter" ("search web" button)
Filled in "From" text box with my spammer's mail id.
Clicked on "Next step" button
Ticked "Forward it to" check box and gave my spammer's mail id to forward.
Ticked on "Delete it" check box
Clicked on "Create filter" button.

Done!!

What it did?
Whenever my spammer sends a mail, gmail will move it to thrash folder and automatically forward it back to him.
Whats more intresting? The "backwarded" message will not have my mail id as sender, instead it will be his address itself!! May be you too can try this, if you are a victim!