Monday, November 24, 2008

Итгэлийн хурд

Aрлын Наран улсаас бичиж сууна. Ирэх болгондоо заавал очдог газар маань Шинжуку дэх Кинокүния номын их дэлгүүр. Түгдрэлгүй уншихаар төвшинд япон хэл маань одоохондоо хүрээгүй тул англи ном хэрэгцээндээ тааруулаад авна. Энд мэргэжлийн чиглэлийн ном үнэ өндөр байхад, текстбүүк, пэпербэк ер нь хямд талдаа. Сар хагасын өмнө
  1. Design Patterns in Ruby
  2. Founders at Work
  3. The Speed of Trust
зэрэг номнууд авсны гурав дахийг нь өчигдөр уншиж дуусгалаа. Агуулга сайтай, сургамжтай, прагматик уг номыг Stephen M.R. Covey болон Rebecca R.Merill нар хамтран бичиж, 2006 онд олны хүртээл болгожээ. Тэмдэглэн авсан цөөн хэдэн өгүүлбэрүүд. . .

“Widespread distrust in a society . . . imposes a kind of tax on all forms of economic activity, a tax that high-trust societies do not have to pay.” – Francis Fukuyama
(Багцаалдан орчуулбал: “Өндөр-итгэлцэл бүхий нийгэмд төлөх шаардлагагүй таксыг итгэлцэл унасан газар эдийн засгийн бүхий л харилцаан дээрээ нэмж төлсөөр байдаг.” – Франсис Фукуяама)

“Үл итгэлцэл нь эдийн засгийн харилцаанд сөргөөр нөлөөлөөд зогсохгүй, хүн хоорондын харилцаа, хамтын ажиллагаа, шийдвэр, ер нь хүний амьдралын бүхий л орон зайд чөдөр тушаа болдог.“ – Стифэн М.Р. Кови

Британийн социологич Дэвид Хэлперний судалгаагаар нийт Америкчуудын 34% нь ямар нэгэн байдлаар бусдад тээнэгэлзэлгүй итгэж чадах бол энэ тоо латин америкт 23%, африкт 18%, түүнчлэн 4 үеийн өмнө энэ үзүүлэлт Их Британид 60% байснаа өдгөө 29% хүртлээ буурсан үзүүлэлттэй гарчээ. Сайн мэдээ нь Скандинавын орнуудад(Дани, Швед, Норвеги, Голланд) хамгийн өндөр буюу 68%-тай байгаа бол Мексик 1983 оны байдлаархи 19%-иас өдгөө 31%-д хүрсэн нь нийгмийн итгэлцүүрийг өсгөж болдгийг харуулж байна.
(Монгол минь хэдэн хувьтай бол? Өгсөж явна уу, уруудаж явна уу? Хүн бүрийн оролцоо юу байх вэ?)

Хурд болон өртөг нь итгэлцэл ямар байхаас шууд хамаараалтай хоёр хэмжигдхүүн. Итгэлцэл бага газарт хурд удаан, өртөг өндөр байдаг.

↓ Итгэлцэл = ↓ Хурд ↑ Өртөг

Харин итгэлцэл өндөр газарт хурд нэмэгдэн, өртөг буурдаг.

↑ Итгэлцэл = ↑ Хурд ↓ Өртөг

