Saturday, November 07, 2009

Энгийн гэдэг Төвөгтэй

Тийм ээ, Энгийн гэдэг төвөгтэй. Энэ нийтлэлийг уншаад эргэцүүлж байсан юм санаанд орлоо. Апликэшн програмыг бас бодлогыг ч гэсэн аль болох энгийнээр шийдвэл тэр нь эргээд уран гоёмсог, найдвартай, хурдан зэрэг олон сайн талуудыг бий болгодог билээ. Гэтэл яагаад энгийн програмаас ярвигтай програм нь их бичигдээд байна вэ? Хүмүүс яагаад ярвигтай програм бичихдээ амархан, энгийн бөгөөд оновчтойг хийхдээ хойрго байдаг юм бол? Тэгвэл "Хоёр програмчны тухай сургаальт үлгэрийг" уншаад үзээрэй. Энгийн бөгөөд оновчтой шийдлийг олж гаргах процесс нь өөрөө ярвигтай юм. Маш энгийн, ойлгоход хялбар, хэрэглэхэд амархан програм байлаа гэхэд, тэр програмыг хийхэд бас энгийн хялбар байсан гэж ойлгож болохгүй шүү.

Friday, November 06, 2009

Заан - Бич, Цээжил, Дага, Хамтар

Мартана гэдэг маниас урьдын юм гэдэг. Нас ахихаар(нээх хөгшин) улам л мартамхай болоод хэл сурах, үг тогтооход нэмж цээжилхээсээ илүүтэйгээр мартагдах нь амар болжээ.


Эрдэмтэд ер нь судлаад нас ахихаар мартамхай болдгийг судалсан байдаг. Компьютерээр бол хатуу диск удаад ирэхээрээ олон дахин бичиж усгасаар байгаад зарим хэсэгт нь юм бичигдэхээ байчихдаг, эсвэл бичигдсэн юм нь уншигдахаа байчихдагтай төстэй юмуу даа.

Мартах магадлал нь тухайн зүйлийг уншсан хугацаанаас хамааралтай. Түүнийг мөн л судлаад мартуулахгүй сэргээх аргуудыг зохиожээ. Эдгээр аргуудын нэг дээр суурилсан үг тогтоох(томъёо гэх мэт бусад зүйлст ч хэрэглэж болно) вэб систем хийлээ. Эхнэр болон хоёр бяцхан их мэдэхчүүддээ зориулсан юм. Хэрэглэж үзээд сэтгэгдлээ хуваалцаарай.

Tuesday, October 20, 2009

Монгол Хэлний Тайлбар Толийн эх файл CSV форматаар

Монгол Хэлний Тайлбар толийг stardict болон babylon формат руу хөрвүүлэн татахад бэлэн тавьсан билээ. Зарим хүмүүс судалгаа шинжилгээ болон, бусад зорилгоор ашиглахад хэрэгтэй байна гэсэн тул CSV формат руу бас хөрвүүллээ. Татаж авч хэрэглэхээсээ өмнө Хэрэглэх нөхцөлтэй нь заавал танилцаарай.

Saturday, October 03, 2009

Твитерт юу дутуу вэ?

Твитерийн талаар өмнө нэг удаа шүүмжлэн бичсэн билээ. Энэ удаа хэрэглэгчийн үүднээс үргэлжлүүлээд дахин нэг шүүмжилчихье.

  • Твитерийг зөвхөн англи хэлтнүүд ашиглана гэж бодсон - Тааг дээр монголоор бичиж болдоггүй.
  • Твитер америкчуудад зориулагдсан - Улс үндэстэн, хотоор ч юмуу ялгарч тусгаарлагдаж болдоггүй.
Миний санаагаар бол юникодоор бүх зүйл ОК байхаас гадна, хэрэглэгчид ямар нэг ангилал маягийн зүйлийг тааг шиг тодорхойлчихоод(мета-тааг гэчихье), түүгээрээ ангилагдах боломжтой бол зүгээр. Тухайлбал улс, үндэстэн, хот, цамцны өнгө гээд дуртай зүйлээрээ мета-тааг буюу комюнити байгуулж болмоор санагддаг. Мэдээж хүн хэдэн ч мета-тааг сонгож болохоор байх ёстой.

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

