"Inception" & "C" Programming

19 September 2010 वेळ: Sunday, September 19, 2010
हा चित्रपटाचा रिव्ह्यु नाही. Inceptionचा रिव्ह्यु लिहण्याची सध्यातरी माझी लायकी नाही.
हॉलिवुडचे काही चित्रपट नुसते मनोरंजन किंवा कला ह्यापुरते मर्यादित नं रहाता त्या परिसीमा पार करुन विज्ञानाचा एक अभ्यासपट म्हणुन समोर येतात. तो चित्रपट पाहताना एखाद्याने त्याच्या/तिच्या PHD रिसर्चची थेसिस डिफेन्ड केल्याचा भास होतो. Inception त्यापैकीच एक.
ख्रिस्तोफर नोलान... काय म्हणावं मी. थोर आहेस तु (हे प्रेमाने केलेलं अरेतुरे आहे). मला सर्वात जास्त कौतुक एका गोष्टीचं वाटतं ती म्हणजे, हे लोक एखादी (काल्पनिक/अभुतपुर्व/जटिल) कल्पना करतात आणि ती लोकांसमोर "समजेल अशी मांडतात". अशी कल्पना "मांडणं" हे आणि फक्त हेच खरं कौशल्य आहे. तर ह्याची संकल्पना एकंदर अशी आहे की...
कोणाच्याही डोक्यातली गुपितं त्याला शारीरीक इजा नं पोहचवता त्याच्या स्वप्नांमधे जाऊन, ती त्याची स्वप्न नियंत्रित करुन काढुन घेणं. आणि एवढेच नव्हे तर त्याच्याच त्या नियंत्रित केलेल्या स्वप्नांमधे जाऊन, त्याच्या सुप्त मनामधे आपली कल्पना रुजवणे. बरं आणि हे करताना अश्या पद्धतिने करायचं की स्वप्न बघणाऱ्याला वाटावे स्वप्न आणि कल्पना दोन्ही त्याच्याच आहेत.
पण हे असं का करायच? म्हणजे असं स्वप्नात जाऊन असले उद्योग कशासाठी? कारण - वेळ. भौतिक जगात अनन्य महत्व असलेली - वेळ. ह्या वेळेला तुम्ही थांबवु शकत नाही, ना तिची गती कमीजास्त करता येते. त्यामुळे एखाद्या कामासाठी लागणारा कालावधी कमी असेल तर??? पण मग त्यात एखाद्याची स्वप्न कशी काय मदत करु शकतिल??? हांsss... तर हिच आहे ह्या सिनेमाची स्टोरी.
स्वप्नांमधे (म्हणजे स्वप्न बघताना) एखाद्याचा मेंदु प्रचंड गतीने कार्यरत असतो. त्यामुळे होतं काय की ह्यामुळे वेळ मंदावली जाते. भौतिक जगातील एक सेकंद हा स्वप्नांमधे काही तासांएवढा होतो. मग समजा जर मी स्वप्नात स्वप्न पाहिलं तर??? पहिल्या पातळीवर (पहिल्या स्वप्नात) एका सेकंदाचे काही तास, दुसऱ्या पातळीवर (पहिल्या स्वप्नातल्या स्वप्नात) त्या तास काही दिवस होतिल आणि पुढच्या पातळीवर त्या दिवसांच रुपांतर काही वर्षांमधे... म्हणजे मला एखादं काम काही सेकंदात करणं अशक्य असेल तर मी तिसऱ्या पातळीवरच्या स्वप्नांमधे जाऊन त्यासाठी काही वर्ष एवढा मोठ्ठा कालावधी मिळवु शकतो. शिवाय हि स्वप्न एखाद्याची विचारसरणी/वागणुक पुर्ण बदलु शकतात. त्यामुळे जर मी त्याचं स्वप्न त्याच्या नकळत नियंत्रित केलं (स्वप्नांना सुरुवात आणि अंत नसल्याने ती नियंत्रित करता येऊ शकतात) तर मी त्याला एक पुर्ण नवा माणुस बनवु शकतो. ब्रेनवॉशसारखं वेळखाऊ काम मी अतिशय कमी वेळात करु शकतो. भाsssरी.... बरं हि स्वप्न नियंत्रित करणं म्हणजे काय जॉयस्टिक हातात घेऊन व्हिडिओगेम खेळण्याइतकं सोपं नाही. चित्रपटातल्या कहाणीनुसार तिसऱ्या पातळीवरची स्वप्न (तिसरी पातळी म्हणजे maximum limit) खुप अनस्टेबल असल्याने नियंत्रित करणं खुप कठिण... जवळपास अशक्य. ताळमेळ चुकला तर व्यक्ती स्वप्नातुन बाहेर येईल पण प्रचंड मानसिक धक्का घेऊन किंवा त्याच स्वप्नांमधे कायमची अडकुन जाईल. पण चित्रपटातला हिरो ह्याच्या कैक कैक पार... पाचव्या पातळीवरच्या स्वप्नात जातो.
Inception चित्रपटाची बांधणी अप्रतिम आहे. Open end असलेला हा चित्रपट आहे. त्यामुळे मुव्ही पाहुन झाल्यावर तुम्ही चर्चाचर्वण करुन रवंथ करणार हे नक्की.