9/11-ний террорист халдлагын дараагаар америкийн агаарын тээврээр аялагчдын аюулгүй байдалдаа итгэх итгэл үлэмж хувиар уналаа. Онгоцонд алан хядлага үйлдэх заналхийлэл оршсоор байтал аюулгүйн баталгаа гаргах хяналтын систем зохих ёстой хэмжээнд хүчтэй байж, таслан зогсоож чадаагүйг тэр үед хүн бүр анзаарсан байх. 9/11-ээс өмнө онгоц хөөрөхөөс хагас цагийн өмнө ирээд, шалгалтаар төвөггүй түргэн нэвтэрдэг байтал уг хар өдрөөс хойш хяналтын түмэн процедур нэмэгдсэний дүнд нисэх нь үндсэндээ удаан, өндөр зардалтай тээвэр болон хувирлаа. Орон нутгийн нислэгийн хувьд онгоц хөөрөхөөс цаг хагасын өмнө, олон улсын нислэгийн хувьд 3 цагийн өмнө очиж байж онгоцонд суух жишээтэй . Нислэгийн билет бүрт аюулгүйн такс шингээстэй(нэмэгдэлтэй) боллоо. Хэдийгээр эдгээр хяналтын процедурууд маш чухал гэдгийг яриангүй хүлээн зөвшөөрч байгаа ч, өмнө ярьсан зүйлс: “Итгэлцэл унасан газар хурд багасч, өртөг өсдөг.” нь эндээс ил харагдаж байна.
(Хүн бүр, пүүс компани бүр хэрэглэсэн цахилгаанаа ном ёсоор нь төлдөг бол, хулгайн цахилгааны өртгийг төлдөг хэдэд нь хавтгайлан нялзаах шаардлага гарахгүйсэн, тэхээр 1кв цахилгааны үнэ хэд болж хямдрах бол? Хүн бүр хэрүүл уруулгүй билетээ аваад автобусаар зорчдог байсан бол, заавал кондуктор хүн ажиллах хэрэгтэй юу? Хэрвээ тийм бол тээврийн өртөг хэдүй хэмжээнд буух бол? Эд материалын болон итгэл найдварын хулгай дээрэм манай улсад ямар хэмжээний өртөг дагуулж байна вэ?)

- - - - - - - - -
Итгэлцэл нь ихэнхи хүний хувьд үл үзэгдэх хэмжигдхүүн. Бидний амьдрал, ажил үйлс, хамт олон, итгэл үнэмшилд хэрхэн нөлөөлдгийг тэр болгон анзаардаггүй. Уламжлалт бизнесийн томъёонд стратеги үржих нь гүйцэтгэл тэнцүү үр дүн:
S x E = R
(Strategy times Execution equals Results)
Үнэндээ энэ томъёонд үл харагдах хэмжигдхүүн-Итгэлцэл бүрэлдүүн болон орох ажээ. Энэ нь бага тохиолд такс болох тул үр дүн багасна, өндөр тохиолд үржвэр болох тул бодит үр дүн дээшлэнэ.
(S x E)T = R
([Strategy times Execution] multiplied by Trust equals Results)
Энгийн математик гаргалгаа:
(Хэдийгээр цээжээрээ сөрж, зам гарган хошуучлах нь асар их дарамттай ч, хүн шиг хүмүүс эрх мэдлийг зөв зүйтэй жолоодвол ард бид хэрхэн дэмжиж, уухай түрэн хүч нэмэх байсан бол? Үржвэр хэдэн хувьтай байх бол? Ммм..... маш буруу хандлага байна уу, хүрсний хойно дэмжинэ гэдэг?)

Without trust, there is no open society, because there are not enough police to patrol every opening in an open society. Without trust, there can also be no flat world, because it is trust that allows us to take down walls, remove barriers, and eliminate friction at borders. Trust is essential for a flat world. . . .
Thomas Friedman, Columnist, New York Times

(Маш сонирхолтой ном тул та бүхний таалалд лавтайяа нийцнэ гэж найдаж байна. Хэлсэн хийсэндээ эзэн нь болж явах ямар чухал үр дүн дагуулдгийг энэ номноос ойлгосон. Ингээд жижигхэн тэмдэглэлээ уг номын нэгэн ишлэлээр төгсгөе. Дараа боломж гарвал Фрэнсис Фукуяамагийн Trust - The Social Virtues and the Creation of Prosperity номыг уншиж, тэмдэглэл хөтлөнө өө, танд баярлалаа.)

<====
A great example of congruence is Mahatma Gandhi. At one point in his life, he was invited to speak before the House of Commons in England. Using, no notes, he spoke for two hours and brought an essentially hostile audience to a rousing standing ovation. Following his speech, some reporters approached his secretary, Mahadev Desai, incredulous that Gandhi could memorize his audience for such a long time with no notes, Desai responded:

