Thursday, December 30, 2010

ಕನ್ನಡದಲ್ಲಿ Object Oriented Programming

ನಾನು ಮಾಡುವ ಕೆಲಸದಲ್ಲಿ Object Oriented Programming ಸಾಕಷ್ಟು ಬಳಸುವುದರಿಂದ ಕನ್ನಡದಲ್ಲಿ ಇದನ್ನು ಏನಂತ ಕರಿಬಹುದು ಅಂತ ಆರಯ್ಯುತ್ತಿದ್ದೆ, ಅಂದ್ರೆ ಯೋಚಿಸ್ತಾ ಇದ್ದೆ. Programming ಅನ್ನೋದಕ್ಕೆ ಆಗಲೇ ಹಮ್ಮುಗೆ ಅನ್ನೋ ಪದ ಇದೆ. Orientedಗೆ ಏನೋ ಒಂದು ಹುಡುಕಬಹುದು. ಆದರೆ Objectಗೆ ಕನ್ನಡದಲ್ಲಿ ಯಾವ ಪದ ಇದೆ?

ಹೆಚ್ಚು ಕಡಿಮೆ ಎಲ್ಲರು 'ವಸ್ತು' ಅನ್ನೋ ಸಕ್ಕದ ಪದವನ್ನ ಬಳಸ್ತೀವಿ. ಆದರೆ ಅಚ್ಚಗನ್ನಡದ್ದು? ಕೊಂಚ ಯೋಚನೆ ಮಾಡಿದೆ, ಆಮೇಲೆ ಪದನೆರಕೆಗಳಲ್ಲಿ ಹುಡುಕೋದಕ್ಕೆ ತೊಡಗಿದೆ. ಎಷ್ಟೋ ಹುಡುಕಿದ ಮೇಲೆ ಸಿಕ್ಕಿದ ಪದ - ಸರಕು. ಈ ಪದಕ್ಕೆ goods, merchandise ಎಂಬ ಅರ್ತ ಬರುವಂತೆ ಕನ್ನಡದಲ್ಲಿ ಬಳಸ್ತೀವೇ ಹೊರತು object ಎಂಬ ಅರ್ತದಲ್ಲಿ ಅಲ್ಲ.

ಹಾಗೇ ಸುಮಾರು ಹುಡುಕಿದ್ ಮೇಲೆ ಇನ್ನೊಂದು ಪದ 'ಹುರುಳು/ಪುರುಳು' ಅಂತ ಸಿಕ್ಕಿತು. ಇದು ಸಿರಿ, ಸಂಪತ್ತು, ದ್ರವ್ಯ ಅನ್ನೋ ಅರ್ತದಲ್ಲಿ ಬಳಕೆಯಾಗುತ್ತೆ.

ನಾವು ಹೊರ ಪ್ರಪಂಚದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ನೋಡುವುದು Objectಗಳಾಗಿಯೇ. ಅದಕ್ಕಾಗಿಯೇ ಮೊರೆಹಮ್ಮುಗೆ (procedural programming)ಯನ್ನು ತಿದ್ದಿ OOPಯನ್ನು ನಾವು ಹಮ್ಮುಗ(programmer)ರು ಕಂಡು ಕೊಂಡಿರೋದು. ನಾವು ಹಮ್ಮುವ ಬಗೆಯು, ನಾವು ಹೊರಪ್ರಪಂಚವನ್ನು ನೋಡುವ ಬಗೆಗೆ ಹೊಂದುಕೊಂಡರೆ ಹಮ್ಮುಗೆಯು ಸುಳುವಾಗುತ್ತೆ ಅಂತ. Object ಅನ್ನೋ ಇಂತಹ ಒಂದು ಸರಳವಾದ, ಸುಳುವಾದ, ಪರಿಕಲ್ಪನೆಗೆ ಕನ್ನಡದಲ್ಲಿ ಪದವೇ ಇಲ್ಲವಲ್ಲ, ಇದ್ದರೂ ಸಿಗದೇ ಇರೋ ಅಷ್ಟು ದಿನಬಳಕೆಯಲ್ಲಿ ಕಣ್ಮರೆಯಾಗಿದ್ಯಲ್ಲ ಅಂತ ಅಚ್ಚರಿಯಾಯಿತು. ಇರಲಿ, ಈಗ ನಾನು 'ಸರಕು' ಅನ್ನೋ ಪದವನ್ನೇ ಬಳಸೋಣ ಅಂತ ತೀರ್ಮಾನಿಸಿದ್ದೀನಿ. ನಿಮಗೆ ಇನ್ನೂ ಒಳ್ಳೆ ಪದ ಹೊಳೆದರೆ/ ಸಿಕ್ಕರೆ ನನಗೆ ತಿಳಿಸಿ.

