યુનીકોડ ફોંટ - ચીરાગ પટેલ Nov 04, 2006
આપણે જોઈ ગયા, કે દરેક કેરેક્ટરને એક ચોક્કસ બાઈટ સંખ્યા વડે દર્શાવાય છે. એક બાઈટ, એટલે 8 બીટ અથવા 2 નીબલ, વડે 0થી લઈને 255 સુધીની જ સંખ્યા સમાવી શકાય. એટલે પ્રચલીત ભાષાઓમાં લખાણ માટે જે તે ફોંટ બનાવનારે આ મર્યાદામાં રહીને જ અક્ષરો દર્શાવવાના થયાં. અને એમાં પણ ભારે ઉથલ-પાથલ મચી ગઈ. એક જણે ગુજરાતીના ‘ક’ માટે 78નો અંક રાખ્યો અને બીજાએ 98નો અંક રાખ્યો. આમ, એક ફોંટમાં લખેલી ફાઈલને ખોલવા માટે બીજો ફોંટ લગભગ નકામો! અને વીચારો કે ગુજરાતીમાં લખેલી ફાઈલને ઈંગ્લીશ કે અરેબીકમાં ખોલીએ તો…
આ બધી અંધાધુંધી જો કે ઈંગ્લીશ સીવાયની લીપી માટે રહી. ઈંગ્લીશમાં તો જુદાં જુદાં ફોંટ વાપરવા છતાં અક્ષરો દર્શાવવાની સંખ્યા તો ચોક્કસ જ રહી. એટલે, ટાઈમ્સમાં લખેલી ફાઈલ એરીયલ ફોંટ વડે ખુલે તો ખરી જ. માત્ર, જે તે અક્ષરના વળાંકો અલગ રીતે જોવા મળે. આવું કાંઈક બીજી બધી લીપી માટે વીચારી શકાય?
આ જ પ્રશ્નમાંથી યુનીકોડને નીયમબધ્ધ કરવાની શરતો નક્કી થઈ. યુનીકોડમાં UTF-7, UTF-8, UTF-16 વગેરે અલગ-અલગ નીયમો પ્રચલીત થયા. અને યુનીકોડમાં ફોંટ બનાવવા માટે બે બાઈટનો ઉપયોગ કરવાનું વીચારાયું. આમ, બે બાઈટ વડે 0થી લઈને 65535 સુધીની સંખ્યા લખી શકાય, એટલે દુનીયાની દરેક પ્રચલીત લીપી માટે ચોક્કસ સંખ્યા-ગાળો નક્કી કરવામાં આવ્યો. હવે તો, 4 બાઈટના યુનીકોડ વીશે પણ વીચારણા ચાલી રહી છે! એટલે 0થી લઈને 65535 * 65535 સુધીની સંખ્યા દર્શાવી શકાય!
UTF-8 એ આસ્કી કેરેક્ટર સાથે સારી રીતે સુસંગત થાય છે, એટલે વધુ પ્રચલીત છે. આપણે, લીપી પ્રમાણે થોડી સંખ્યાઓ જોઈએ.
દેવનાગરી - 0×0900 - 0×097f ગુજરાતી - 0×0a80 - 0×0aff
વધુ માહીતી માટે જુઓ: http://en.wikipedia.org/wiki/Basic_Multilingual_Plane#Basic_Multilingual_Plane
હવે, ગુજરાતીના દરેક અક્ષર માટે ઉપર દર્શાવેલા અંતરાલમાંથી એક ચોક્કસ સંખ્યા નક્કી થઈ છે. જેમ કે, ‘ક’ માટે 0×0a95, ‘ૐ’ માટે 0×0ad0, વગેરે. વધુ માહીતી માટે જુઓ: http://en.wikipedia.org/wiki/Gujarati_script
વીંડોઝ એક્ષ.પી. સાથે શ્રુતી ફોંટ આવે છે જે યુનીકોડ છે. એ ફોંટમાં લખેલી ફાઈલને બીજા કોઈ યુનીકોડ ફોંટ વડે ખોલીએ તો આપણને ‘ક’ જ્યાં હોય ત્યાં જ દેખાશે, પરંતુ એ જુદા ફોંટ વડે મરોડમાં થોડો ફેર હોઈ શકે. આમ, યુનીકોડ વડે દરેક અક્ષરનું ચોક્કસ સંખ્યા-સ્થાન નક્કી થઈ ગયું છે, જેણે ઈંટરનેટના વપરાશમાં ક્રાંતી લાવી દીધી. પહેલાં તો જે તે વેબ-સાઈટ પોતાના ફોંટ બનાવે જે ડાઉનલોડ કરવા પડે, અને તો જ જે તે સાઈટ દેખાય. જ્યારે હવે તો, યુનીકોડમાં બનેલી સાઈટ જોવા એવું કરવાની જરુર નથી પડતી (જો કે, અમુક અપવાદ હોઈ શકે છે).
www.bhashaindia.com પરથી આસ્કી <-> યુનીકોડ બન્ને રીતે ફાઈલને પરીવર્તીત કરવાને યુટીલીટી ડાઉનલોડ કરી શકાય છે (TBILconverter). વિશાલે પણ www.gurjardesh.com પર ઓનલાઈન યુટીલીટી મુકી છે.
બાઈટોપીડીયા - ચીરાગ પટેલ Oct 13, 2007
આપણે ઘણીવાર એવું સાંભળ્યું હશે, કે મારી હાર્ડ ડ્રાઈવ (hard disc drive) 80GBની છે. તો આ 80જીબી વળી શી બલા છે? અહીં જી.બી. એટલે ગીગા બાઈટ (Giga Byte)નું મીતાક્ષરી સ્વરુપ. આમ, 80જીબી હાર્ડ ડ્રાઈવમાં 80ગીગા બાઈટ જેટલી માહીતીનો સંગ્રહ થઈ શકે. પ્રચલીત પધ્ધતી પ્રમાણે, 1KB એટલે 1 કીલો બાઈટમાં કુલ 1024 બાઈટ હોય! (1કીલો મીટરમાં 1000 મીટર હોય! આ વળી કેમનું થયું?) આમ થવાનું કારણ એ કે બાયનરી પધ્ધતીમાં 2ના ગુણાંકમાં ગણતરી થતી હોય છે. 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 1024 થાય! પ્રમાણમાપની આંતરરાષ્ટ્રીય સંસ્થા Systems International (SI)એ નક્કી કરેલાં ધારાધોરણ મુજબ 1KB એટલે 1000બાઈટ જ ગણવા અને પ્રચલીત 1KBને 1KiB (kibibyte) કહેવું એવું ઠરાવવામાં આવ્યું છે. પ્રચલીત ગણતરી મુજબ જોઈએ તો:
1KB = 1કીલો બાઈટ = 1024 બાઈટ = 2 exp 10 (2ની 10મી ઘાત, અર્થાત 2 * 2 * 2… એમ 10 વખત) 1MB = 1મેગા બાઈટ = 1024 * 1024 બાઈટ = 1048576 બાઈટ = 2 exp 20 1GB = 1 ગીગા બાઈટ = 1024 * 1024 * 1024 બાઈટ = 2 exp 30 1TB = 1 ટેરા બાઈટ = 1024 * 1024 * 1024 * 1024 બાઈટ = 2 exp 40 1PB = 1 પીટા બાઈટ = 1 ટેરા બાઈટ * 1024 બાઈટ = 2 exp 50 1EB = 1 એક્ઝા બાઈટ = 1 પીટા બાઈટ * 1024 બાઈટ = 2 exp 60 1ZB = 1 ઝેટ્ટા બાઈટ = 1 એક્ઝા બાઈટ * 1024 બાઈટ = 2 exp 70 1YB = 1 યોટ્ટા બાઈટ = 1 ઝેટ્ટા બાઈટ * 1024 બાઈટ = 2 exp 80
8 બીટનો 1 બાઈટ બને છે. હવે, 4 બીટના સમુહને 1 નીબલ (nibble) કહે છે. એક બાઈટની સંખ્યા લખવામાં સરળતા રહે એ માટે બે નીબલના ગ્રુપમાં તે સંખ્યા લખવામાં આવે છે. જેમ કે, 1011 1011b, 0011 1100b, વગેરે. સંખ્યાને લખવાની પ્રચલીત રીત છે તેને બાયનરીને બદલે હેક્ઝાડેસીમલમાં લખવી. હેક્ઝાડેસીમલમાં 0,1,2,3,4,5,6,7,8,9 સુધીનાં અંકો અને ત્યાર બાદ 10ને બદલે A(a), 11ને બદલે B(b), 12ને બદલે C(c), 13ને બદલે D(d), 14ને બદલે E(e), અને 15ને બદલે F(f) લખવામાં આવે છે. અને સંખ્યાને 0x(Zero-x)થી પ્રીફીક્સ કે h વડે પોસ્ટ્ફીક્સ કરવામાં આવે છે. ચાલો ત્યારે, થોડાં ઉદાહરણો કરીશું?
1011 1100b માં 1011b = 11(8+2+1) છે અને 1100b = 12(8+4) છે. હવે 11 એટલે B અને 12 એટલે C. આમ, 1011 1100b = 0xBC અથવા 0xbc અથવા bch. એને ડેસીમલમાં ફેરવીએ તો? એક નીબલમાં 0થી 15 સુધીની સંખ્યા દર્શાવી શકાય, એટલે કે કુલ 16 સંખ્યાઓ દર્શાવી શકાય છે.બાઈટમાંના ડાબી બાજુથી પહેલાં નીબલને 16 વડે ગુણો અને બીજા નીબલને તેમાં ઉમેરો, તો હેક્ઝાડેસીમલ સંખ્યા ડેસીમલ બની જશે! આપણાં ઉદાહરણમાં, 0xbc = 11 * 16 + 12 = 176 + 12 = 188. હેક્ઝાડેસીમલમાં એક બાઈટમાં દર્શાવાતી સહુથી નાની સંખ્યા = 0×00 = 0, અને સહુથી મોટી સંખ્યા = 0xFF = 255. કમ્પ્યુટરમાં કેલ્ક્યુલેટરની એપ્લીકેશનમાં તમે એનાં “View” મેન્યુમાંથી “Scientific” સીલેક્ટ કરો. તમે ડાબી બાજુ ઉપર તરફ રેડીયો બટન જોશો, જેમાં Hex - Dec - Oct - Bin છે. ડીફૉલ્ટ સીલેક્શન ડેસીમલ હોય છે. કોઈ પણ 0થી255 વચ્ચેની સંખ્યા લખીને હેક્ઝ કે બીન સીલેક્ટ કરી જુઓ. ગમ્યું? (હવે ખ્યાલ આવ્યો કે શા માટે એક બાઈટને 4બીટ એટલે કે એક નીબલના જોડકામાં લખવામાં આવે છે? અને એમાં પણ હેક્ઝાડેસીમલ કેમ સરળ પડે છે એ પણ ખ્યાલ આવ્યો?) ફરી ઉપરનું ઉદાહરણ લખીએ તો,
188 = 1011 1100b = 0xBC 0 = 0000 0000b = 0×00 255 = 1111 1111b = 0xFF
તમે કીબોર્ડ(keyboard)ને ધ્યાનથી જોયું હશે તો એમાં 0,1,2,…,9 અને A,B,…,Z તથા !,@,…,+ વગેરે જેવાં ચીહ્નો ધરાવતી કી હશે. શીફ્ટ કી, પેઈજ અપ, પેઈજ ડાઉન, વગેરે જેવી કી હશે. આ દરેક કીને એક ચોક્કસ બાઈટ સંખ્યા આપવામાં આવેલી છે. દા.ત., ‘0′ = 0×30 = 48 ‘A’ = 0×41 = 65 ‘a’ = 0×61 = 97
આવા બાઈટકોડને આસ્કી(ASCII) કેરેક્ટર કહે છે. વધુ માહીતી માટે જુઓ: http://en.wikipedia.org/wiki/ASCII જ્યારે જ્યારે કમ્પ્યુટરમાં કોઈ પણ માહીતીની આપ-લે થાય છે ત્યારે એ બાઈટ રુપે જ થાય છે; જેમ કે, કીબોર્ડથી સીપીયુ, સીપીયુથી મોનીટર, સીપીયુથી હાર્ડ ડીસ્ક ડ્રાઈવ, સીપીયુથી ઈંટરનેટ, વગેરે. તમે અત્યારે જે વાંચી રહ્યાં છો એ પણ બાઈટની જ આપ-લે છે.
આપણાં જે પ્રચલીત લખવાના ફૉંટ છે તે બધાં આસ્કી ફોંટ છે. એટલે કે, 0-255ની સંખ્યાને સાંકળે તેવાં ચોક્કસ કેરેક્ટર લખવામાં આવે છે. જે તે ફોંટ ઇંસ્ટોલ કરીએ એટલે વર્ડ જેવી એપ્લીકેશન એ ફોંટ પ્રમાણે સ્ક્રીન પર કેરેક્ટર દર્શાવે છે. આ બાબત સમજવા એક પ્રયોગ કરી જુઓ. વર્ડ ખોલીને અત્યારે જે ફોંટ હોય તે રાખીને એક વાક્ય લખો. પછી જુદાં-જુદાં ફોંટ સીલેક્ટ કરતાં જાઓ અને જુઓ કે એ પ્રમાણે સ્ક્રીન પર જે કેરેક્ટર દેખાય છે તેમાં કેવા ફેરફાર થાય છે? ( Control key દાબી રાખીને A દબાવો એટલે જે લખ્યું છે એ બધું સીલેક્ટ થશે અને પછી Format મેન્યુમાંથી Font સીલેક્ટ કરી, જે ડાયલોગ બૉક્ષ આવે તેમાં જુદાં-જુદાં ફોંટ સીલેક્ટ કરતાં જાઓ).
કમ્પ્યુટરની અંકપધ્ધતી - ચીરાગ પટેલ Sep 30, 2007
આદરણીય જુગલકાકાએ મને કમ્પ્યુટર ક્ષેત્રે કાંઈક લખવા માટે પ્રેરકબળ પુરું પાડ્યું. એવું કાંઈક કે જે પાયાની માહીતી આપીને સામાન્ય વાચકને કમ્પ્યુટરનો ઉપયોગ કરવા માટે મજબુર કરી દે. આમ તો ઘણા સમયથી મારે C++ ભાષા (પ્રોગ્રામીંગની ભાષા) વીશે ગુજરાતીમાં લખવું શરું કરવું હતું, પરંતુ જુગલકાકાની વાતે મને એક નવી જ દીશા સુઝાડી! અને આ બ્લોગ તમારી સમક્ષ હાજર છે! તો હવે પડદો ઉંચકાય છે…
સૌપ્રથમ કમ્પ્યુટરનો અર્થ છે તે સમજીએ. કમ્પ્યુટરનો સરળ અર્થ છે: ગણતરી કરતું યંત્ર! પરંતું, કમ્પ્યુટર માત્ર ગણતરી કરીને અટકી જવાને બદલે આપણી સમક્ષ એક અવનવી દુનીયા ખડી કરી દે છે (મેટ્રીક્સ મુવીમાં દર્શાવ્યા મુજબ જ સ્તો!). માત્ર ગણતરી જ કરવી હતી તો ‘કેલ્ક્યુલેટર‘ છે જ ને. જો કે, કમ્પ્યુટર જે પણ કામ કરતું હોય, અંતે તો કરે છે ગણતરી જ (નામ પ્રમાણે કામ તો કરવું જ પડે ભાઈ). તો ચાલો, કમ્પ્યુટર એવું તો શું અને વળી કેવી રીતે ગણે છે તેની સમજુતી જોઈએ.
આપણે ગુજરાતીઓ ગણતરીમાં પાકાં કહેવાઈએ છીએ (કઈ, એ તો સહુ સમજીએ જ છીએ!). તો મને કહો, દશઅંકી (decimel) પધ્ધતી એટલે શું? (સુરેશદાદા વઢશે: લ્યા છોકરા, મશ્કરી કરે છે?) દશઅંકી પધ્ધતી ભારતે દુનીયાને આપેલી મહાનતમ ભેટ છે. કોઈ પણ સંખ્યાને 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 એમ કુલ દશ અંકો વડે દર્શાવવી એટલે દશઅંકી પધ્ધતી વાપરી એમ કહેવાય! (ભાઈ, દશઅંકી પધ્ધતી અને 10 જ ગાયબ થઈ ગયો? ના, 10 એટલે 0 અને 1 વડે બનતી સંખ્યા. એમ કાંઇ અમે કોઈને ખોટું લાગવા દઈએ?)
આ જ રીતે, કમ્પ્યુટર પોતાની ભાષામાં દ્વીઅંકી (binary) પધ્ધતીનો ઉપયોગ કરે છે. (બોલો ચતુરસુજાણો, દ્વીઅંકી પધ્ધતી એટલે શું?) (હવે ટપારવાનો વારો જુ.કાકાનો: ચીરાગ તમે અમને રસક્ષતી કરવાને બદલે, ભાષાને વહેવા દો અને અમને આકંઠ પાન કરવા દો.) એટલે કમ્પ્યુટર પોતાને માટે 0 અને 1 નો ઉપયોગ કરીને દરેક સંખ્યા બનાવે છે! (માથું ખંજવાળવું પડશે એવું લાગે છે? માફ કરજો. કમ્પ્યુટરનો 0 અને 1 માટેનો પ્રેમ આપણને કેવા નાચ નચાવે છે, નહીં?)
દરેક દશઅંકી સંખ્યાને દ્વીઅંકીમાં રુપાંતરીત કરવા તમને એક સાદો નીયમ જણાવું. 8-4-2-1 નો નીયમ. 0થી 15 સુધીની કોઈ પણ એક સંખ્યા ધારો. દા.ત., 12. હવે 8-4-2-1 નો ઉપયોગ કરીને 12 કેવી રીતે બને? 8+4 = 12. ઠીક? હવે, આપણે 12 બનાવવા માટે 8-4-2-1માંથી જે સ્થાન વાપર્યા હોય તેને બદલે 1 મુકો અને જે ના વાપર્યા હોય તેને સ્થાને 0 મુકો. શું બન્યું? 1-1-0-0 (8-4-2-1 નો ક્રમ જાળવવો અગત્યનો છે.). એટલે 12 (જે દશઅંકી છે)ને દ્વીઅંકીમાં 1100 કહેવાય. 1100ની સાથે ‘b’નું છોગું લગાવી દો એટલે કોઈ ગુંચવાડો ઉભો ના થાય. (નહીંતર, ગુજરાતીઓ ગભરાઈ જશે કે, માળું મેં 12રુપીયા આપ્યા હોય તેના 1100 થઈ ગયા?) આમ, 12 = 1100b. ચાલો જોઉં, હવે થોડી પ્રેક્ટીસ કરો. 0થી 15 સુધીની બધી દશઅંકી સંખ્યાને દ્વીઅંકીમાં ફેરવો. (સુ.દાદા: ઠીક ભાઈ, હવે 15થી મોટી સંખ્યાને દ્વીઅંકીમાં કેવી રીતે ફેરવું?) 8ના બમણા કરીએ તો શું મળે? શાબાશ, 16. તો હવે, 0થી 31 સુધીની દશઅંકી સંખ્યાને દ્વીઅંકીમાં ફેરવવા 16-8-4-2-1નો નીયમ લગાવો. 16-8-4-2-1 વડે દર્શાવાતી મોટામાં મોટી સંખ્યા જાણવી હોય તો કરો સરવાળો: 16+8+4+2+1=31!
દ્વીઅંકી સંખ્યાને દશઅંકીમાં ફેરવવા માટે પણ આ જ નીયમનો ઉપયોગ કરો. દા.ત., 10110b = 16+4+2 = 22. આમ, કોઈ પણ મોટી સંખ્યાને આપણે દ્વીઅંકીમાં ફેરવી નાંખીએ. અથવા દ્વીઅંકી સંખ્યાને દશઅંકી સંખ્યામાં. હવે કમ્પ્યુટરની ભાષામાં દરેક અંકને બીટ (bit) કહે છે. અને 8 બીટને 1 બાઈટ (byte) કહે છે. થોડી વાર માથું ખંજવાળી નાંખો અને મને એ કહો કે 1 બાઈટવડે લખાતી મોટામાં મોટી સંખ્યા કઈ? ધત્ત, 1111 1111b! (પ્રશ્નમાં એવું થોડું કહ્યું કે દશઅંકી સંખ્યા કહો?) નોંધ્યું? 4 બીટનાં ગ્રુપ બનાવીને સંખ્યા લખવામાં આવે છે કે જેથી કોઈ લોસ્મોચો ના થાય!. એમ ત્યારે, બોલો જોઉં, 1 બાઈટ વડે લખાતી મોટામાં મોટી દશઅંકી સંખ્યા કઈ? હમમમ… 128-64-32-16 8-4-2-1 નો નીયમ લાગુ પડ્યો! કેલ્ક્યુલેટર લેવું પડશે? (હા, જો અમેરીકામાં સ્કુલ કરી હોત તો. પણ, આપણે તો રહ્યાં દેશી!) 128+64+32+16+8+4+2+1 = 255! આમ, એક બાઈટ વડે 0થી લઈને 255 સુધીની કોઈ પણ દશઅંકી સંખ્યા લખી શકાય.
આ જ નીયમને વીસ્તારતા જઈએ તો જણાશે કે, 2 બાઈટ વડે 256 * 256 = 65536 (ઓછા 1) થાય, એટલે 0થી 65535 સુધીની સંખ્યા દર્શાવી શકાય. 4 બાઈટ વડે? રહેવા દો હવે…
કમ્પ્યુટર પોતાના કોઈ પણ કામકાજ માટે આ બાઈટરુપી કક્કાનો ઉપયોગ કરે છે. પછી એ દ્રશ્ય હોય કે લખાણ, મેમરીનો સંગ્રહ કરવાનો હોય કે પ્રીંટર પણ લખાણ છાપવાનું હોય! અને ઈંટરનેટ પર આટલો બધો માહીતીનો ધોધ વહે છે તે પણ 0 અને 1નો જ ઉપયોગ કરીને. કઈ રીતે? શું આજે જ બધું ભણી લેવું છે? આવતા અઠવાડીયાની રાહ જુઓને?
(સુરેશદાદા, જુગલકાકા; કાંઈ પણ અવીનય કર્યો હોય તે બદલ ક્ષમા)