“What Gandhi thinks, what he feels, what he says, and what he does are all the same. He does not need notes. . . . You and I, we think one thing, feel another, say third, and do a fourth, so we need notes and file to keep track.”

Gandhi was not only congruent within himself, he was also congruent with the principles he stood for. Not only did he have roots, he had a taproot that plunged deep into the reservoir of timeless principles that govern in life.
====>

Tuesday, May 27, 2008

Сорилын талаархи бага сага тэмдэглэл...

Нэлээд дээхнэ сорилын талаар цөөн хэдэн ном уншиж байлаа, тэмдэглэн авсан зүйлсээс заримыг нь энд оруулав. Гоби, Очко нарын гигантууд энэ сэдвээр маш сайн нийтлэл бичиж байсныг уг постын төгсгөлд холбож өглөө.

Психилоги
Бид сорилын талаар ямар ойлголттой явдаг вэ? Ер нь хэрэгтэй юм уу? Програм хангамжийн сорил гэж ер нь юу юм бэ? Таны бодлоор доорхиос аль нь вэ?
  • Програмд ямар нэг алдаа байхгүйг харуулах ажиллагаа.
  • Сорилын зорилго нь програм хийх ёстой үйлдлээ хийж байгааг батлах явдал.
  • Тайвшрал, сэтгэл амарлихуйг тогтооход чиглэсэн үйл ажиллагаа.
Эсхүл гурвуулаа л зөв зүйтэй юу? Магадгүй тийм байх.

Харин J.Myer "The Art of Software Testing" номондоо "Сорих гэдэг нь аливаа алдаа сэвийг илрүүлэн гаргах, чанарыг тодорхойлох зорилгоор уг програмыг ажиллуулах үйлдэл юм." хэмээн бичжээ. Нөхөр энэ хандлагыг ихэд онцолсон байх бөгөөд ингэхээс ч аргагүй шиг байна. Учир нь хүний үйлдэл, түүний хүсэл зорилготой шууд холбоотой байх тул хэрэв хөгжүүлэгч програмын алдаагүйг батлах гэж байгаа бол аль болох л нормаль кэйсүүдийг сонгон авч сорилдоо ашиглах байх. Гэтэл мөрдөх ёстой хандлага нь үнэн хэрэгтээ эсрэг чигт байх аж...
- - - - - -
Сорилоор алдаа илрээгүй тохиолдолд бид "Сорил амжилттай боллоо!" хэмээн бахаддаг, харин олон илэрхэд"Амжилтгүй боллоо" гэж чимээгүйхэн шивнэдэг. Хандлагын зөрүү бас л гарч байна. Сорилоор алдааг илрүүлэхийг зорьдог тул, эхний тохиолдолд "Сорил амжилтгүй(эсхүл сэжигтэй)", удаахьд нь "Сорил амжилттай боллоо!" гэж үзэх хэрэгтэй юм байна.

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

Эх сурвалж: Ron Patton - Software Testing, 2005 Sams Publishing

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

Сорилд баримтлах 11 мөрдлөгөө
J.Myer-ийн анхлан гаргасан(1979 он) мөрдлөгөө одоо ч хэрэглэгдсээр. Зарим нь ойлгомжтой л байх, зарим нь ч сонин л юм:

Cорилд баримтлах 11 мөрдлөгөө
  1. Сорил гэдэг нь тодорхой нөхцлүүдийг ашиглан тухайн програмын бүрэлдэхүүний алдаа сэвийг илрүүлэн гаргах, чанарыг тодорхойлох зорилт бүхий процесс юм.

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

  3. Соригч нь сорилын үр дүнг сайтар нягталж, баталгаажуулах хэрэгтэй.

  4. Сорилын нөхцөлд хүлээгдсэн үр дүн буюу гаралт нь заавал тусгагдсан байх ёстой.

  5. Сорилын нөхцөлд зөвшөөрөх болон үл зөвшөөрөх оролтын өгөгдөл, түүний хүрээг тодорхойлсон байх хэрэгтэй.

  6. Байх магадлалтай алдааны тоо нь одоогоор илрээд байгаа алдааны тоотой шууд пропорциональ хамааралтай байдаг.

  7. Хөгжүүлэлтийн багаас өөр баг сорилыг гүйцэтгэвэл зохимжтой.

  8. Сорил нь давтагдах, дахин хэрэглэгдэх боломжтой байх ёстой.

  9. Сорил нь төлөвлөгдсөн байх хэрэгтэй.

  10. Сорилын үйл ажиллагаа нь төслийн хөтөлбөрт тусгагдсан байх ёстой.

  11. Сорил нь мэдлэг, сэтгэлгээ шаардах нарийн ухаан.

