2009/12/19

MT инженерийн шалгалтанд бэлтгэгчдийн блог нээгдлээ

Мэдээллийн технологийн инженерийн шалгалтанд бэлдэх, өөрсдийн үзэж судалсан зүйлс, энэхүү шалгалтын талаарх мэдээ мэдээлэл, мэдлэгээ харилцан солилцох, хамтран суралцах сонирхолтой хэсэг залуус нэгдэн энэхүү блогийг нээж байна. Монгол хэл дээр хөтлөн явуулах ба хамтран бичих гишүүнчлэл нээлттэй. Та бүхнийг урьж байна. Бүгдээрээ мэдээллийн технолийн инженерийн шалгалтандаа тэнцэхийн төлөө :D

Блогийн хаяг: http://itfemn.blogspot.com/

2009/09/06

Python: Hello World


Аливаа програмчлалын хэлд суралцаж байгаа хэн бүхний хийдэг хамгийн эхний алхам нь Hello World мөрийг хэвлэх явдал байдаг гэвэл худлаа хэлсэн болохгүй болов уу. Хэрвээ та Windows хэрэглэгч бол Python-ы албан ёсны сайтаас татаж аваад суулгаж болно. Энэ хэл маань өөрөө нээлттэй эх бүхий програм хангамж болохоор болохоор мэдээж үнэгүй.

Python


Python програмчлалын хэл нь асар баялаг стандарт сан функцуудээр хангагдсан дээд түвшний програмчлалын хэлүүдийн нэг юм. Энэ хэлний гол уриа, үзэл санаа нь "remarkable power with very clear syntax" буюу "цомхон бичиглэлээр агуу агуу хүч чадлыг атгах" явдал юм.
Python хэл нь обьект хандалтат технологи, командын мөрнөөс ажиллах, өгөгдлийн динамик төрөл, автоматаар санах ойг удирдах зэрэг олон хүчирхэг боломжуудыг өөртөө агуулдагаараа Perl, Ruby, Scheme, Tcl зэрэг динамик програмчлалын хэлүүдтэй төсөөтэй. Зарим үед Python хэлийг скрипт байдлаар ч ашиглах боломж бий.

2009/08/22

Voltron Defender of the Universe Episode

Намайг 6-тай байхад, 97 оны үед юм уу даа. Монгол телевизээр орой болгон 6:10-аас бидний шүтээн болсон Японы хүүхэлдэйн цуврал кино "Волтрон" гардаг байж билээ. Цэцэрлэгээсээ энэ киногооо үзэх гэж яарч харина шүү дээ хэхэ. "Сансрыг хамгаалагч Волтрон" гээд л сүртэй нь аргагүй эхлэнэ. Одоо бодоход анги болгоны үйл явдал нь ерөнхийдөө нэгэн хэвийн. Хүн төрөлхтөн, харийхан хоёр шинэ гариг нээхийн төлөө тэмцэлдэнэ. Харийхан эхлээд энх тайван гэж хүн төрөлхтнийг "хошгируулж" байгаад нууцаар мангас робот хийгээд тэр роботыг нь Волтон маань хоёр цавчаад л сөнөөнө шүү дээ. Тэр үед сэтгэл мөн их хөдөлж байж шүү :)










Манай баатрын албан ёсны сайт: http://www.voltron.com/main.asp

2009/08/18

Never give up!

Хэнд ч юунд ч хэзээ ч битгий бууж өг.

2009/08/15

Apache friends:XAMPP

PHP дээр вэб урлагчдад зориулсан нэлээд хэрэгцээтэй програм хангамж нь XAMPP. Түүн дотор Apache(PHP), MySQL, PHPMyAdmin гээд гол хэрэгцээтэй програм хангамжууд нь цуг ирдэг нь тун дажгүй.

Windows-д зориулсан хувилбарыг татаж авах линк.

2009/08/14

You are not alone



Өөрийгөө ганцаардаж байна гэж бодож буй бүх хүмүүст зориуллаа(өөртөө ч гэсэн :)).

Та ганцаараа биш шүү. Би энд байна :)

Make me a sandwich

Эх сурвалж: http://battur.blogspot.com/

2009/08/12

Download managers for Ubuntu

Download manager нь интернэтээс төрөл бүрийн файл downlaod хийх зориулалттай програм хангамж гэдэг нь ойлгомжтой. Вэб броузерууд интернэтээс download хийх боломжоор хангагдсан байдаг хэдий ч тэдгээр нь бидний хэрэгцээг гүйцэд хангаж чаддаггүй (удаан, татаж байх явцад тасалдахад дахиад эхнээс нь татах болдог гэх мэт).

Download manager төрлийн програмын үзүүлж чадах боломжууд гэвэл:

2009/08/09

Quotes by Music Lovers

Music before everything else ... Music again and forever! - Paul Verlaine


Music ... is something we are all touched by. No matter what culture we're from, everyone loves music. - Billy Joel


Life exists for the love of music or beautiful things. - G. K. Chesterton


The pleasure we feel in music springs from the obedience which is in it. - Henry David Thoreau


Music is an intellectual or sensual pleasure, according to the temperament of him who hears it. - Thomas de Quincey


Music is the only sensual pleasure without vice. - Samuel Johnson


Music produces a kind of pleasure which human nature cannot do without. - Confucius


My heart, which is so full to overflowing, has often been solaced and refreshed by music when sick and weary. - Martin Luther


Intelligence is not knowledge,
knowledge is not wisdom,
wisdom is not truth,
truth is not beauty,
beauty is not love,
love is not music.
Music is best. - Frank Zappa


There are two means of refuge from the misery of life, music and cats. - Albert Schweitzer


Music is the nearest at hand, the most orderly, the most delicate, and the most perfect, of all bodily pleasures; it is also the only one which is equally helpful to all the ages of man. - John Ruskin


Every kind of music is good, except the boring kind. - Gioacchino Rossini

2009/08/04

Download videos from YouTube in Ubuntu

Ubuntu дээр YouTube-ээс видео татаж авдаг youtube-dl гэж програм байдаг юм байна. Над шиг хөгжмөөр "хооллодог" Ubuntu-чид дуртай видеогоо татаж авчихаад тухтайхан үзээд сууж байж болох нь. Тэнд ганц дуу хөгжим гэлтгүй бүхий л төрлийн, өргөн хүрээг хамаарах видео байдаг л даа. За тэр олон үг яахав. Энэ програмыг суулгахдаа:

2009/07/31

Ubuntu - г G - Mobile - ийн интернэтэд холбох - 2

Саяхан өөрийн тооцоолуур дээрээ Ubuntu 9.04 суулгаад өөрийн өмнөх бичлэг дээрх (Мөнхбаатар ахын)аргаар G-mobile - аа холбох гэтэл ганц хоёр бэрхшээлтэй тулгарлаа.

Ubuntu - г G - Mobile - ийн интернэтэд холбох

Мөнхбаатар ахын IT-around блог дээр байсан бичлэгийг оруулчихлаа. Хэрэг болно хэмээн найдаж байна.

$ lsusb
========================================
Bus 005 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 002 Device 004: ID 05c6:3197 Qualcomm, Inc. CDMA Wireless Modem/Phone
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
========================================

Нэг иймэрхүү юм гарч ирнэ. Өөр ямар нэгэн юм USB-гээр холбосон бол өөр зүйл гарч ирнэ. Тэр нь гэхдээ хамаагүй.

$ sudo modprobe usbserial vendor=0x05c6 product=0x3197

Энд арын тэр үсэг тоонууд "Bus 002 Device 004: ID 05c6:3197 Qualcomm, Inc. CDMA Wireless Modem/Phone" байгаатай адилхан байх ёстой. Компьютэрээсээ хамаараад өөр өөр байна.

$ dmesg

Энэ хэсэг байхгүй байсан ч болох юм шиг байна лээ. Гэхдээ юмыг яаж мэдэх бичиж уншуулаад модемтойгоо холбогдсон эсэхээ шалгачих.

$ sudo apt-get install wvdial

Энэ нь wdvial гэсэн програмыг суулгаж байгаа гэсэн үг нь ойлгомжтой. Энэ коммандыг ажиллуулангуут sudo password гэж асууна. Энэ нь super user-ын буюу root-ын нууц үгийг асууж байгаа юм.

$ sudo wvdialconf /etc/wvdial.conf