हम्म्म... पण मी हे सगळं लिहितोय का? पहिल्यांदाच एखाद्या चित्रपटाबद्दल, तेपण "Inception"बद्दल? कारण मला ह्या चित्रपटाचा कन्सेप्ट "C" Programming सारखा वाटला (to some extend - only time factor is missing). How? well, now to understand what I say, you should at least have basic knowledge of "C" Programming. "C" languageमधे एक "Pointer" म्हणुन कन्सेप्ट आहे. हा एक असा variable आहे जो "memory address" स्टोअर करतो.
उदा.:
int x = 10; //variable 'x' has value 10 stored in it
int *y;
y = &x; //now 'y' is a Pointer, pointing to memory address of 'x'
print x; // output: 10
print y; // output: 0012FEDC
print *y; //output: 10
// *y same as *(&x), also read as value at address of x, which is 10
पण तरी हा फंडा Inceptionशी रिलेटेड कसा?

कारण १:
Inception चित्रपटात दाखवल्याप्रमाणे एखाद्याच्या स्वप्नांद्वारे त्याचे सुप्त मन नियंत्रित करुन त्याची मुळ विचारसरणी किंवा व्यक्तिमत्वच बदलता येऊ शकतं आणि होणारा हा परिणाम कायमस्वरुपी असतो.
Pointerने सुद्धा एखाद्या variableची value कायमचीच बदलते. ह्याला scope resolution असंपण म्हणतात.
उदा.:
{ // first scope starts
     int x = 10; // value of x in first scope
     print x; // output: 10
     { // second scope starts
        x = 5; // value of x in second scope
        print x; // output: 5
     } // second scope ends which discards everything within it
     print x; // output: 10
} // first scope ends
वरच्या उदाहरणावरुन तुमच्या लक्षात येईल की दुसऱ्या scopeमधे मी 'x'ची value बदलली. पण तरी दुसऱ्या scopeमधुन बाहेर आल्यावर 'x'ची value पुन्हा 10च झाली.
हेच जर मी Pointerने केलं तर काय होईल बघा...
{ // first scope starts
     int x = 10; // value of x in first scope
     print x; // output: 10
     int *y;
     y = &x;
     print *y; // output: 10
     { // second scope starts
        *y = 5; // *(&x) read as value at address of x = 5
        print x; // output: 5
     } // second scope ends
     print x; // output: 5
} // first scope ends
आता इकडे मी 'x'ची value बदलली नाही, तर जिकडे स्टोअर केलाय त्या ('x'च्या) memory addressवरची बदलली. त्यामुळे दुसऱ्या scopeमधुन बाहेर आल्यावर 'x'मधे त्या memory addressवरची नविन value असेल.

आता हे झालं बेसिक. Incetionमधे कसं स्वप्नात स्वप्न आणि त्याच्या आत पुन्हा स्वप्न दाखवलय तसंच इकडेपण pointerला pointer आणि त्या pointerचा pointerपण define करु शकता.
म्हणजे पहिल्या levelवरचा pointer एखाद्या variableचा memory address store करतो. (ह्याला हाताळतानाच तोंडाला फेस येतो.)
int x;
int *y;
y = &x;
दुसऱ्या levelवरचा पहिल्या levelच्या pointerचा memory address store करतो.
int x;
int *y;
y = &x;
int **z;
z = &y;
तिसऱ्या levelवरचा दुसऱ्या levelच्या pointerचा memory address store करतो.
int x;
int *y;
y = &x;
int **z;
z = &y;
int ***i;
i = &z;
पण अजुन मला नाही वाटत कोणी तिसऱ्या पातळीवरचा pointer वापरला असेल. कारण programmingमधे पहिल्या levelवरचा pointerच प्रोग्रॅमर्सची level लावायला पुरेसा आहे. दुसऱ्या levelला तर programmersची १००% फें फें उडालेली असते.