6-р мөрдлөгөө нь их сонирхолтой. Ухаан нь, эхний сорилоор А модулиас 20, Б модулиас 3 алдаа илрүүлжээ гэж саная. Алдааг засаад дахиад сориход аанай л А модулийн алдааны тоо жин дарах магадлал өндөр аж. Зургаар дүрсэлбэл:


Эх сурвалж: Glenford J. Myers - The Art of Software Testing, John Wiley & Sons, Inc.

Сорилын болцын загвар
TMM буюу Сорилын болцын загвар(Testing maturity model) нь өндөр чанартай бүтээгдэхүүнийг тогтоогдсон төсөв зардлаар, товлосон хугацаанд чадварлаг соригчдын бүрэлдэхүүнээр, оновчтой төлөвлөгөөний дагуу сорих зорилго бүхий фрэймворк юм. TMM нь CMM буюу Capability Maturity Model-д тулгуурлан боловсруулагдсан ба эдгээр моделиуд нь хэдүйн дэлхийн даяар нэвтэрч, өдгөө олон пүүс компаниуд даган мөрдөж байна. TMM нь CMM-ийн адилаар таван шаттай:

Эх сурвалж: Ilene Burnstein - Practical Software Testing, Springer

Төвшин 1 – Эхлэл
Програм хангамжийн тодорхойлолтын ямар нэгэн бичиг баримт байхгүй. Сорилын үйл ажиллагаа нь зүгшрүүлэлтээс(debugging) ялгагдах зүйлгүй бөгөөд, програмыг зөв ажиллаж байгааг батлахын тулд хийгддэг. Програмын рилийз нь ямар нэгэн чанарын баталгааг хангаж чаддаггүй. Нөөц, багаж хэрэгсэл, мэргэшсэн боловсон хүчний дутагдалтай. Ийм компани нь CMM-ийн 1-р төвшинд хамаарна.

Төвшин 2 – Фаз тодорхойлолт
Сорил нь зүгшрүүлэлтээс тусгаарлагдах боловч, кодчилолын дараа хэрэгжих процесс байдлаар тодорхойлогдоно. Кодоос шууд хамааралтай учир зөвхөн дууссаны дараа нь гүйцэтгэгддэг. Сорил хийх зорилго нь бүтээгдэхүүн нь тодорхойлолтын бичиг баримттай тулж байгааг батлах явдал. Хар болон шилэн хайрцаг гэх мэт сорилын үндсэн хэлбэрүүд хэрэгжинэ. Сорилын шатууд нь нэгжийн, нэгдсэн, систем, суурилуулалт зэргээр хуваагдана. Сорил нь хөгжүүлэлтийн хожуу шатанд төлөвлөгддөг учир чанар тойрсон асуудал их гардаг. Шүүмж, болон хэлэлцүүлэг хийгддэггүй. Гараар ажиллуулах, турших нь сорилын үндсэн хэлбэр болно.

Төвшин 3 – Нэгдэл(Integration)
Сорилыг кодчилолын дараа бус шаардлага-тодорхойлолтын фазаас эхлэн төлөвлөнө. Бүтээгдэхүүний шаардлагад үндэслэн сорилын зорилтууд тодорхойлогдоно. Сорилын багийг томилохын зэрэгцээ, сорил нь хөгжүүлэлтийн процессын нэгэн чухал хэсэг байдлаар хүлээн зөвшөөрөгдөнө. Сорил нь төлөвлөсөн хугацаа, төсвийн дагуу хэрэгжиж буй эсэх нь байгууллагын хэмжээнд харагдах боломжтой байдаг. Сорилын ерөнхий багаж хэрэгслүүд ашиглагдана. Шүүмж хэлэлцүүлгүүд явагдах боловч, энэ нь албан ёсны процесс болтлоо тодорхойлогдон мөрдөгддөггүй.