========================================
Scanning your serial ports for a modem.

Modem Port Scan<*1>: S0 S1 S2 S3
WvModem<*1>: Cannot get information for serial port.
========================================
Гэсэн эхлэлтэй бичигнүүд байх ба сүүлчээсээ өмнөх мөрөнд:

========================================
Modem configuration written to /etc/wvdial.conf.
========================================

гэж байвал комманд амжилттай биелэгдсэн гэсэн үг.

$ sudo gedit /etc/wvdial.conf

Текст засварлагчаар засвар хийнэ гэсэн үг.

========================================
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Stupid Mode = yes
ISDN = 0
Modem Type = USB Modem
New PPPD = yes
Phone = #777
Modem = цаанаасаа тохируулагдчихсан байна. өөрчлөх хэрэггүй.
Username = таны хэрэглэгчийн нэр
Password = таны нууц үг
Baud = 460800
========================================


Stupid Mode = yes гэсэн мөр зарим тохиолдолд байхгүй байж магадгүй. Минийх дээр лав байгаагүй. Үүнийг copy-paste хийгээд нэмчихээрэй.

$ sudo wvdial

Энэ коммандаар интэрнэтэд холбогдож байх болно. Terminal дээр

========================================
WvDial<*1>: WvDial: Internet dialer version 1.56
WvModem<*1>: Cannot get information for serial port.
WvDial<*1>: Initializing modem.
WvDial<*1>: Sending: ATZ
WvDial Modem<*1>: ATZ
WvDial Modem<*1>: OK
WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: OK
WvDial<*1>: Modem initialized.
WvDial<*1>: Sending: ATDT#777
WvDial<*1>: Waiting for carrier.
WvDial Modem<*1>: ATDT#777
WvDial Modem<*1>: CONNECT
WvDial<*1>: Carrier detected. Starting PPP immediately.
WvDial: Starting pppd at Sun Feb 10 22:18:34 2008
WvDial: Pid of pppd: 7410
WvDial<*1>: Using interface ppp0
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: local IP address **.**.**.**
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: remote IP address **.**.**.**
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: primary DNS address ***.***.***.***
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: secondary DNS address ***.***.***.***
WvDial<*1>: pppd: P?[06][08]??[06][08]
========================================

гэсэн бичигнүүд гарч ирж байвал okay гэсэн үг. Ip болоод сүүийн хэдэн мөрөн дэхь текстүүд зөрж болно. Ингээд интэрнэтэд холбогдчихсон гэсэн үг. Энэ терминал-аа хаавал интэрнэт салгагдана гэсэн үг.

Дараа интернэтэд холбогдохдоо
$ sudo wvdial
гэсэн хамгийн сүүлийн коммандыг тэрминал дээр бичихэд л болно.

2009/07/09

Компьютерийн хөгжлийн түүхэн үе шатууд

Тэртээ 2,5 сая жилийн тэртээ хүн төрөлхтөн оюун ухаанаараа адгуус амьтадаас ялгаран “Модны мөчир дээрээс бууж ертөнцийг танин мэдэхүйн эрэлд гарсан” – аас хойш хүний хөгжлийн түүхэнд маш олон ахиц дэвшил гарч байсан ба тэдгээрийн дотроос хүн төрөлхтөн байгаль дэлхийг танин мэдэхүйн үүднээс математик, физик, хими гэх мэт байгалийн шинжлэх ухаануудыг судлах болсон нь хүн төрөлхтний хувьд оюуны асар том эргэлт болж чадсан билээ.

Хэдий хүн төрөлхтний оюун ухааны хөгжил хүн анх үүсч байсан үетэй харьцуулахад асар өндөр түвшинд хүрсэн хэдий ч дээрхи шинжлэх ухаануудын томоохон, нарийн ширийн тооцоололуудыг хүн өөрийн оюун биеэр хийхэд алдаа гаргах магадлал их, удаан бодох, "залхуурах" гэх мэт хандлагууд ихээр ажиглагдах учир тэр их нүсэр тооцооллуудыг техникийн тусламжтай шийдэх гарцыг хайж эхэлсэн байна.

Компьютерийн үүсэл нь МЭӨ 2200 онд зохиогдсон нэмэх, хасах үйлдлийг хийдэг гүйцэтгэдэх механик тооцоолох Abacus төхөөрөмжөөс эхлэлтэй хэмээн үздэг. Энэ төхөөрөмжийн ажиллах боломж нь хязгаарлагдмал байсан учир эрдэмтэд түүнийг сайжруулах оролдлого хийсээр ирсэн байна. Эдгээр оролдлогын үр дүнд Шотландын математикч Жон Напьер(1555-1617) зааны ясаар тооцоолох төхөөрөмж зохиосон ба тэр төхөөрөмжийг "Напьерийн шоо" хэмээн нэрлэх болсон юм. Энэ төхөөрөмжийг логарифмийн хүснэгтийг гаргахад ашигладаг байсан ба үржүүлэх, хуваах үйлдлийг хялбархан хийж боломжтой байсан гэдэг. Энэ төхөөрөмж дээр үндэслэн Вильгелм Шеккард(1592-1635) “Напьерийн шоо”-н дээр үндэслэн “Тооцоолох цаг” нэртэй эргэдэг цлиндр гадаргуу зохиож түүний тусламжтай логарифмийг тоо болгох үйлдлийг нэмж хийсэн ажээ.

Тооцоолох төхөөрөмжүүдийн хөгжилд гарч байсан ахиц дэвшлүүд дотор эдгээр төхөөрөмжийг програмчлах санааг анх Лорд Байроны охин математикч Аугуста Ада(1815-1853) гаргасан бөгөөд тооны машиныг ажиллуулах загварыг өгсөн програм хийхийг санал болгож байжээ. Сонирхуулахад хожим нь түүний нэрээр нэрлэгдсэн ADA хэмээх прорамчлалын хэл зохиогдсон байдаг.

Харин орчин үеийн электрон комьпютерийн хөгжлийг ерөнхийд нь 5 үе шатад хувааж авч үздэг ба 1939 онд Айво мужийн дээд сургуулийн математикийн профессор Жон Атанов ба түүний туслах Клиффорд Берри нар хамтран вакуум дэнгүүдийг логик сүлжээ ашиглаж хийсэн эхний электрон компьютерийн загварыг бүтээсэн нь хамгийн эхний электрон тоон компьютер болсон байна. Эхний үеийн (1942 оноос 1959 он хүртэл) комьпютерүүд нь машины хэл дээр програмчлагдаж байсан ба үйлдвэрлэл вакуум дэнгүүдийг ашиглаж байсан нь болхи, хэт халдаг гэх мэт сул талууд ихтэй байсан тул алдаатай үйлдэл ихээр гаргадаг байжээ.

Бидний өдөр тутмын амьдралын хэрэглээний тоног төхөөрөмжийн үндэс болсон транзисторыг одоогоос жар гаран жилийн өмнө буюу 1947 онд Bell Labs-ийн ажилтнууд болох Жон Бардин, Уолтер Браттайн, Вильям Шокли нар бүтээснээр технологийн хөгжлийг шинэ түвшинд гаргасан юм. Энэ гурван хүнд 1956 онд Физикийн салбарын Нобелийн шагналыг олгосон байдаг. Транзистор нь унтраалга мэтээр ажилладаг боловч түүнд ямар нэгэн хөдөлгөөн байхгүй учиг компьютерийн овор хэмжээ багасч, нэг үйлдлийг микро секундэд гүйцэтгэх, олон мянган тэмдэгтийг хадгалах гэх боломжууд нэмэгджээ. Эхний транзисторт компьютеийг 1954 онд Bell Labs-д 800 транзистор хэрэглэсэн TRADIC компьютерийг бүтээснээр компьютерийн хөгжлийн шинэ үеийг авчирсан юм. Энэ технологи гарснаар компьютер үйлдвэрлэгчид илүү багтаамжтай, хурдан, найдвартай, халалт багатай, овор хэмжээ багатайгаар компьютерийг үйлдвэрлэх
болжээ. Харин програмчлал нь машины хэл болон Симболик хэл дээр бичигдэж байсан байна.