Оюутнууд төгсөлтийн ажлаараа хийвэл гоё ажил болно л доо. Твитер API-ийг жаахан судлахад клиент талыг нь нээлттэй эх бүхий твитер клиент дээр суурилаад амархан хийнэ. Харин сервэр тал дээр нь NoSQL ашиглахад яг таарахаар санагддаг. Redis ашиглаад твитер маягийн апликэшн хийсэн жишээ байсан дээр суурилаад сэрвэр талаа хийхэд болохгүй зүйл байхгүй.

Tuesday, September 15, 2009

NoSQL гэж юу вэ?

Сүүлийн үед NoSQL өгөгдлийн сангууд нилээн эрчимжих хандлага харагдаж байна. Гэхдээ өгөгдлийн сангийн нийт хэрэглээний 1% хувийг ч эзлэх эсэх нь эргэлзээтэй л дээ. RDBMS нь өгөгдлийг хүснэгт зохион байгуулалттайгаар хадгалж, SQL хэл ашиглаад бичлэгүүдийг холбож ханддаг. Жишээ нь JOIN хийх, WHERE нөхцөл ашиглах гэх мэт. SQL хэл өгөгдлийг үнэхээр гарын дор болгож чаддаг боловч нэг асуудалтай - Scale хйих буюу өргөтгөхөд хэцүү байдаг. Нэг машин дээр байсан өгөгдлийн сангаа 2, 3 эсвэл 10 машин дээр ажиллуулах шаардлага гарвал яах бол? Ингэж ажиллуулах нь хэцүү. Ажиллуулж чадлаа гэхэд JOIN, WHERE гээд сүпер түлхүүр үгс маань удаан ажиллаж эхлэнэ.

Харин SQL-гүй өгөгдлийн сангуудын хувьд энэ асуудал хялбар шийдэгддэг. Ихэнх нь анхнаасаа тархмал, өргөтгөхөд хялбар байхыг тооцож хийгдсэн учраас. Гэвч NoSQL өөрийн сул талтай. Жишээ нь, SQL-гүйгээр өгөгдлийн сан ашиглаад програм бичнэ гээд төсөөл дөө. Хачин санагдана, учир нь бид ямагт өгөгдлийг хүснэгт хэлбэрээр төсөөлөөд сурчихсанд байгаа юм. Ер нь ч ихэнх тохиолдолд мэдээлэл хүснэгт хэлбэрт байх нь ашиглахад амар байдгаас тэр. SQL-гүй програмыг зохиомжилно гэдэг системийг арай өөр өнцгөөс харахыг шаардана.

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

Эдгээрээс онцлогуудыг дурдвал:

  • Tokyo Cabinet - Маш хурдтай, тархаж ажиллах чадвартай, өргөн боломж бүхий key-value store юм. Түлхүүрээр нь ямар нэг мэдээллийг хадгалж, хандах бөгөөд мэдээлэлт нь ямар ч төрлийн өгөгдөл байж болно. Hash, B-Tree, Table гэсэн гурван төлөвт ажиллаж чаддаг. BerkeleyDB-тэй өрсөлдөхүйц key-value store гэхээр олон жилийн хөдөлмөр шингэсэн байхаас аргагүй. Японы Facebook болох Mixi санхүүжүүлдэг гэхээр тогтвортой гэдэг нь харагдана.
  • CouchDB - Бодит утгаараа concurrent байх боломжтой, учир нь Erlang дээр хийгдсэн. Мөн л key-value store боловч, value нь JSON төрөлтэй. REST интерфэйстэй учраас уян хатан. Бусдаасаа давуу тал нь нэг баазыг өөр тийш хуулах, хоёр баазыг синхрон хийхдээ маш гарамгай.
  • Cassandra - Анх Facebook хөгжүүлж эхлээд нээлттэй эх болгосон гэхээр юуг хийхэд бэлэн, нас бие гүйцсэн гэдэг нь баталгаатай. Хэд хэдэн давхар холбоост массиваас тогтоно. Tokyo Cabinet -ийн адилаар зүгээр key-value store байхаас гадна хүснэгт маягаар бүтэцлэж хадгалдаг. Олон машин дээр тархааж ажиллуулахаар зохиогдсон.
  • Redis - Tokyo Cabinet төстэй гэхдээ жагсаалт, олонлог гэсэн 2 төрлийн өгөгдлийн бүтцийг value тодроо хадгалах боломжтой. Ихэнх үйлдлийг санах ой дотор хийгээд диск руу байн байн хадгалдаг учраас маш хурдан, гэвч осолдож систем гэнэт зогсвол өгөгдөл алдагдах аюул бий. Тархсан байдлаар ажиллахад тийм сайн биш. Гэхдээ өгөгдлийн сан санах ойд багтах тохиолдолд эхний сонголт байж болох талтай.