कारण २:
चित्रपटानुसार माणसाच्या ह्या स्वप्नसाखळीचे दुरगामी कायमस्वरुपी परिणाम त्याच्यावर होत असल्याने, समजा त्याच्या स्वप्नात काही अघटीत घडलं (समजा तो मधल्याच एखाद्या स्वप्नात मेला) तर पुढच्या आणि मागच्या स्वप्नांचा संपर्क तुटेल आणि तो स्वप्नातुन बाहेर आला नाही तर खऱ्याखुऱ्या जगात तो कोमामधे जाऊ शकतो. तसं झाल्यास बाहेर काढण्यासाठी त्या स्वप्नात किंवा त्याच्या पुढच्या पातळीवरच्या स्वप्नात जाऊन योग्य क्रमाने आणि पद्धतिने स्वप्न संपवणं गरजेचं आहे.
Pointers हाताळतानापण अशी काळजी घेणं गरजेचं असतं. नाहितर त्या pointerचा "Dangling Pointer" होतो. Dangling Pointer म्हणजे असा pointer जो चुकिच्या (वापरात नसलेल्या) memory addressला point करतो. अश्या pointerमुळे अकारण memory space खाल्ली जाते आणि प्रोग्रॅम क्रॅशदेखिल होऊ शकतो.
उदा.:
{ // first scope starts
     int *x;
     { // second scope starts
        int y;
        x = &y;
     } // second scope ends, y falls out of scope
     // x is now a Dangling Pointer pointing to deallocated memory of y
}// first scope ends
हा तर पहिल्याच levelवरचा होता. अजुन complex pointerअसता आणि मधलाच कोणता pointer गंडला तर तुमचा प्रोग्रॅम बोंबल्लाच समजा. अश्या प्रॉब्लेमला टाळण्यासाठी ज्या scopeमधे pointer define केला त्या scopeमधुन बाहेर येण्यापुर्वी त्याला Nullify करावा.
उदा.:
{ // first scope starts
     int *x = NULL;
     { // second scope starts
        int y;
        x = &y;
        /* ... */
        x = NULL;
     } // second scope ends, y falls out of scope
     // x is no more a Dangling Pointer
}// first scope ends
हुश्श्श्श... झेपलं का काही??? नसेल तरी हरकत नाही. मीच पुर्ण गोंधळलेलो लिहतालिहता... ख्रिस्तोफर नोलानने एवढा कठिण विषय इतक्या सहजपणे कसा काय चित्रित केला आश्चर्यच आहे. असो... पण Inception बघा नक्की.


आपला,
(Dangling) सौरभ