1965 оноос 1970 он хүртэл компьютерүүд жижиг хэсгүүд бүхий интетграл хэлхээнээс бүтэх болсон ба энд компьютерийн бүхий л хэсгүүд оролт, гаралт, хадгалах, боловсруулах хүчин чадал нэмэгдсэн бөгөөд оролт гаралтын төхөөрөмжүүд нь телефоны болон бусад төхөөрөмжүүдээр дамжуулан хоорондоо холбогдох болсон. Хадгалах боломж нь олон сая тэмдэгтүүд хадгалах боломжтой болсон, процессорын хурд нано секундээр хэмжигдах болсон, програмын хэд хэдэн инструкцуудын зэрэг гүйцэтгэх болсон гэх мэт боломжууд нэмэгдсэн. Энэ үед програмчид өндөр түвшиний хэлүүд дээр объект хандалтат програмчлал дээр ажиллах болжээ.


1970 оноос хойш гарсан томоохон дэвшил бол бие даасан хадгалах төхөөрөмж гаргасан явдал ба энэ нь цахиураар бүрхэгдсэн төхөөрөмж байв. Мөн лазер санах ойг НАСА-д бүтээсэн байна. Ингэснээр лазер санах ой нь 50 тэрбум гаруй тэмдэгтийг хадгалах болсон. Энэ үед Buroughs, IBM-ийхэн өөрсдийн 5000 болон 370 төрлийн комьпютерүүддээ виртуал хадгалах зарчмыг танилцуулжээ. Энэ үед CD, CDROM гарсан байна. Мөн 1000 хуудас бүхий текст багтаах боломжтой болсноор компьютерийн програм хангамжийг хөгжүүлэхэд томоохон хувь нэмэр болсон байна.

Харин өнөө үеийн компьютерүүд нь техникийн тал дээр улам бүр хэмжээ нь багасч, хүчин чадал нь өмнөх үетэй харьцуулахад асар хурдацтай өсч байгаа байгаа билээ. Java, Microsoft .NET гэх мэт програмчлах хүчирхэг технологууд гарсанаар програм хангамжийг хурдан шуурхай, хямд зардлаар бүтээх боломжтой болж байгаа билээ. Хурдацтай хөгжиж буй мэдээллийн технологийн салбарын мэргэжилтнүүд, энэ чиглэлээр суралцаж байгаа оюутнууд бидэнд шинээр гарч буй технологийг эзэмших хүсэл эрмэлзэлтэй, эзэмших чадвартай болж өөрсдийгөө төлөвшүүлэх шаардлага өндрөөр тавигдах болсон учир шилдэг мэргэжилтнүүд болох эсэх нь гагцхүү бидний сэтгэл, хичээл зүтгэлээс л хамаарах буй за.

2009/03/31

Quotes about Laziness

Залхуурал гэгч "эвгүй нөхөр"-ийн талаар суутнууд ийн өгүүлрүүн.

Ларошфуко:


Залхуурал гэдэг хүмүүс бидний хүсэл таашаалын дотроос хамгийн мунхаг нь юм.

Бидэнд учруулсан хор хохирол нь нүдэнд үзэгдэхгүй хэдий ч түүн шиг бэлэн дүрэлзэж байдаг, түүн шиг хөнөөлтэй хүслэн алга аа.

Залхуурлын амар тайван жаргалыг эдэлж байхдаа бид хамгийн хатуу төлөвлөсөн ажлаа ч мартаж орхидог.

Залхуу хойрго арчаагүй хүмүүс нь ямагт юунд ч хэрэггүй хүмүүс болдог.

Ухарч няцан бэрхшээлээс айж шантран бэлтгэл дасгалыг "Дараа, эвтэй үед" хийхээр хойшлуулж байдаг хүн хэзээ ч амжилт олохгүй.

...Амжилт олоход нь саад бологч нь залхуу байдал мөн.

...Хамгийн ноцтой хэцүү нь залхуу зан бөгөөд залхууг зөвхөн зоригийн хүч чармайлтаар л даван туулж болно.

...Зориг муутай хүмүүст энэ нь онцгой ашигтай боловч, харамсалтай нь тэд зоригийн хүч чадал гаргаж чаддаггүй гэдгийг хэлбэл зохино.

Залхуурал бол эцэстээ хүнийг өвчтэй, амьдрал дорой, хоцрогдмол, уй гунигтай болгож, гэмшил мухардалд оруулдаг.

Юу ч хийхгүй гэдэг чинь залхуугаас л болдог хэрэг.

Залхуурал гэж хэцүү өвчин бий. Энэ өвчин бол төрөлхийн зүйл биш, харин булингартай сэтгэл, хар амиа бодсон бэртэгчин үзэл юм.

...Юуны өмнө залхуурал гэдэг өвчнөөс салах хэрэгтэй.

Сэтгэлээр унах бол залхуугийн садан мөн.

Н. Г. Чернийшевчкий:

Хийх юмгүй гиюүрэн суух нь бидний амь наснаас унтах нойр, ужиг өвчин хоёроос илүү хороодог.

Бие хүний өөртөө итгэх чанар нь хангалттай, хүчтэй атал залхуу учир бэлтэл дасгал хойш татагдан, зайлшгүй хэрэгтцээтэй ажил хэргийн оронд хоосон ярьж, цагийг ямар ч үр дүнгүй өнгөрөөдөг байна явдал бас бий.

Залхуугийн гайгаар хүн өөртэйгээ ажиллах ажлаа эхлэх буюу үргэлжлүүлэхээ хойшлуулж, бас янз бүрийн шалтаг шалтгаанаар биеэ цааргалан, өөрөө өөрийгөө хуурч байдаг. Ийм тохиолдолд өөрийгөө албаддаг байх хэрэгтэй. Ингэж дасгалаа таслах явдал дахин давтагдвал өөрийгөө шийтгэж, дуртай болон эрхэмлэж явдаг юмаа хасаж, орхих хэрэгтэй. Өөрийгөө хүмүүжүүлэх ажилд том ахиц, мэдэгдэхүйц амжилт гарсан үед өөрийгөө ямар нэгэн зүйлээр урамшуулах хэрэгтэй.

Өөрийгөө хүмүүжүүлэх ажлыг үлэмж идэвхжүүлдэг, нэлээд үр нөлөөтэй хэрэгсэл бол хамт олон буюу хүндэтгэж явдаг ойр дотны хүнийхээ өмнө үүрэг авах явдал мөн.

2009/03/11

PHP

PHP бол динамик вэб хуудсыг бүтээхэд зориулагдсан вэб програмчлалын хэл юм. Энэ хэлийг 1995 онд Rasmus Lerdof бүтээсэн бөгөөд цаашдын хөгжүүлэлтийг The PHP Group хариуцан ажиллууцаж ажилладаг байна PHP хэл нь PHP license гэдэг нэрийн дор гардаг үнэгүй програм хангамж хэдий ч GNU General Public License (GPL) лицензтэй таардаггүй ба PHP-г хэрэглэхэд тодорхой хязгаарлалтууд байдаг.

PHP нь Script маягийн хэл ба ялангуяа HTML кодчилолд суурилж вэб хөгжүүлэлтэнд хэрэглэгддэг хэл юм. PHP-ийн ихэвчлэн нь вэб сервер дээр суурилагдан ажилладаг бөгөөд сервер дээр хөрвүүлэгдсэний дараа РНР кодоос HTML хуудас бүтээгдэн бидэнд харагддаг. РНР-ийн гайхамшигт чанар бол бүхий л вэб серверүүд ба бараг бүх л үйлдлий систем, платформ дээр ажилладаг. Дэлхий дээр РНР-г ашиглан хийгдсэн 20 сая вэб сайт, РНР-г дэмждэг нэг сая вэб сервер ажиллаж байна.

Түүх

PHP гэдэг нь Personal Home Page гэсэн үгийн товчлол бөгөөд анх 1994 онд Common Gateway Interface binaries бүтээхийн тулд С хэл дээр Rasmus Lerdorf бичсэнээр түүх нь эхэлдэг. Тэрээр анх Perl хэлний script-д багахан өөрчлөлт оруулан өөрийн Personal HomeРage бүтээсэн байна. Энэхүү багажыг анх нь түүний вэб хуудсанд хичнээн хүн зочилж байгааг тоолон мэдээлэх зорилгоор хэрэглэжээ. Тэрээр эдгээр бинар кодуудаа PHP/FI бүтээх Form Interpreter хэмээн нэрлэж, илүү олон боломжуудаар хангаж өгөх болсон ба Өгөгдлийн сантай харьцах, динамик вэбийг бүтээх боломжтой болсон байна. Ингээд 1995 оны 6 сарын 8-д Lerdorf РНР-ийн release хувилбарыг олон нийтэд дэлгэн тависанаар РНР-ийн хөгжил нь эрчээ авчээ. Энэ release хувилбар нь РНР 2 нэртэй байсан ба өнөөгий РНР-ийг үндсэн функцуудийг агуулж байжээ. Түүнд Perl-тэй адил төстэй хувьсагчууд, form handling ба HTML-тэй хамтран хэрэглэгдэх боломж байв. Бичиглэл(syntax) нь Perl-тэй талууд нэлээд байсан ч түүнийг бодвол хязгаарлагдмал, энгийн, илүү болхи байсан юм.