Дээрхи жагсаалт нөлөө бүхий баазуудыг бүгдийг багтааж чадаагүй. Миний сонирхож амжсан баазууд л энэ юм.

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

Эх сурвалж:
  • http://www.eflorenzano.com/blog/post/my-thoughts-nosql/
  • http://blog.oskarsson.nu/2009/06/nosql-debrief.html
  • http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/
  • http://www.engineyard.com/blog/2009/key-value-stores-in-ruby/
  • http://www.engineyard.com/blog/2009/key-value-stores-for-ruby-part-2-tokyo-cabinet/
  • http://www.engineyard.com/blog/2009/cassandra-and-ruby-a-love-affair/
  • http://www.engineyard.com/blog/2009/key-value-stores-for-ruby-part-4-to-redis-or-not-to-redis/
  • http://code.google.com/p/redis/
  • http://couchdb.apache.org/

Цэвэлийн толийн Stardict хувилбар гарлаа!

Цэвэлийн толийг онлайн болгож эхлэснээс хойш 1 сар өнгөрчээ. Одоогоор 29000 үгийг оруулсан байна. Ингээд анх төлөвлөсөн ёсоор Stardict толийн формат руу хөрвүүлж, татаж авахаар байрлууллаа. Stardict ашигладаггүй хүмүүст энэхүү толь бичгийн програмыг хэрэглэж үзэхийг зөвлөе. Нээлттэй эх бүхий тун сайн програм байдаг юм.

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

Tuesday, September 01, 2009

Unix-ийн 40 насны ойд, Домогт хакеруудад

Өнгөрсөн сард Юникс-ийн 40 насны ой тохиолоо. 1969 оны 8 сард Ken Thompson үйлдлийн системээ анх бичсэн гэдэг. Үйлдлийн системийн kernel, shell, editor, assembler дөрвийг тус бүр нэг 7 хоногт буюу ерөнхийдөө 1 сар орчим хугацаанд PDP-7 хэмээх 4 килобайт санах ойтой машин дээр ажиллаж болохуйц үйлдлийн системийг ассемблер дээр хийчихсэн гэдэг. Цааш Dennis Ritchie-тэй хамтран сайжруулж C дээр бичсэнээр энэхүү гайхамшигт үйлдлийн систем portable болж олон салбарлан тархах нөхцөл болжээ. Маш бага санах болоод ядуу нөөцтэй машин дээр анхлан бүтээсэн учраас Юникс үйлдлийн системийг маш жижигхэн болоод гайхалтай энгийн байлгах шаардлага тулсан гэдэг. Энэ нь уг системийг амжилт олоход чухлаар нөлөөлсөн. Энгийн хүмүүс тэр болгон мэддэггүй боловч, таны интернэтэд холбогдож байгаа компаний рүүтэрээс авахуулаад, гэр ахуйн хэрэгсэл, үйлдвэрийн машинууд, жижиг мобайл хэрэглүүрүүд дээр хүртэл Юникс төст үйлдлийн системүүд ажиллаж байдаг билээ. Би энэ бичлэгээ ч мөн Юникс төрлийн үйлдлийн систем дээрээсээ бичиж суугаа минь Ken Thompson, Dennis Ritchie, Linus Torvalds гээд бусад олон хакеруудын ачаар билээ.