23 प्रतिक्रिया

  1. अनघा Says:

    सौरभ,
    १. तू अतिशय हुशार आहेस.
    २. Inception हा कमीतकमी दोनदा बघण्याचा चित्रपट आहे. (मोठ्या पडद्यावरच बघावा)
    ३ मला तुझा हा लेख खूप आवडला. त्यातील काही भाग ३दा वाचावा लागला. त्यातील तुझ्या क्षेत्रातील बारकावे मला जरा कमीच कळले. गणित कच्चे! :)
    ४. क्लिष्ट चित्रपट तू सोप्प्या पद्धतीने मांडायचा प्रयत्न केला आहेस. आणि ते मला आवडलं. हा चित्रपट बनवताना, director, editor आणि cinematographer ह्यांनी अतिशय बारकाईने अभ्यास केला आहे. ते प्रत्येक फ्रेम मध्ये मुळी दिसूनच येतंय.
    ५."हॉलिवुडचे काही चित्रपट नुसते मनोरंजन किंवा कला ह्यापुरते मर्यादित नं रहाता त्या परिसीमा पार करुन विज्ञानाचा एक अभ्यासपट म्हणुन समोर येतात. तो चित्रपट पाहताना एखाद्याने त्याच्या/तिच्या PHD रिसर्चची थेसिस डिफेन्ड केल्याचा भास होतो. Inception त्यापैकीच एक."
    खूप पटले!! रोजचे वर्तमानपत्र वाचताना कमीतकमी ३ तरी असे रिसर्च वाचायला मिळतात. आणि मला त्या अभ्यासकांचे खूप कौतुक वाटते. किती वेगवेगळ्या विषयांवर अभ्यास चालू असतो!
    ६. ह्या लेखाबद्दल तुझे आभार. मला वाटतं, हा लेख लिहिण्यासाठी कदाचित तू बरोब्बर माणूस असावास. तुझी व्यावसायिक शाखा आणि मराठीवरचे प्रभुत्व, ह्या दोन गोष्टींचा समन्वय; ह्या चित्रपटाचे अश्या प्रकारचे परिक्षण लिहिण्यामागे दिसून येतोय.
    ७. Great ! :)

  2. सौरभ Says:

    धन्यू. :D मला अजुन नीट रिलेट करता येईल अस वाटतय... पण सद्ध्यापुरतं राहु देत... नंतर आकृत्या टाकेन म्हणजे मला नक्की काय म्हणायचय ते समजायला मदत होईल.

  3. Aakash Says:

    हाऊ वेरी intresting ! राबर्ट फ़ौरन inception का टोरंट डाउनलोड किया जाये.

  4. Inception जसा २ वेळा पाहावा लागतो तसेच हि पोस्टसुद्धा २ वेळा वाचावी लागेल :P

  5. सौरभ Says:

    @आकाश: अरे हा मुव्ही थिएटरमधे जाऊन बघ. मोठ्या पडद्यावरच मजा आहे.

    @विक्रम: तुला हि पोस्ट वाचण्यापुर्वी यशवंत कानिटकरांचं "Let Us C" वाचावं लागेल. :D :P

  6. Deepti Says:

    मला पण बघायचा आहे हा movie...आणि सौरभ post मस्तच लिहिला आहेस....
    आणि c+ programming काही एक कळलं नाहीये.... :P ;)

  7. अप्रतिम सौरभ... इतक्या सोप्या रितीने मला इन्सेप्शन (थेटरात (पहिल्यांदा)) आणि सी लंग्वेज (डिग्रीत) दोन्ही वेळेवर कळाले असते तर मी कुठल्या कुठे असलो असतो.... :D

    तुझा लेख मात्र प्रचंड आवडला.. आणि नेहमीप्रमाणे मला आवडणारे तुझे लेख मी पुर्वपरवानगी न घेता बझ करतोय ;)...

    बेश्ट....

  8. नोलान नंतर तूच रे बाबा, तूच.
    (रजनी देवाची प्रार्थना फळाला लागतीये म्हणायची.)

  9. सुंदर लेख !

    हि लिंक बघ. http://github.com/karthick18/inception यात Inception चित्रपट C program मधून explain केला आहे.

  10. suhasonline Says:

    हे हे सही..मला पण दोन-तीन दा वाचावी लागली पोस्ट आणि मग स्वत:ला चिमटा काढून स्वप्नातून जागा झालो :)
    मस्त पोस्ट, आवडली.
    लिहते रहा. शुभेच्छा

  11. सौरभ Says:

    @दिप्ती: तुला नक्की काय मस्त वाटलं? कारण हा पोस्ट मुख्यपणे ज्या कारणासाठी लिहलाय तेच समजलं नाहिये तुला. :)) :P आणि c+ नाही गं फक्त c किंवा c++ असतं. कमेंटमधे error आला. =)) :P हाहाहा

    @आनंद: तुझी कमेंट वाचुन मला एकदम प्रोटिन, व्हिटॅमिनचा मोठ्ठा डोस दिल्यासारखं वाटतं. :D टनांच्या लॉटमधे थँक्स :)

    @सचिन: :D हि कथा रजनिदेवाने नोलानच्या स्वप्नात त्याला सांगितली. म्हणुन नोलान हे करु शकला. :))

    @अभिजीत: fantastic link... बाप माणुस दिसतोय. पठ्ठ्याने खुपच मेहनत घेतलीये. मी ह्याला संपर्क करेनच. many many many Thanks for the link...

    @सुहास: तु दोन-तीनदा वाचलीस ह्याचंच कौतुक वाटतं. मानायला पाहिजे. संयम आहे तुझ्यात. :D Thanks for the comment. :)

  12. आ का Says:

    मी पोईंट्लेस झालॊ... कि पोईंटरलेस.. ??? ;-)

  13. अरे त्या पॉइंटर प्रकरणापासून पिच्छा सुटावा म्हणून मध्ये मध्ये ब्लॉग वाचतो तर तिकडे पण आजकाल पॉइंटर. पोस्ट एकदाच वाचून झालीय. झेपली नसली तरी आलेल्या प्रतिक्रिया वाचून पोस्ट चांगली झालीय हे कळले. तूर्तास प्रतिक्रिया देतोय पण अजुन दोनदा रट्टा मारुन पोस्ट खरंच छान झालीय ते कन्फर्म करेन ;-)

  14. सौरभ Says:

    @An@nd: :) Dangling राहणार नाहिस ह्याची काळजी घे. :D

    @सिद्धार्थ: हाहाहा... अरे प्रतिक्रिया काय मिळाल्यात ते नको पाहुस. तुला पोस्ट आवडला नसेल त्याला कारण कदाचित मला नीटसं सांगता आलं नसेल. पण तरी तु प्रतिक्रिया दिलीस, बरं वाटलं. Thanks :)

  15. THE PROPHET Says:

    मी इन्सेप्शन पाहिला नाही, मी पोस्ट वाचणार नाही! (मी शेंगा खाल्या नाहीत, मी टरफलं उचलणार नाही! च्या तालावर वाचावे)
    ओके.. मला इन्सेप्शन डेस्परेटली पहायचाय...इथे इंग्लिशमध्ये रिलीज होत नाही! त्यामुळे वाट पाहतोय!

  16. sanket Says:

    ज्या pointer पासून दूर पळायचा प्रयत्न म्हणून मराठी ब्लॉग्स वाचायचे.. त्यांनी इथेसुद्धा अतिक्रमण केलेले बघून माझ्या मेंदूतले सगळे software crash झाले बघ..Inception ला programming logic लावलेच नव्हते मी. जबरदस्त सोपा केलास तू हा विषय आपल्या आवडत्या programming language मधे explain करून.
    बाकी "Let Us C" ला पर्याय नाही हेच खरे.

  17. सौरभ Says:

    @THE PROPHET: अरे बघ बघ... तसंपण मी Inceptionबद्दल जास्त लिहलं नाही, जेवढं C programmingशी रिलेट करायचं होतं तेवढच आहे. त्यामुळे तु पोस्ट वाचु शकतोस. And don't miss the start of the movie...

    @संकेत: अरे काय करणार. Everything is related to Computer for me...

  18. सागर Says:

    हा संपूर्ण ब्लॉग केवळ अप्रतिम आहे..

    आप धन्यवाद रे हा ब्लॉग बझ केल्याबद्दल

  19. सौरभ Says:

    @सागर: धन्यु धन्यु धन्यु... त्रिवार धन्यु... लय नाईस वाटलं. :) I'm really really happy to read your complement. :D

    @आप: आता तुझ्यासाठी एका पार्टीचा बंदोबस्त केलाच पाहिजे. :)

  20. आयला हे जबरी आहे यार.. इन्सेप्शन पेक्षाही आवडली तुझी पोस्ट.. गंमत करतोय रे.. खरं तर मला तुझी पोस्टच जास्त आवडली. (ही गंमत नाही.)

    रच्याक, तू मराठीब्लॉग्ज.नेट वर नाहीयेस बहुतेक. त्यामुळे मला तुझा ब्लॉग दिसला नव्हता. आप्पाच्या बझमुळे आणि तू दिलेल्या कमेंट्सवरून इथवर पोचलो.. आता वाचतो सगळा ब्लॉग हळूहळू..

  21. सौरभ Says:

    हेरंब, प्रतिक्रियेसाठी धन्यु :D मी खुप काही लिहित नाही रे, म्हणुन नाहिये मब्लॉविवर. :)
    (आप.ला मानलं पाहिजे. माझं त्याच्याएवढं जबरी ब्लॉगवाचनपण नाही.)

  22. सौरभ inception मला एकदा पाहूनच कळला होता....पण ही पोस्ट नक्की दोनदा वाचावी लागेल....आमच्या प्रोफने सांगितलेला pointer चा कन्सेप्ट कधीच पळालाय डोक्यातून त्यामुळे मी inception ला आपल सोप्प नेस्टेड लूप म्हणून समजून घेतल...एक स्वप्न मग त्याच्या दुसर त्याच्या आत तिसरा...आणि बाहेर येताना क्रमाने बाहेर यायचं..शिम्पल...:)

    तू pointer म्हणजे लय भारी...BTW तू पण पीएचडी करतोस का रे भाऊ??

  23. सौरभ Says:

    हाहाहा.. हे म्हणजे भारीच.. पण मी पीएचडी नाही करत्ये. असं का वाटलं?? हाहाहा.. का वाटलं ते राहू देत. मला लय भारी वाटलं.

AKS | Entries (RSS) | Comments (RSS) | Designed by MB Web Design | XML Coded By Cahayabiru.com | Distributed by Deluxe Templates