Израйлын Technion IIT компаний хөгжүүлэгчид болох Zeev Suraski, Andi Gutmars хоёр РНР-г сул талуудыг засаж янзлан 1997 онд РНР 3 -ийг гаргасан ба нэрээ өөрчлөн PHP: Hypertext Preprocessor болов. Хөгжүүлэлтийн баг нь албан ёсоор PHP/FI 2 -ийн бета туршилтын хувилбарыг 1997 оны 11 сарын 2-нд гаргажээ. Дараа нь РНР 3-ийн нийтийн тест эхэлсэн бөгөөд жинхэнэ хувилбар нь 1998 оны 6-р сард гарсан. Suraski, Gutman нар
РНР-ийн цөмийг шинээр бүтээн Zend Engine-ийг 1999 онд бүтээсэн бөгөөд Израйлын Ramat Gan хотод Zend Technologies-г байгуулсан ажээ.


2000 он 5-р сарын 22-нд РНР 4, Zend Engine 1.0 хамт гарсанаар РНР нэлээдгүй хүчирхэгжсэн ба 2004 оны 6 сарын 13-нд мөн РНР 5, Zend Engine 2 хамтдаа гарчээ. РНР 5 дээр Объект Хандалтат Програмчлалын Технологийг оруулсанаараа нэлээд онцлогтой болж чаджээ. Хамгийн сүүлчийн сайжруулалтыг РНР-ийн хуучин хувилбар болох РНР 4 дээрээ хийсэн бөгөөд 2008 онд РНР 4.4.9 хувилбарыг гаргасан юм. Үүнээс цааш РНР 4 дээр хамгаалалттай холбоотой сайжруулалт хийгдэхгүй гэнэ.

2008 онд гаргасан РНР 5 хувилбар нь зөвхөн хөгжүүлэгдэж байгаа гүйцэд биш тогтвортой хувилбар(Stable version) юм.

Мэдээллийн эх сурвалж: WikiPedia, the free encyclopedia

2009/02/19

Багцын хандалтат классууд

Java хэлийг судалж байгаа найзууддаа Объект Хандалтат аргачлалын онцлогоос тусгасан нэгэн жишээ source-ийг танилцуулъя. Хэдийгээр энэ хэдэн багцын хандалтат коднууд жижигхэн харагдаж байгаа хэдий ч Объект хандалтат технологид суралцахад үндсэн ойлголтыг өгөх болов уу хэмээн бодлоо.
package my.java;
import java.io.*;
public class AskName {
public void Ask() {
System.out.printf("Hello! ");
System.out.printf("What's your name?\n");
}
public String Answer() throws IOException {
InputStreamReader inStream = new
InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inStream);

String name = br.readLine();
return name;
}
}
Main класс-д AskName классын Ask() функцийг дуудахад Hello! What's your name? тэмдэгт мөрийг хэвлээд, Answer() функцээр гараас тэмдэгт мөрийг авч тэр утгыг буцаана.
package my.java;
public class HelloClass {
public String PrintHello(){
return "Hello! ";
}
}
HelloClass классын PrintHello() функц Hello тэмдэгт мөр утгыг буцаана.
package my.java;
import java.io.*;
public class Main{
public static void main(String[]args) throws IOException{
AskName hi = new AskName();
HelloClass he = new HelloClass();

hi.Ask();

System.out.println(he.PrintHello()+hi.Answer());
}
}
Дээрхи классууд my/java директорт хадгалагдахаа мартаж үл болно. Хэрвээ зөв ажиллуулбал дараах үр дүнг үзүүлнэ.

2009/02/08

Java хэлэнд гараас өгөгдөл унших

Java хэлний консол програмд гараас өгөгдөл оруулах хэд хэдэн арга байдаг. Гараас өгөгдөл авахад BufferedReader, InputStreamReader, System гэх мэт классуудыг ашигладаг.
import java.util.Scanner;
public class Stdin{
public static void main(String[]args){
String name;
Scanner in = new Scanner(System.in);
System.out.println("Sain uu! Tanii neriig hen gedeg ve?");
name = in.next();
System.out.println(name+"! "+"Ta heden nastai ve");
int age = in.nextInt();
System.out.println(name+"! Ta "+age+" nastai. :)");
}
}

import java.io.*;

public class Stdin2{
public static void main(String[] args){
try {
BufferedReader br = new BufferedReader(
new InputStreamReader( System.in ) );
System.out.println("a toog oruul!");
String a = br.readLine();
//Гараас өгөгдөл авах
System.out.println("b toog oruul!");
String b = br.readLine();
int s = Integer.parseInt(a)+Integer.parseInt(b);
//Гараас авсан өгөгдлөө Бүхэл тоонд хөрвүүлж байна.
System.out.println(a+" + "+b+" = "+s+"\nOK?");
}
catch(IOException e){
e.printStackTrace();
}
}
}

br объектыг үүсгэсний дараа түүний public String readLine( ) функцийг дуудвал тэр нь бидний бичсэн тэмдэгт мөрийг буцаана. Тиймээс тоон дээр үйлдэл хийх гэж байгаа учир тэмдэгт мөрөө бүхэл тоон төрөлд хөрвүүлж байна.

2009/02/01

Eclipse - тэй ажиллах

Java хэлийг анхлан суралцаж эхэлж байгаа найзууддаа зориулаад Java хэлний нэгэн хүчирхэг хэрэгсэл болох Eclipse дээр хэрхэн ажиллах талаар зөвлөгөө бэлтгэлээ. Юуны өмнө Eclipse, JDK, JRE - г суулгана. Тэдгээрийг суулгасан бол Eclipse програмыг агуулах хавтасанд байрлах eclipse.exe - г ажиллуулахад дараах байдалтай цонх гарч ирнэ. Workspace гэдэг нь бидний Eclipse дээр ажиллахдаа үүсгэсэн source, class, packege, source folder гэх мэт баримтуудыг агуулах хэсэг гэж ойлгож болно. Browse... товчийг дараад өөрийн хүссэн газраа Workspace-ээ үүсгээрэй.

Use this action as the default and do not ask again хэсгийг сонговол дараагийн удаа Workspace сонгохыг асуухгүй болно.


Төсөл үүсгэх

Eclpipse дээр програм бичихийн өмнө эхлээд Project буюу төсөл үүсгэх хэрэгтэй. File-New-Java Project гэсэн дараалаар ороход дараах жижиг цонх гарч ирнэ. Project name гэсэн бичих хэсэгт тухайн үүсгэх төслийн нэрийг бичиж оруулна. (Бидний тохиолдолд LearningJava01)

Contents хэсэгт байрлах сонголтуудын эхний хэсгийг сонговол таны Workspace-д төслийг эхлүүлэх бол хоёр дахь хэсгийг сонгоод Browse хийгээд өөрийн хүссэн газар төслөө эхлүүлж болно.

LearningJava01 төсөл үүссэн байна.

Класс үүсгэх
Өөрийн төслөө эхлүүлсэн бол програмаа бичиж эхэлцгээе. Програмаа бичиж эхлэхдээ өөрийн хүссэн Package дээр хулганы заагчийг аваачин баруун товчийг дарахад гарч ирэх сонголтуудаас New-Class cонголтыг хийхэд дараах жижиг цонх гарч ирэх ба Name хэсэгт классын нэрийг бичиж оруулна. Классын нэрэнд хоосон зай, зарим тэмдэгтүүдийг зөвшөөрдөггүй болохыг анхаараарай.









