Юниксын 40 насны ойд, Домогт Ken Thompson болон Dennis Ritchie нарт баяр хүргэе!

(Зургийг Wikipedia-с авав. Баруун талд Dennis Ritchie, зүүн талд Ken Thompson.)

Wednesday, August 19, 2009

Я.Цэвэлийн Монгол Хэлний Товч Тайлбар Толь

Я.Цэвэлийн Монгол Хэлний Товч Тайлбар Толийг олж авахсан гэж боддог байсан боловч чадахгүй байсаар саяхан интернэтээс PDF форматаар олж аваад баярлав. Гэвч сканердаж оруулсан учраас хэрэглэхэд жаахан түвэгтэй юм. Ингээд онлайн болгомоор санагдаад вэб хийчихлээ. Олж авсан эх маань сканердсан файл учраас энэхүү вэб дээр одоогоор үг ороогүй байгаа, ганцаараа оруулж бүтэхгүй учраас олны хүчээр босгохоор шийдсэн нь энэ.

Энэ вэб ямар нэг ашиг орлого олох зорилго одоогоор байхгүй. Хостингийг найзынхаа сэрвэр дээр үнэгүй хийж байгаа, домэйн нэр авахад л мөнгө төлсөн.

Уг толь маань 30 орчим мянган үгтэй. Үгийн сан арвижаад ирэхээр babylon, stardict, гэх мэт формат руу хөрвүүлэх болно. Мөн шаардлагатай гэж үзвэл dict сэрвэр ажиллуулж ч магад.

Та бүхнийг өгөгдлийн санг оруулах ажилд хувь нэмрээ оруулахыг хүсье. Өдөрт нэг үг ч багадахгүй, олны хүч оломгүй далай гэдэг. Гол нь яаралгүй, алдаагүй оруулахыг хичээгээрэй. Хувь нэмрээ оруулагсдын нэр Contributors хуудас дээр харагдах болно.

Thursday, August 13, 2009

Ruby use case : Downloading Монголын Нууц Товчоо

Сая нэтээр явж байгаад Монголын Нууц Товчооны audiobook олов. Татаж авах линк байхгүй болохоор нь веб хуудасны соорсыг харвал config.xml дотор mp3 файлуудын зам байж байна. Гараар татахаас залхуураад рүби дээр нэг өгүүлбэр бичив.


Тайлбар:
  • 1-3 мөр. шаардлагатай сангууд
  • 5-р мөр. base_url -д байгаа url дээр mp3 тоглуулагч байгаа. mp3 файлуудын замыг агуулж буй config.xml мөн энэ url дотор бий.
  • 7-р мөр. open-uri сангийн open методыг ашиглаж config.xml-ийн агуулгыг аваад, түүнийгээ hpricot сангийн search методоор хайж item гэсэн таагуудыг ялгаж авч байгаа.
  • 8-р мөр. item таагийн агуулгыг inner_html методоор уншаад, түүнийгээ ';' тэмдэгтээр split хийж эхний хэсгийг mp3path-д авч байна (item тааг доторхи агуулга нь ';' тэмдэгтээр таслагдсан 2 хэсэгтэй ба эхний хэсэг нь mp3 файлын зам байсан.)
  • 9-р мөр. юниксийн wget командыг ажиллуулж файлыг татахдаа үр дүнг хэвлэнэ. (`` -ийм хашилтад хийсэн тэмдэгт мөрийг рүби үйлдлийн системийн команд байна гэж ойлгодог. тэмдэгт мөр дотор #{expression} гэсэн зүйл байвал рүби тэр доторхийг validate хийгээд үр дүнг тэмдэгт мөр дотор оруулдаг.)



Unix систем дээр байгаа бол дээрх кодыг downloader.rb файлд хадгалаад,
#ruby downloader.rb

гэж ажилуулахад Монголын Нууц товчооны mp3 файлуудтай болно. Хэрэв ямар нэг юм олдохгүй байна гэсэн алдаа гарвал
#gem install open-uri hpricot
гэж ашигласан сангуудыг суулгана. Өөр алдаа гарвал хэлээрэй.