Төвшин 4 – Удирдлага болон Хэмжилт
Сорил нь хэмжигдэх боломжтой процесс болно. Хөгжүүлэлтийн бүх шатанд шүүмж хэлэлцүүлгүүд сорилын нэг хэлбэр байдлаар тусгагдан хэрэгжинэ. Програм нь найдвартай байдал, хэрэглэгдэх чадамж, өөрчлөгдөх боломж зэргээр төрөл бүрийн чанарын үзүүлэлтээр соригдоно. Бүх төслийн хэмжээнд сорилын нөхцлүүдийг дахин ашиглах, давтах зорилгоор тусгай санд хадгална.


Төвшин 5 – Хөгжил/Алдаанаас сэргийлэх/Чанарын удирдлага
Сорилын процесс нь нэгэнт удирдагдах, хянагдах, хэмжигдэх боломжтой болсон байна. Сорилын болцын өөрчлөлт, хөгжил дэвшил тасралтгүй явагдана. Алдаанаас сэргийлэх, чанарыг удирдах процесс нэгэнт биеллээ олсон байна. Автоматаар сорилыг гүйцэтгэх, давтах боломжтой. Мөн сорилын нөхцлийг зохиох, өөрчлөх, алдааны мэдээлэл цуглуулах зэрэг ажлуудыг багажийн тусламжтайгаар хялбархан хийж гүйцэтгэнэ. Сорилын хэмжилт болон чанартай холбоотой мэдээллийг мөн автоматаар гарган авах боломжтой.

Нэмэлт:
Сорилын талаархи нэн сонирхолтой нийтлэлүүд:

Sunday, April 20, 2008

The Joel Test

Компанийн болц, царааг хэмжих CMMI нэртэй модель байдаг. Нийт таван төвшинтэй ба эдгээр бүрт хатуу заасан босго, хэмжигдхүүнтэй. Судлая гэвэл нь нуршуу ном нэлээд хэдийг унших хэрэгтэй болно, үүний оронд J.Spolsky-ийн "The Joel Test"-ийг сонирхвол нь, ямарав? Орчуулан хүргэхийг зорьлоо ;)

SEMA гэж сонсож байсан уу? Софтвэрийн багийг хэр сайн бэ гэдгийг хэмжих нэг төрлийн систем юм л да. Жаахан азна анд минь, юу юугүй гүүглэдэж, үүний талаар судлах гээд хэрэггүй. Учир нь SEMA-г ойлгоход лавтай 6 жил зарцуулна. Үүний оронд миний зохиосон гайгүй далий тестийг сонирхвол... Гурван минут л хангалттай.

The Joel Test
  1. Та соорс контроль ашигладаг уу?
  2. Нэг алхмаар та бийлд хийж чаддаг уу?
  3. Танайх өдөр бүр бийлд хийдэг үү?
  4. Танайх алдаа бүртгэлийн баазтай юу?
  5. Алдаагаа засаж байж шинээр код бичдэг эсэх?
  6. Төслийн төлөвлөлт(schedule) тань яв тав шинэчилэгдэж байдаг уу?
  7. Танд спек байна уу?
  8. Програмчид тань нам чимээгүй орчинд ажилладаг уу?
  9. Боломжит бүх багаж хэрэгслийг та ер нь ашигладаг уу?
  10. Танайд тестерүүд бий юу?
  11. Ажил горилогчоор код бичүүлж шалгалт авдаг эсэх?
  12. Програмын ашигт үйлийн тест хийдэг үү?


Энэ сорилд тийм/үгүй гэсэн хариулт л хангалттай, дажгүй байгааз? Өдөрт хичнээн мөр код бичигдэв, нэг фаазад хэдэн алдаа бүртгэгдэв энэ тэр бузгай том тооцоо огтоос хэрэггүй. Ердөө л "Тийм" бүрт 1 оноо өг, тэгээд л гүйцээ.