Сонголтыг хийсний дараа HelloWorld.java файл үүссэнийг харж байна. Харин одоо HelloWorld.java дээрээ дараах програмыг бичиж ажиллуулцгаая.
public class HelloWorld {
public static void main(String[]args){
System.out.println("Hello World!");
}
}

Програмаа зөв бичсэн бол Ctrl+F11 товчнуудын хослолыг дарж хөрвүүлэх ба консол мөрөнд дараах үр дүнг харуулна.



Хэрэв бичиглэлийн ямар нэгэн алдаа гарсан бол тэр талаарх мэдээллийг мөн энэ цонхнод харуулна.

Package үүсгэж ашиглах


Package үүсгэхдээ үүсгэхийг хүссэн хавтас дээр хулганы заагчийг аваачин хулганы баруун товчийг New-Package сонголтыг хийж нэрийг өгнө.

Package дээрээ хулганы баруун товчийг дарж шинэ класс үүсгэе. Үүсгэсэн файлын бичлэгийн эхний мөр package Swing; байгааг анхаараарай. Бичлэг дэх Package-ийн нэр эх файлыг агуулах Package-ийн нэр яв цав тохирч байх ёстой. Харин одоо энэ файл дээрээ Swing ашигласан анхны програмаа бичицгээе. Swing гэдэг нь График байдалтай хэрэглэгчийн интерфэйс үүсгэдэг гол классуудын цуглуулга сан юм. Java SE платформ дээр ажилладаг. (Комьпютер дээр ажилладаг програм бүтээнэ гэсэн үг.)
package Swing;
import javax.swing.*;
public class HelloWorldSwing {
  public static void main( String[] args ) {
      JFrame frame = new JFrame( "Hello!" );
      JLabel label = new JLabel("Hello! Friends!", JLabel.CENTER );
      frame.getContentPane(  ).add( label );
      frame.setSize( 300, 200 );
      frame.setVisible( true );
  }
}
Энэ бичсэн кодоо ажиллуулахад дараах байдалтай прорам ажиллана.
Кодоо ажиллуулж чадсанд баяр хүргэе!

GOOD LUCK!

2009/01/30

Онч мэргэн үгс 2

Өдөр бүр ядаж нэг дуу сонсож, уран зураг үзэх юм уу мэргэн үг ганцыг ч болов уншиж байх хэрэгтэй.

М. Гёте

Онч үгсийг хэрэглэвэл үг цөөн, утга агуу болно.

Марк Твен

Бидний бодол санаа амьралыг хэрхэн төсөөлж байна, сайн, муу, баяр гутранги, ялан давамгайлсан эсвэл дуулгавартай юу гэдгээс л хамаардаг.

Марк Аврелий

Эрдэм чадлыг хичээн эс сурваас хэрэглэх цаг дор гэмшмүй
Эрүүл биеэ хичээн эс сувилбаас өвдсөн цаг дор гэмшмүй

В. Инжинаш

Хийж чаддаг зүйлээ байнга хийвэл хэзээ ч өсөхгүй. Харин хийж чаддаггүй зүйлсээ хийж байж та өснө.

Роналд Э. Осборн

Дундаж хүн цагийг хэрхэн өнгөрөөхөө л бодож явдаг бол авьяастай хүн түүнийг ашиглахыг чармайдаг.

Шопенхуар

Өрөвдөж байгаа нь биш тусалж байгаа нь л нөхөр

Томас Фюллер

Гай зовлон амсахгүй гэвэл ухаантныг түш,
Лай болдог хар санаатнаас хол яв.
Ухаантан мэргэд хор өгсөн ч хүртэж болгоо,
Угаас муу хүн эм өгсөн ч бүү хуурт.

Омар Хайяам

2009/01/18

Java хөгжүүлэгчид

Жава дээр програм хєгжvvлэхэд хэрэглэгддэг олон програмууд байдаг ба тэдгээрийн сайтын линкийг татаж авах линктэй нь тавилаа.

- NetBeans Татаж авах
- Borland JBuilder

- JCreator Татаж авах

- Oracle JDeveloper


Жава дээр бичихэд дээрхи програмуудын аль нэгнээс гадна JDK, JRE - суулгах хэрэгтэй.

JDK(Java Development Kit) буюу Жава хєгжvvлэх багаж нь Жава дээр програм бичихэд хэрэг болдог програм бєгєєд энэ нь source(Эх код)-ыг хөрвүүлэлт хийж Жава Прoграм(Class) болгодог багаж юм.


JRE(Java Runtime Environment) нь жава хэл дээр бичигдсэн програмуудыг ажиллуулах орчныг бүрдүүлдэг програм юм.

JRE Татаж авах

Миний хувьд бодлого бодох, GUI(Graphic User Interface)-ийг кодчилох гэх мэтэд би гэх мэт кодтой ажиллахад Eclipse тун дажгүй санагдсан. Консол нь Windows - ын орчинд ажилладаг гэх мэт.

2009/01/14

QuickSort

Бидний урьд өмнө хэрэглэж байсан бөмбөлөгөн эрэмбэлэлт, оруулалттай эрэмбэлэлт, сонголттой эрэмбэлэлтийн аргууд нь олон тооны элемэнтүүдийн эрэмбэлэх үед хугацаа нэлээд шаарддаг байсан. Харин эрэмбэлэлтийн маш үр өгөөжтэй нэгэн аргыг 1962 онд Ч. Хоар санал болгосон. Энэ аргыг QuickSort буюу хурдан эрэмбэлэлтийн арга хэмээн нэрлэдэг.

Энэ аргын гол санаа нь эхлээд анхны эрэмбэлэлт хийгдээгүй массив дотроос нэгэн Х элемэнтийг сонгон авч түүний зүүн талд түүнээс бага буюу тэнцүү элементүүд, баруун талд түүнээс олон элемэн байрлаж байхаар сэлгэн байрлуулна. Энэ алхмын дараа Х элемэнт нь өөрийн байраа олсон байх ба түүний 2 талд эрэмбэлэгдээгүй 2 хэсэг үүссэн байх бөгөөд энэ хоёр хэсэг дээрээ дахин түрүүчийн алхмыг хийх гэх мэтээр бүгд эрэмбэлэгдэх хүртэл үргэлжилнэ.

Харин одоо бүхэл тоон массивын элемэнтүүдийг эрэмбэлэх програмыг рекурс ашиглан бичье.

#include <stdio.h>
int a[100];
int qsort(int m,int l){
int i=m;
int j=l;
int x=a[(m+l)/2];
do
{
while(a[i]<x) i++;
while(a[j]>x) j--;
if(i<=j){
int w=a[i];
a[i]=a[j];
a[j]=w;
i++;
j--;
}
}
while(i<=j);
if (m<j) qsort(m,j);
if (i<l) qsort(i,l);

}
main(){
int n,e;
scanf("%d",&n);
for(e=0; e<n; e++)
scanf("%d",&a[e]);
qsort(0,n-1);
for(e=0; e<n; e++)
printf("%d ",a[e]);
return 0;
}

Харин QuickSort-ыг C/C++ хэлэнд бичиглэл маш багатайгаар алдаа бараг гаргахгүйгээр хэрэглэж боломж байдагийг та бүхэн мэдэх үү?
C/C++ хэлэнд stdlib.h толгой файлд qsort хэмээх функцийг цаанаас нь тодорхойлж өгсөн байдаг ба түүнийг хэрэглэхэд маш хялбар. Энэ функцыг ашиглан бүхэл тоон массивыг эрэмбэлэх жишээг доор үзүүллээ.

#include <stdio.h>
#include <stdlib.h>
int comp(const void*a,const void*b){
int *x=(int*)a;
int *y=(int*)b;
return *x-*y;
}
int main(){
int n;
int a[100];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),comp);
for(int i=0; i<n; i++)
printf("%d ",a[i]);
return 0;
}

2009/01/12

Java

Хэдэн сарын өмнө ComputerTimes сэтгүүл дээр гарсан Жавагийн талаар гарсан нийтлэлийг Объект Хандалтат Програмчлал хамтдаа үзэх гэж байгаа найзууддаа зориулаад энэ нийтлэлийн ач холбогдлыг бодон нийтэллээ.