ಹಾಗಾದರೆ ಈಗ 'Oriented' ಅನ್ನೋದನ್ನ ಏನಂತ ಹೇಳೋದು? Objet Oriented Programmingನಲ್ಲಿ, ಮೊರೆಹಮ್ಮುಗೆ(Procedural Programming)ಯಲ್ಲಿನಂತೆ, ಒಂದು ಹಮ್ಮನ್ನು (program) ಒಂದು ಕೆಲಸಗಳ ಇಲ್ಲವೇ ಎಸಕಗಳ ಸರಣಿ ಎಂದು ಬಾವಿಸದೆ ಸರಕು(Object)ಗಳ ಒಡನಾಟ(collaboration)ಗಳೆಂದು ಬಾವಿಸ ಬೇಕು. ಅಂದ್ರೆ ಹಮ್ಮುಗನಿಗೆ ಆ object ಬಾವನೆ ಇಲ್ಲವೇ ಸರಕು-ಬಾವನೆ ಬೇಕು. ಕನ್ನಡಲ್ಲಿ ಬಾವನೆಗೆ ಸರಿ ಹೊಂದೋ ಪದ 'ಉನ್ನು' ಅಂತ ನನಗೆ ಅನಿಸುತ್ತೆ. ಹಾಗಾಗಿ ನಾವು OOPಯನ್ನು 'ಸರಕುನ್ನುವ ಹಮ್ಮುಗೆ'ಅಂತ ಹೇಳಬಹುದು.

'ಉನ್ನು'(ಭಾವಿಸು) ಎಂಬುದು ಎಸಕಪದವಾದ್ದರಿಂದ 'ಸರಕುನ್ನು' (ಸರಕು + ಉನ್ನು) ಕೂಡ ಎಸಕಪದವೇ. ಶಂಕರ ಬಟ್ಟರು, ತಮ್ಮ ಒಂದು ಹೊತ್ತಗೆಯಲ್ಲಿ ಹೇಳುವಂತೆ, 'ಹಮ್ಮುಗೆ' ಅನ್ನೋ ಹೆಸರು ಪದದ ಮೊದಲು 'ಸರಕುನ್ನು' ಅನ್ನೋ ಎಸಕ ಪದ ಅದರ adjectiveಆಗಿ ಬರಬಹುದು. ಶಂಕರ ಬಟ್ಟರದೇ ಕೆಲವು (ಎಸಕಪದ + ಹೆಸರುಪದ) ಎತ್ತುಗೆಗಳನ್ನು ನೋಡಿ: ಸುರಿಮಳೆ, ಹುಟ್ಟುಹಬ್ಬ, ಊರುಗೋಲು, ಬೀಸುಗಲ್ಲು. ಹಾಗಾಗಿ ಇದನ್ನು ಎರಡು ಬಿಡಿಪದಗಳಾಗಿ ಹೇಳುವು ಬದಲು ಒಂದು ಜೋಡುಪದವಾಗಿ 'ಸರಕುನ್ನುಹಮ್ಮುಗೆ' ಅಂತ ಹೇಳಬಹುದು.

ಸರಕುನ್ನು = ಸರಕು + ಉನ್ನು

Object Oriented Programming = ಸರಕುನ್ನುಹಮ್ಮುಗೆ = ಸರಕುನ್ನು + ಹಮ್ಮುಗೆ  


Object Orientation = ಸರಕುನ್ನಿಕೆ 

Monday, December 27, 2010

ವಿಂಡೋಸ್ ಅವಾಂತರ