12 оноо авсан бол төгс, 11 бол боломжийн, харин доошоогоо гэцүү. Үнэндээ, ихэнхи компаниуд 2, 3-ын төвшинд л туудаг, тиймдээ ч асуудал ихтэй байхад Microsoft мэт нь үргэлж 12-той намбалзаж байх жишээтэй.

Мэдээжээр, дээрх шалгуураар амжилт/уналтыг яв цав тодорхойлно гэж байхгүй. Хэрэв танд сайн баг байлаа гээд, хэнд ч хэрэггүй програм бичиж байгаа бол, гарсан бүтээлийг тань хэрэглэгчид худалдаж авах нь юу л бол. Нөгөөтэйгүүр эдгээрээс нэгийг ч хэрэгжүүлдэггүй боловч захын бачканууд дэлхийг донсолгосон мундаг програм бичээд тавьчихыг үгүй гэх газаргүй. Ер нь энэ бүхний голч, эдгээр 12 шалгуурыг зөв зохистой ашиглавал, танайх санасандаа сарвайдаг, сарвайснаа авдаг мундаг баг болно.


Орчуулга хийгдэж байна....
Үргэлжлүүлэн орчуулахгүй ч байж магад. Хүргэх хамгийн гол санаа дээрх саарал цонхонд байна л да, уул нь. Энэ тест бүхлээрээ J.Spolsky-ийн "Smart and Gets Things Done" нэртэй номонд бий. Ном нь сонирхолтой, мундаг егөөтэй.

Tuesday, April 15, 2008

Rails-ийг Oracle-тай холбох нь

Нэлээдгүй өндөр ачаалалд, яг таг ажиллах ёстой веб програм хийх хэрэгцээ гарсан тул богино хугацаанд, чанартайхан бүтээл гаргаж болохоор хөгжүүлэлтийн хөрс сонгох хэрэгтэй боллоо. RoR-ийн талаар өмнө сонирхож, номны ганц хоёр хуудас эргүүлснээс бус амьдралд хэрэглэгдсэн бодьтой зүйл хийж байсангүй. Ямартай ч мундаг динамик боломжтой Ruby хэлээр, convention over configuration паттерныг барьж хийсэн, сүүлийн үед хүчээ авч яваа хөгжүүлэлтийн суурь юмаа гэдгийг гадарлаж байгаам.

Үүссэн Rails програмыг Oracle баазтай холбох гээд хагас өдөр зарцуулчихсан тул эндээс мэдсэн зүйлээ хэрэгтэй хүнд нь хөтөч болгон бичиж үлдээх нь зүйтэй гэж үзлээ. Таныг аль хэдүйн баазаа тохируулж, rails програмынхаа скелетоныг үүсгэсэн гэж бодож байна. Бидний тохиолдолд баазыг өөр машинд суулгасан. Алдарт scott/tiger-ийн баазыг жишээгээр авлаа.

Шаардлагатай багцууд:
  1. ruby-oci8, Oracle баазтай холбогдох ruby интерфэйс
  2. activerecord-oracle-adapter
  3. Oracle instant client