Java бол Sun Microsystems корпорацийн бүтээсэн програмчлалын хэл бөгөөд хамгийн анх 1995 онд
түүнийг олон нийтэд танилцуулагджээ. Анх хийгдэхдээ Sun-ийн Java платформ дээр ажиллахаар байсан юм. Жава-г бүтээхдээ С ба С++ хэлийн онцлог, бичиглэлийг хүчтэй тусган авчээ. Гэхдээ хамгийн гол нь обьект хандалтат загвар дээр түлхүү анхаарсан ба доод түвшний програмчлалын боломжийг бага оруулсан байна.

Java прог
рам нь бит биш байт коднуудад хөрвүүлэгдэн ажилладаг бөгөөд энэхүү байт коднуудыг зөвхөн Java Virtual Machine (JVM) хэмээх систем ажиллуулдаг юм. Харин JVM нь платформ болгонд зориулагдан тусдаа хийгдсэн байдаг тул таны бичсэн програм, код аль ч үйлдлийн систем, платформ дээр ажиллах болж байгаа нь түүний хамгийн өвөрмөц онцлог юм.

1995 онд Sun нь Java-гийхаа гол хөрвүүлэгч, Virtual Machine, Class-ийн гол гол сангуудыг бүтээжээ. Харин одоо дэлхий дээр хамгийн их хүчээ авч байгаа систем болоод байгаа бөгөөд GNU (General Public License) гэсэн үнэгүй лицензтэй болсноор түүнийг хэн дуртай нь үнэгүй татан авч ашиглах боломжтой болжээ.

Түүх

Анх 1991 онд James Gosling гэгч нөхөр Жава хэлний үндэс суурийг тавьжээ. Тэрээг уг хэлийг өөрийн төсөлд ашиглахаар төлөвлөж байсан байна. Анх энэ хэлийг Oak (Царс) хэмээн нэрлэж байсан бөгөөд Царс маань урган том болсоор бусад хүмүүсийн анхаарлыг татаж эхэлсэн байна. Удалгүй нэрээ сольж, Green болсон ба удалгүй Жава хэмээх нэрээ олсон байна. Gosling нь анхнаасаа өнөөгийн жавагийн амжилт олж байгаа гол онцлогийг олж анхаарсан байна. Тэр нь өөрийн гэсэн Virtual Machine-тай C/C++ хэлтэй төсөөтэй програмчлалын хэл бүтээх байжээ.

Албан ёсоор Java 1.0 хэл нь 1995 онд бүтээгдсэн бий болсон бөгөөд хамгийн гайхамшигтай уриа болох Write Once, Run Anywhere (Нэг удаа бич, Хаа сайгүй ашигла) хэмээх уриаг гаргасан юм. Энэ нь жава кодыг аль ч платформ дээр ажиллуулах боломжийг олгох зохион байгуулалттай байлаа.

Жавагийн хамгаалалтын түвшинг хэрэглэгч хүн хүссэнээрээ өөрчлөх боломжтой ба зарим тохиолдолд сүлжээ болоод файл руу хандах эрхийг нь цаанаас нь хаачихсан нь хүмүүст ихээр таалагдсан юм. Ийм болохоор ихэнхи броузерууд Java Applet-г ажиллуулах боломжийг өөртөө нэмсэн байна. Яагаад гэвэл Java Applet нь хэрэглэгч хүнд ямар ч аюул учруулахгүй байсан байна. Өөрөөр хэлбэл програмист хүн Java Applet-ийг ашиглан хэрэглэгчдийн компьютерт халдах боломжийг тун сайн хаажээ.
Java - анхны зохиогчид "Green" багийхан
Ер нь бол Жава маш богино хугацаанд олон нийтийг олон нийтийг хамарч эхэлсэн ба түүний хамгийн гол уриа болох бүх платформ дээр ажиллах гэсэн нь хамгийн ихээр таалагдсан юм. Java-гийн гол хувилбар болох Java 2.0 гарснаас хойш түүний хүчин чадал, нэр хүнд огцом нэмэгджээ. Энэ үеэс тусгай платформуудад зориулагдсан хувилбарууд гарах болсон нь програм хөгжүүлэгчдэд бүр их эрх чөлөөг мэдрүүлсэн юм. Жишээлбэл J2EE хэмээх багц нь том корпораци, байгууллагын түвшинд програм бичих боломжийг олгож байсан бол J2ME нь жижиг электрон төхөөрөмжүүд, тэр дундаа гар утсанд зориулагдсан програм бичих, харин J2SE нь жирийн компьютер дээр ажиллах програм бичих зориулалттай байлаа. 2006 оны үеэс эхлэн Жава програмчлалын систем нь Java EE, Java ME, Java Se гэж 3 хуваагдах болсон юм.

1997 онд Sun Microsystems нь ISO/IEC, JTC1 гэх мэтийн стандартуудын болзлыг хангав. Сүүлд нь Ecma байгууллага нь Java-гийн стандартуудыг тогтоосон ба энэ бүхэн түүний хөгжилд ихээхэн хувь нэмэр оруулсан нь гарцаагүй. Энэ үед Sun корпораци нь Java-гийхаа бүхий л код, багаж хэрэгслүүдийг нийтэд үнэ төлбөргүйгээр дэлгэв. Энэ нь Microsoft-ыхны хувьд байж болшгүй үзэгдэл байсан бол Sun нь алс ирээдүйг олж харжээ. Гэхдээ Sun нь ашиг олж байсан бөгөөд жишээ нь Java Enterprise системдээ зориулсан тусгай лиценз бүхий бүтээгдэхүүнийг борлуулах замаар орлогоо бүрдүүлж байв.

2006 оны 11 сарын 13нд Sun нь Java-гийхаа ихэнх хэсгийг GNU лицензтэй болгож, хэн дуртай нь татаж авч ашиглах боломжтой болгов. Харин 2007 оны 5 сарын 8нд Java-гийн нууц байсан гол гол файлууд, цөм хэсгийг хийж дуусгасан ба тэдгээрийгээ нээлттэй эхтэй болгосон байна. Ингэснээр Жава нь даянд дэлхийн програм хөгжүүлэгчдийн өмч болсон байна.

Философи


Үндсэн зорилго

Java-г анх хийж эхлэхээс 5 үндсэн дүрмийг баримталж ирсэн байна. Үүнд:

1. Жава бол обьект хандалтад програмчлалын арга зүйтэй.
2. Жава бол ижил програмыг хэд хэдэн үйлдлийн систем дээр ажиллуулахыг зөвшөөрнө.
3. Жава бол компьютрийн сүлжээг дээд зэргээр ашиглахаас гадна бүхий л боломжуудыг хангаж өгнө.
4. Жава бол алс зайд байгаа кодыг нууцлал хамгаалалттайгаар ажиллуулах боломжтой байна.
5. Жава бол бусад объект хандатат програмчлалын хэлүүдийн бүхий л сайн талуудыг өөртөө агуулна.

Үйлдлийн системээс хамаарахгүй ажиллах нь

Зөвхөн энэ чанараас болж өдөр тутам олон зуун мянган програм хөгжүүлэгчид Жава руу урваж байгаа нь нэгэнтээ ил болжээ. Өөрөөр хэлбэл таны бичсэн програм бүхий л үйлдлийн систем, платформ, тоног төхөөрөмж дээр ажиллах боломжтой гэдэг бол үнэхээр гайхамшиг.

Жава дээр бичсэн код нь ихэнх Жаватай нийцтэй үйлдлийн систем, тоног төхөөрөмж дээр ажиллах боломжтой юм. Програмаа нэг удаа бичээд хөрвүүлээд л авсан бол түүнийгээ хаа сайгүй ажиллуул гэсэн үг шүү дээ.

Энэ хүү гайхамшигт боломжийг хэрхэн хангадаг вэ?