ಒಬ್ಬ ಹಮ್ಮುಗ(programmer)ನಿಗೆ ವಿಂಡೋಸ್ ಅಂದರೆ ಅಷ್ಟಕ್ಕೆ ಅಷ್ಟೇನೇ. ಒಂದಲ್ಲ ಒಂದು ತೊಡಕು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತಲೇ ಇರುತ್ತೆ. ಹಿಂದಿನ ಬರಹದಲ್ಲಿ ಕೊಟ್ಟ ಹಮ್ಮು(program) ವಿಂಡೋಸ್ ಅಲ್ಲಿ ಕೆಲಸ ಮಾಡಿಸಬೇಕು ಅಂದರೆ ಕೊಂಚ ಎಚ್ಚರ ವಹಿಸಬೇಕು. ಏನು, ಯಾಕೆ ಅಂತ ಹೇಳುವುದಕ್ಕೆ ಮೊದಲು ಆ ಬರಹದಲ್ಲಿ ಕೊಟ್ಟಿದ್ದ .properties ಕಡತವನ್ನು ಗಮನಿಸಿ:

            ###
            username=username
            password=password
            search_prefix=ಕ
            wiki=kn.wiktionary.org
            output_file=out.txt

ಈ ಕಡತವನ್ನ ನೋಟ್-ಪ್ಯಾಡ್ ಅಲ್ಲಿ ಬರೆದು ಯು.ಟಿ.ಎಫ್ ಮಾರ್ಬರಹ(encoding)ದಲ್ಲಿ ಉಳಿಸಿ ಹಮ್ಮು ಓಡಿಸಿದ್ದೆ. ಸರಿಯಾಗೇ ಓಡಿತ್ತು. ಆದರೆ ಮೊದಲನೇ ಸಾಲಿನ ಅನಿಸಿಕೆ (comment - ####)ಯನ್ನು ತೆಗೆದು ಹಾಕಿ ಓಡಿಸಿದಾಗ ಪಾಪ ನಮ್ಮ ಹಮ್ಮು 'username' ಅನ್ನು ಸರಿಯಾಗಿ ಓದದೆ  '.username' ಅಂತ ಓದಿ, ಹೊಗುತೆ(login)ಯೇ ತೇರಮೆ (failure) ಕಂಡಿತು. ಯಾಕೆ ಅಂತ ಕೊಂಚ ವಿಕಿಪೀಡಿಯ ಹುಡುಕಿದಾಗ ತಿಳಿಯಿತು, ವಿಂಡೋಸ್ ನೋಟ್-ಪ್ಯಾಡಿನ ತೊಂದರೆ ಅಂತ. ಆ ವಿಕಿಪೀಡಿಯ ಬರಹದ ಈ ಸಾಲು ಓದಿ:

Many Windows programs (including Windows Notepad) add the bytes 0xEF, 0xBB, 0xBF at the start of any document saved as UTF-8. This is the UTF-8 encoding of the Unicode byte order mark (BOM), and is commonly referred to as a UTF-8 BOM, even though it is not relevant to byte order.

ಆದರೆ ನನಗೆ ಕಾಣಿಸಿಕೊಂಡ ಬಾಮ್(BOM) 0xFEFF. ಮತ್ತು ಮೇಲೆ ಹೇಳಿದಂತೆ ಒಂದಲ್ಲ, ಎರಡು ಎಂಕೆ(byte)ಯಷ್ಟು. ಇದೊಂದು ಬಿಟ್ಟರೆ ಕಡತದ್ಲ್ಲಿರೋ ಬೇರೆ ಎಲ್ಲ ಬರಿಗೆ(caracter)ಗಳೂ ಸರಿಯಾಗಿಯೇ ಬಂದಿದ್ದವು. ನಾನು ಬಳಸುತ್ತಿರುವುದು ವಿಂಡೋಸ್ ಎಕ್ಸ್.ಪಿ. ಆದರೆ ಬೇರೆ ವಿಂಡೋಸ್ಗಳಲ್ಲಿ ಬಾಮ್ ಆಗಿ ಎಷ್ಟು ಎಂಕೆ(byte)ಗಳು ಇರುತ್ತವೋ, ಅವುಗಳ ಬೆಲೆ ಏನೋ, ಯಾರಿಗೆ ಗೊತ್ತು? ಅವುಗಳೆಲ್ಲವನು ಓರುತ್ತ ಕೂತ್ಕೊಳ್ಳೋದಕ್ಕೆ ಆಗಲ್ಲ.

ಅದಕ್ಕೆ ಒಂದು ಸಣ್ಣ ಬಗೆಹರಿಕೆ(solution) ಇದೆ. ಮೊದಲನೇ ಸಾಲಿನಲ್ಲಿ ಯಾವುದೇ ಒಳುಪು(property)ಗಳನ್ನು ಹಾಕದಿರಿ. ಮೊದಲನೇ ಸಾಲು ಬರಿದಾಗಿ ಬಿಡಿ ಇಲ್ಲ ಅಂದರೆ ನಾನು ಮಾಡಿದ ಹಾಗೆ ಅನಿಸಿಕೆ (## ) ಹಾಕಿ. ಈ ತೊಂದರೆ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ. ಆದರೆ ಯೂನಿಕ್ಸ್  ಇಡಿವಳಿ(system)ಗಳಲ್ಲಿ ಈ ತೊಂದರೆ ಇಲ್ಲ.

Thursday, December 23, 2010

ಕನ್ನಡ (ಯುನಿಕೋಡ್) ಕಡತಗಳಿಗಾಗಿ java.util.properties

ತೇಲುವ ಚುಕ್ಕಿಯ ಬಗ್ಗೆಯ ಬರಹಗಳನ್ನ ಮುಂದುವರೆಸುವುದಕ್ಕೆ ಮೊದಲು, ಒಂದು ಹಮ್ಮು ಹಂಚಿಕೊಳ್ಳೋಣ ಅಂತ ಅಂದುಕೊಂಡೆ. ಆದರೆ ಇದು ಜಾವ ಹಮ್ಮುಗ(programmer)ರಿಗೆ ಮಾತ್ರ.

ಇತ್ತೀಚಿಗೆ ವಿಕ್ಷನರಿಗೆ ಒರೆಗಳನ್ನು ಸೇರಿಸುವ ಮೊರೆ / ಪರಿವಿಡಿ(procedure)ಯನ್ನು ತನ್ನಡೆಸು(automate)ವ ಹೊಣೆಯನ್ನು ನನಗೆ ಸಂಜೀವ್ ವಹಿಸಿದರು. ಅದಕ್ಕಾಗಿ ಒಂದು ಸಣ್ಣ ಹಮ್ಮು ಬರೆದೆ, ಜಾವದಲ್ಲಿ. ಕೆಲವು ಒಳುಪುಗಳನ್ನು(properties) ಉಳಿಸಿಡಲು ಒಂದು .properties ಕಡತವನ್ನು ಬರೆದು ಅದರಲ್ಲಿ ಕೆಲವು ಕನ್ನಡದ ಬೆಲೆ(value)ಗಳನ್ನು ಬಳಸಿದೆ. ಅಂದರೆ ಕನ್ನಡ ಯುನಿಕೋಡ್ ಲಿಪಿಯಲ್ಲಿ ಬೆಲೆಗಳನ್ನು ಹಾಕಿದೆನು. ಆ ಕಡತದ ಒಳಪಿಡಿ(contents) ಹೀಗಿತ್ತು ನೋಡಿ:

###
username=username
password=password
search_prefix=ಕ
wiki=kn.wiktionary.org
output_file=out.txt

ನಾನು ಬರೆದ ಹಮ್ಮು (program) ಮಾಡಬೇಕಾಗಿದ್ದು ಇಶ್ಟು: ಈ ಕಡತದಲ್ಲಿ ಕೊಟ್ಟಿರುವ ಬಳಕೆಗಾರ-ಹೆಸರು (username) ಮತ್ತು ತೇರ್ಪದ(password)ವನ್ನು ಬಳಸಿ ವಿಕ್ಷನರಿಯನ್ನು ಹೊಕ್ಕು (login) 'ಕ' ಬರಿಗೆ(ಅಕ್ಷರ)ಯಿಂದ ಮೊದಲಾಗುವ ಎಲ್ಲ ಪದಗಳನ್ನು ಹುಡುಕಿ out.txt ಎಂಬ ಕಡತದಲ್ಲಿ ಹಾಕಬೇಕು.

ಹಮ್ಮನ್ನು ಓಡಿಸಿದೆ, ಆದರೆ ಏನೂ ಬರಲಿಲ್ಲ :-(!!! ಸರಿ ಅಂತ ಹುಳ ತೆಗೆಯೋದಕ್ಕೆ (debug) ತೊಡಗಿದೆ. ಆಮೇಲೆ ಗೊತ್ತಾಯ್ತು, ತೊಂದರೆ ಇದ್ದಿದ್ದು ನನ್ನ ಹಮ್ಮಿನಲ್ಲಿ ಅಲ್ಲ, ಈ ಕಡತವನ್ನು ಓದಲು ಬಳಸುತ್ತಿದ್ದ java.util.Properties.load() ಕೆಲಸ(function)ದಲ್ಲಿ ಅಂತ. ಇದರ ಜಾವ ಡಾಕ್ ಹೀಗೆ ಹೇಳುತ್ತೆ:

The load(InputStream) / store(OutputStream, String) methods work the same way as the load(Reader)/store(Writer, String) pair, except the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes ; 

ಅಂದರೆ, ಅಯ್.ಎಸ್.ಒ ೮೮೫೯-೧ ಬರಿಗೆ(character)ಗಳು ಮಾತ್ರ ಇರುವ ಕಡತವನ್ನು ಸರಿಯಾಗಿ ಓದುತ್ತೆ. ಆದರೆ ಯುನಿಕೋಡ್ ಬರಿಗೆ ಇದ್ದಲ್ಲಿ ಅದನ್ನು ಸರಿಯಾಗಿ ಮಾರ್ಬರೆ(encode)ಯಬೇಕು. ಅಂದರೆ ಈ ಕಡತದಲ್ಲಿ 'ಕ' ಬಳಸಿದ್ದೀನಲ್ಲ ಅದನ್ನ ಯುನಿಕೋಡ್ ಪಾರು ವರಸೆ (escape sequence)ಯಾಗಿ ಮಾರ್ಬರೆ(encode)ಯಬೇಕು. ಹೀಗೆ:

search_prefix=\u0C95

ಹೀಗೆ ಮಾರ್ಪಾಡು ಮಾಡಿ ಹಮ್ಮು ಓಡಿಸಿದಾಗ 'ಕ' ಇಂದ ಮೊದಲಾಗುವ ಎಲ್ಲ ಪದಗಳು 'out.txt'ಗೆ ಬಂದು ಬಿದ್ದವು. :-)) (ಚಪ್ಪಾಳೆ!!!!)

ಆದರೆ ಲಾಟಿನ್ ಬರಿಗೆಗಳನ್ನು (latin characters) ಬಳಸದ ಕನ್ನಡದಂತಹ ಲಿಪಿಗೆ ಇದು ಕೊಂಚ ತೊಡಕಿನ ಸಂಗತಿ. ಯುನಿಕೋಡ್ ಬರಿಗೆಗಳನ್ನು ಮಾರ್ಬರೆ(encode)ಯದೆ ಹಾಗೇ  .properties ಕಡತದಲ್ಲಿ ಕೊಟ್ಟಿದ್ದನ್ನು ಓದಿ ಬಳಸಬಲ್ಲ ನನ್ನದೇ ಆದ ಒಂದು Properties class ಅನ್ನು ಬರೆದೆ. ಯಾರದೂ ಹಂಗು ಬೇಡ ಅಂತ :-). ಕೆಳಗೆ ಅದರ ಹಮ್ಮು ಹಾಕಿದ್ದೀನಿ. ಇನ್ಮೇಲೆ .properties ಕಡತದಲ್ಲಿ ಕನ್ನಡ ಇಲ್ಲವೇ ಯಾವುದೇ ಯುನಿಕೋಡ್ ಬರಿಗೆಗಳನ್ನು ಬಳಸಬೇಕಾದಾಗ ಪಾರು ವರಸೆ (escape sequence)ಗಳ ಬಗ್ಗೆ ತಲೆ ಕೆಡಿಸ್ಕೊಳ್ಳೋದು ಬೇಡ. ಬಳಸಿ, ಹಾಗೇ ಹಂಚಿಕೊಳ್ಳಿ.