Багцуудыг суулгах нь:
  1. ruby-oci8
    Виндовз хэрэглэгчид ruby-oci8-1.0.0-mswin32.rb файлыг татаж аваарай. Доорхи байдлаар хялбархан сууж байна:

    C:\>ruby ruby-oci8-1.0.0-mswin32.rb
    Copy OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8
    Copy oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8
    Copy oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt
    OK?
    Enter Yes/No: yes
    Copying OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8 ... done
    Copying oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8 ... done
    Copying oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt ... done
    OK
    C:\>

  2. activerecord-oracle-adapter
    Oracle адаптерийг gem ашиглан суулгах нь хялбар аж:

    C:\>gem install activerecord-oracle-adapter --source http://gems.rubyonrails.org
    Bulk updating Gem source index for: http://gems.rubyonrails.org/
    Bulk updating Gem source index for: http://gems.rubyonrails.org/
    Successfully installed activerecord-oracle-adapter-1.0.0.9216
    1 gem installed
    C:\>

  3. Oracle instant client
    Татсан програмаа хаа нэг эвтэйхэн газар задлаж орхи. Эндээс oci.dll, oraociei11.dll файлуудыг хайж олоод Windows\System хавтаст хуулна. Хамаг цагаа үүнийг мэдээгүйгээс барсан байгаам. За тэр болоод өнгөрч, одоо Ruby интерфэйс бэлэн болсон байх учиртай, шалгаж үзье:

    C:\>ruby -r oci8 -e "OCI8.new('scott', 'tiger','//<db-host-address>:1521/<sid>').exec('select * from emp') do |r| puts r.join(','); end"

    7369,SMITH,CLERK,7902,1980/12/17 00:00:00,800.0,,20
    7499,ALLEN,SALESMAN,7698,1981/02/20 00:00:00,1600.0,300.0,30
    7521,WARD,SALESMAN,7698,1981/02/22 00:00:00,1250.0,500.0,30
    7566,JONES,MANAGER,7839,1981/04/02 00:00:00,2975.0,,20
    7654,MARTIN,SALESMAN,7698,1981/09/28 00:00:00,1250.0,1400.0,30
    C:\>
    Yes!!!, хэвийн ажиллаж байна.


database.yml
Oracleтай холбогдох интерфэйсүүд бэлэн болсон тул, одоо веб програмынхаа баазын тохиргоог хийе. Дараахи байдлаар хийхэд хангалттай:
config/database.yml
# Oracleтай холбох нь.
development:
    adapter: oracle
    database: <db-host-address>/<sid>
    username: scott
    password: tiger

Одоо веб програмаа эхлүүлээд, браузерт нээвэл дараахи мэдээлэл гарч байх учиртай:


Бүх зүйл хэвийн, иймд emp нэртэй баазын модель үүсгэе:
ruby script\generate model emp
Rails баазад маань emps нэртэй хүснэгт байгаа гэж автоматаар ойлгоно. Гэтэл scott-ийн баазад emp нэртэй л хүснэгт байгаа шүү дэ? emp моделийг emps бус emp хүснэгттэй яаж уях вэ? Дараахи байдлаар хүснэгийн нэрийг дахин тодорхойлж болно:
app/model/emp.rb
class Emp < ActiveRecord::Base
    set_table_name "scott.emp"
end

Үүний дараагаар index хуудас(action) үзүүлэх scott нэртэй контроллёр үүсгэе:
ruby script\generate controller scott index

index хуудсанд emp хүснэгтийн мэдээллийг харуулъя. Ингэхийн тулд scott_controller-ийг дараахи байдлаар бичээд үз:
app/controllers/scott_controller.rb
class ScottController < ApplicationController
    def index
        @emps = Emp.find(:all)
    end
end

Одоо presentation layer буюу татсан мэдээллээ дэлгэцэнд байршуулах index файлыг боловсруулъя:
app/views/scott/index.rhtml
<h3>Ажилчид</h3>
<table border="1">
  <tr>
    <%names = Array.new;
      Emp.column_names.each{ |name| names << name;
    %>
      <%="<th>#{name}</th>"%>
    <%}%>
  </tr>
  <%for emp in @emps%>
  <tr>
    <%for name in names%>
      <td><%=eval("emp.#{name}")%> </td>
    <%end%>
  </tr>
  <%end%>
</table>

Одоо хийсэн ажлаа шалгая. Броузерт: http://127.0.0.1:3000/scott гэж бичээд үзнэ үү. Доорхитой ижил үр дүн гарч байна уу?

За ингээд бид зорьсондоо хүрлээ. Доорхи линкүүд танд хэрэг болж юу магад вэ, гүйлгээд харна биз:

Нэмэлт:
config/environment.rb файлд
ENV['NLS_LANG']='american_america.AL32UTF8'
мөрийг нэмж өгөөрэй. Одоо Oracle-аас монгол(UTF-8) текстүүд асуудалгүй татагдах болно.