Java compiler буюу Жава хөрвүүлэгч нь Жава дээр бичигдсан кодыг бүтэн машины хэл болох битэд хөрвүүлдэггүй юм байна. Харин хагас боловсруулсан бүтээгдэхүүн гэдэг шиг хагас хөрвүүлж Java Bytecode гаргаж авдаг ажээ. Энэ кодыг зөвхөн Java Virtual Machine ажиллуулж дөнгөдөг юм. Тэгэхээр JVM нь ихээхэн чухал үүрэгтэй юм байна. JVM - ийг тухайн үйлдлийн системд зориулан тусгайлан бичсэн байдаг. Тэгэхээр энэхүү VM маань эцсийн бүтээгдэхүүн болох машин дээр ажиллах боломжтой бит кодыг үүсгэдэг байна. Бас VM нь тоног төхөөрөмжийн график хэсэг, санах ой, сүлжээ гэх мэт амин чухал зүйлсийг удирдана. Ихэнх тохиолдолд Java Bytecode нь саадгүй ажилладаг боловч зарим хэт онцгой машин дээр JIT хэмээх хөрвүүлэгч шаардлагатай болдог. Тэгэхээр таны бичсэн код тань JVM хэмээх системээр дамжиж байж хэрэгждэгийг ойлгож авсан байх. Тэгэхээр програмын ажиллагаа яалтчгүй удаан байхаас аргагүй болж байгаа юм. Яагаад гэвэл C/C++ дээр бичсэн код нь шууд машины бит кодонд хөрвүүлэгдсэн байдаг тул ажиллагааны хувьд маш хурдан байдаг бол Жавагийн эх код нь заавал ЖаваВиртуалМашинаар дамжина. Энэ үүднээс удаан ажилладаг гэсэн шүүмжлэлийг байнга сонсдог байсан бөгөөд энэ нь түүний гол сул тал байлаа. Гэхдээ сүүлийн үеийн JVM нь төрөл бүрийн технологи, аргуудыг хэрэглэснээр дутахгүй хурдан ажилладаг болоод байна. Гэхдээ орчин үеийн тоног төхөөрөмжүүд тооцоолох чадвар нэмэгдсэнээр энэхүү дутагдал онцын мэдэгдэхээ болиод байгаа юм.

Жишээ нь хурдыг нэмэгдүүлэх нэг арга бол Just-in-Time(JIT) буюу Яг цагт гэсэн хөрвүүлэлтийн арга юм. Энэ бол програм яг ажиллах үед нь ЖаваБайткодыг машины код руу хөрвүүлнэ гэсэн үг. Ингэснээр програм илүү хурдан ажиллах бололцоотой болдог. Гэвч энэ арга нь Overhead буюу хэт ачаалалд орох эрсдэлтэй. Иймээс сүүлийн үеийн VM-ууд динамик маягийн холимог аргыг хэрэглэдэг болоод байна. Энэхүү динамик арга нь програмын амин чухал хэсгүүдийг хэрхэн хөрвүүлэхээ сайтар тооцоолж чаддаг юм. Ингэснээр эцсийн дүндээ таны бичсэн код C/C++ дээр бичсэнээс дутахгүй хурдан ажиллаж чадах билээ.

Хурдыг нэмэгдүүлэх өөр нэг арга бол статик хөрвүүлэгч ашиглах явдал юм. Энэ хөрвүүлэгч нь шулуухан машины эх код руу хөрвүүлчихдэг. Өөрөөр хэлбэл Жавагийн сонгодог байткод үүсгэхгүй гэсэн үг юм. Ийм статик хөрвүүлэгчийн жишээ гэвэл GCJ юм. Гэвч ингэх юм бол өвөрмөц онцлог огтхон ч үр дүнгүй болчихож байгаа юм. Ийм арга хэрэглэх нь заавал Жава дээр бичих огтхон ч шаардлагагүй болж байгаа бөгөөд C/C++ дээр бичиж байгаагаас огтхон ч ялгаагүй болж байна.

Хөгжүүлэлт

SunMicroSystems нь JavaStandardEdition хэмээх платформын лицензийг албан ёсоор эзэмшдэг юм байна. Энэ платформ нь MicrosoftWindows, Linux, Solaris гэсэн үйлдлийн системүүд дээр ажиллана. Бусад платформуудад зориулсан Жавагийн орчныг бүрдүүлэгч системүүд бас бий.

Жава брэнд нь шулуун дардан замаар явсангүй. Мэдээж Microsoft-той зүйл бүрээр тэрсэлдэж байсан нь ойлгомжтой. Тухайлбал Java нь Microsoft-ийн үйлдлийн систем дээр ажилладаг болохын тулд ихээхэн саадыг давсан юм. Учир нь Microsoft нь Жава ажиллахад шаардлагатай RMI болон JNI интерфэйсүүдийг хаачихсан юм. Мэдээр Sun-ыхан шүүхэд зарга мэдүүлсэн бөгөөд 1997 онд 20 сая долларыг төлүүлж чаджээ. Гэсэн ч Windows нь анх ирэхдээ Жавагүй ирдгийг бид бүгд мэднэ. Бас сүүлийн үеийн InternerExplorer нь JavaApplet-ийг дэмждэггүй шүү дээ. Заавал 3дагч нэмэлт Plug-In суулгах шаардлагатай болдог. Гэхдээ та дуртай үедээ интернэтээс RunTime орчныг бий болгогч дэд системүүдийг татан авч болно.

Платформ хамаарахгүй ажилладаг чанар нь Enterprise маягийн томоохон програм хөгжүүлэгчдэд онцгой таалагдсан юм. Яагаад гэвэл ийм чиглэлийн лицензтэй програм хангамжууд асар өндөр үнэтэй байдаг шүү дээ. Түүнчлэн Enterprise чиглэлийн системүүд нь олон платформ болоод янз бүрийн орчинд ажиллах дэд системүүдээс бүрдэх шаардлагатай байдаг юм. Тэгвэл Жавад энэ бүхэн бүгд бий. Сервэр талдаа гэвэл Жишээ нь: servlet хэмээх вэб серверийг нэрлэж болох юм. Enterprise орчинд JavaBeans байж болно. Жава нь нээлттэй эхтэй болохоор дэлхийн шилдэг систем хөгжүүлэгчид өөр өөрсдийн тусгай системүүдийг бүтээж байгаа билээ. Хамгийн сүүлд GlassFish хэмээх төсөл нэн амжилттай хэрэгжиж байгаа бөгөөд энэ нь JavaEE орчинд үнэхээр тансаг зүйл хийж болохоор хэмжээнд ирээд байна.

Санах ойг автоматаар удирдах нь

Жавагийн үнэхээр өвөрмөц онцогийн нэг бол санах ойг автоматаар удирдах аргачлал юм. Энэ боломжийн хүчээр програмчин хүн гар аргаар санах ойг удирдах нүсэр ажлаас чөлөөлөгдөж байгаа билээ. Бусад хэлнүүд дээр объектийг үүсгэхийн тулд юуны өмнө хэрэгцээт санах ойг бий болгож авах, обьектоо хэрэглэж дууссаны дараа суллах гэх мэтийн ажиллагааг хийдэг шүү дээ. Хэрэв програмчин хүн объектоо суллаж, устгахаа мартсан бол санах ойн тэр хэсгийг ашигласан тэр чигээрээ үлдчихдэг. Програм гацах, алдаа гарах мэтэд санах ойг иймэрхүү байдлаар эзлээд үлдчих тохиолдол зөндөө гардаг. Бас санах ойг суллах гэж оролдох үедээ алдаа гаргах, дахин дахин оролдох гэх мэтэд гацаах ноцтой алдаанууд гарах нь түгээмэл байдаг.

Харийн Жава дээр бол үүнийг сайхан шийдэж өгчээ. Автомат хог цэвэрлэгч гэсэн систем байдаг бий. Програмчин хүн объект үүсгэлээ гэхэд түүнийг зааж байдаг ямар нэгэн хувьсагч, эзэмшигч заавал үүсдэг. Энэ нь уг объектыг удирдах, ашиглах үүрэгтэй. Тэгвэл объектыг устгалаа гэхэд зөвхөн энэ объектын заагч хувьсагчийг устгачихдаг. Энэ үед заагчгүй объект санах ойд үлдчихнэ гэсэн үг. Харин JavaGarbageCollection(Жавагийн хог цэвэрлэгч) нь иймэрхүү эзэнгүй санах объект санах ойд байгаа эсэхийг автоматаар шалгаж байдаг. Эзэнгүй объект тааралдвал. Түүнийг санах ойгоос бүрэг чөлөөлж бүрмөсөн устгана.

Syntax буюу бичиглэл

Java-гийн хувьд syntax нь бараг тэр чигээр C++ юм. C++ -ээс ялгаатай зүйл нь гэвэл тэрээр тэр чигтээ объект хандалтат тул энэ талд нэмэгдсэн ганц нэг зүйлс бий. Гэхдээ мэдээж C++ -тэй усны дусал шиг адилхан байна гэж юу байхав. Объект хандалтат тул бүх коднууд ямар нэгэн объектэд харьяалагдах бөгөөд бүгд class дотор бичигдэнэ. Зөвхөн бодит өгөгдлийн төрлүүд (тоон утгууд, boolean утга, тэмдэгт) л class дотор бичигдэхгүй байж болдог нь түүний ганц зөрчил юм.

Анхны програм "Hello World!"
public class Hello{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
Энэ жава програм нь ажиллахын тулд заавал Hello.java нэртэй файлд хадгалагдах ёстой. Яагаад гэвэл классын маань нэр Hello байна шүү дээ. Дараа нь энэхүү кодыг Bytecode буюу хагас машины хэлэн хөрвүүлэх болно. Бидэнд Java Compiler хэрэг болно. Хөрвүүлсний дараа Hello.class файл үүссэн байх ёстой.

Рекурсив Функц

Програмчлалах үед хэргэгчийн функц нь шууд болон шууд бус аргаар өөрөө өөрийгөө дуудах боломж байдаг ба үүнийг рекурс хэмээн нэрийддэг. Рекурсийг ямар нэг түвшин дэх үзэгдэл нь түүний өмнөх түвшиний үзэгдэлээр тодорхойлогдох үйл явц гэж тодорхойлж болох юм.

Рекурсыг ашигласанаар програмчлалын кодчилолыг бага хэмжээтэй болгох, мод, граф мэт шаталсан зохион байгуулалттай бүтцүүтэй ажиллах боломжийг бүрдүүлж өгдөг ба програмын бичих, ойлгоход тун хялбархан болгодог.

Рекурсийг ашигласан хамгийн энгийн жишээ болох өгөгдсөн тооны факториалыг олох програмын рекурс ашиглан бичье.

#include <stdio.h>
int fact(int a){
if(a==1) return 1;
return a*fact(a-1);
}
main(){
int n;
scanf("%d",&n);
printf("%d",fact(n));
return 0;
}

fact функцийн { } хаалтан дотор байгаа бичиглэлийн эхний мөрийг рекурс дуусах нөхцөл гэж нэрлэдэг. Харин 2-р мөрөнд а тоог а-1 тооны факториалаар үржүүлсэн утгыг буцааж байгаа ба энэ нь fact функц нь ажиллах явцдаа а-1ийн факторалын олох fact функцийн дахин дуудаж байгаа хэрэг. Рекурс функц өөрөө өөрийгөө дуудахдаа өмнөх утгаа компьютрийн стек санах ойд хадгалж байдаг. Харин төгсгөх нөхцөлд хүрмэгцээ өмнөх санах ойд хадгалсан утгуудаа дэс дараалан үржүүлж утгаа fact функцээр дамжуулан буцаана.

Харин одоо арай өөр рекурс шийдэлтэй програмыг бичиж үзье.
Өгсөн 10-тын тооллын системийн тоог хэрэглэгчээс авсан дурын k тооллын систем рүү (16-тын тооллын систем хүртэл. Хэрэв хүсвэл 16-таас илүү тоолын системд хөрвүүлэхээр бичиж болно.) хөрвүүлж хэвлэх програмыг доор сийрүүлэв.

#include <stdio.h>
long convert(long n,int k){
if(n){/*Энэ мөр нь рекурс функцийн төгсгөх
нөхцөл болж байна. n=0 болмогц convert
функц өөрөө өөрийгөө дуудахаа зогсооно.
n>0 үед л биелэнэ гэсэн үг */
convert(n/k,k);/*Энэ хэсэг функц өөрөө
өөрийгөө дуудаж байна.*/
switch(n%k){
case 0:printf("0"); break;
case 1:printf("1"); break;
case 2:printf("2"); break;
case 3:printf("3"); break;
case 4:printf("4"); break;
case 5:printf("5"); break;
case 6:printf("6"); break;
case 7:printf("7"); break;
case 8:printf("8"); break;
case 9:printf("9"); break;
case 10:printf("A"); break;
case 11:printf("B"); break;
case 12:printf("C"); break;
case 13:printf("D"); break;
case 14:printf("E"); break;
case 15:printf("F"); break;
}
}
}
int main(){
long n;
int k;
printf("N naturgal toog oruul\n");
scanf("%ld",&n);
printf("Huvirgah toollin systemiig oruul\n");
scanf("%d",&k);
convert(n,k);
return 0;
}

Функц маань төгсгөх нөхцөлд хүрмэгцээ санах ойд хадгалсан тэмдэгтүүдээ буцаан хэвлэж байгааг анзаарсан байх. Тоонуудыг тоолын системүүдэд шилжүүлэх талаар урьд өмнө нь бичиж байсан учраас энэ талаар дэлгэрэнгүй бичилгүй орхилоо. Хэрэв хүсвэл энд дарж үзэж болно.

Хэрэглэгчийн Функц

Бид С хэлийг ашиглан өмнө тулгарсан бодлогыг бодох бүртээ sqrt(x), strcmp(s1,s2), pow(x,y) гэх мэт функцуудтэй алхам тутамдаа тааралдаж,
ашиглаж ирсэн билээ. Харин хэрэглэгч өөрийн сонирхолд нийцүүлэн, олон давтагдах үйлдэлийг товчлох, бичлэгийг хэмнэх зорилгоор функц үүсгэн ашиглаж болдог. Ямар ч програмчлалын хэлэнд функц үүсгэн ашиглах ерөнхий зарчим нь адилхaн байдaг.

С хэлний функцын ерөнхий бичлэг нь:
<Буцаах утгын төрөл><Функцийн нэр>(<Төрөл><Зарлалт>)
<Хувьсагчдыг зарлах>
{
<Дотооод хувьсагчдыг зарлах>
<Командууд>
...
return (Буцаах утга);
}
Хэрвээ функц утга буцаах шаардлагүй бол түүний нэрийн өмнө void түлхүүр үгийг бичиж өгөх буюу ямар ч түлхүүр үг бичихгүй байж болно. (void гэсэн түлхүүр үгийг бичиж өгөөгүй үед return 0; гэсэн бичлэгийг ашигласан байдгийг анзаарсан байх.)
Функц руу утга дамждаг бол тухайн хувьсагчдыг функцийн нэрийн ард хаалтан дотор төрөлийн хамт бичнэ.
Хэрэв функц утга хүлээн авдаггүй бол хаалтан дотор юу ч бичихгүй.

Харин одоо функц ашиглан бодсон бодолтыг сонирхъё.
SPOJ-ын бодлогын архив
2222. Бутархай
Бодлогын дугаар: CSMS0010

Энгийн бутархайн хүртвэр нь хуваариасаа бага бол зөв бутархай гэнэ. Мөн өгөгдсөн бутархайгаас хүртвэр болон хуваариараа бага бөгөөд түүнтэй тэнцүү бутархай байхгүй бол анхны бутархайг үл хураагдах бутархай гэнэ. Хүртвэр болон хуваарийнх нь нийлбэр n-тэй тэнцүү байх хамгийн их утгатай зөв, үл хураагдах бутархайг ол.
Input

ганц n бүхэл тоо байна (3 <= n <= 1000)
Output

олдсон бутархайн хүртвэр болон хуваарийг гаргана
Example

Input:
10

Output:
3 7

Input:
23

Output:
11 12

Өгүүлбэрээс бутархайн хуваарь, хүртвэрийг нийлбэр нь n, тэдгээрийн ялгавар нь хамгийн бага, ХИЕХ нь 1-тэй тэнцүү байхаар авах нь тодорхой байна. Хүртвэрийг n/2-оос эхлэн нэг нэгээр бууруулж, хуваарийг нэг нэгээр нэмэгдүүлэх үйлдлийг ХИЕХ нь 1 болтол хийх шийдлийг сонгоё. Харин ХИЕХ=1 эсэхйиг шалгахдаа Евклидийг алгоритмийг ашиглан 2 тооны ХИЕХ-ыг олох функц үүсгэн ашиглая.

#include <stdio.h>
long int XIEX(long int a,long int b)
{
while(a!=0 && b!=0)
{
if(a>b) a%=b;
else b%=a;
}
if (a!=0 && b==0) return a;
if (b==0 && a!=0) return b;
}
void main()
{
long int n;
long int x,y;
scanf("%ld",&n);
for(x=n/2; x>0; x--)
{
y=n-x;
if(XIEX(x,y)==1)/**/
{
printf("%ld %ld\n",x,y);
break;
}
}
}