Wednesday, January 12, 2011

Твиттер

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

Саяхан "ТВ мэдээ" гэдэг програм андройд платформ зориулж бичсэн юм. Хэрэглээ бол өндөр байнаа. Доор хэр статистиктайг гарсныг үзүүлье:

Энд зарим 1 онцлогуудыг дурдах хэрэгтэй. Энэ "ТВ мэдээ" програм зөвхөн монголд ашиглагдана. Яагаад гэвэл зөвхөн монголын ТВ-үүдийн мэдээг үзүүлдэг. 91 утсан дээр идэвхтэй ажиллаж байна. Энэ бага байна уу? Миний хувьд бол Wow. Энэ жил мобикомын ачаар хэд хүртэл өсөх бол? Лав даг нэлээн явна байх. Дээрх програм нь "Gogo" үндэсний портал сайтаас Телевизийн мэдээллүүдийг нь татаж авдаг. Тэнд бидэн шиг хүмүүст (хөгжүүлэгчид) зориулсан мэдээ алгаа (API/RSS байхгүй). Тэгэхээр аргагүй эрхэнд HTML боловсруулагчийг манай анд Erdenezul бичсэн юм. Миний хэлэх гээд байгаа зүйл энэ хүрээд зогсох хэрэгтэй яагаад гэвэл би Андройд ярих гээгүй Твиттер ярих гэж байна.

Твиттер бол асар их мэдээний орон зай. Үүгээр урсан өнгөрч байгаа мэдээг зөвхөн хүнээ дагаснаар хялбархан ангилж чадна. Хэрвээ тэнгис, өргөөгийн жиргээнүүдийг дагавал тэд нар гарч буй, гаргах гэж байгаа киноны мэдээллийг надад өгнө. Хэрвээ "exchange_mn"-ийг дагавал өнөөдрийн ханшийн мэдээг, "weather_mn"-ийг дагавал цаг уурын мэдээ өгнө. Энэ том мэдээллийн орон зайд зөв хүнээ дагаснаар өөртөө хэрэгтэй мэдээллийг олж авч болно.

За цаг агаарын мэдээг гар утсан дээр үзүүлдэг програм хийе гэж бодъё. Тэгвэл би дахиад "gogo.mn" эсвэл "news.mn"-ий кодыг цэвэрлэдэг скрипт бичих үү? Үгүйэ энэ дэмий байх оронд нь тэрхүү мэдээллийг твиттер дээрээс хайсан нь илүү найдвартай, сайн ажиллана байх.

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

Энэ мэтчилэн твиттерийн тусламжтайгаар яг одоо болж байгаа эсвэл болоод өнгөрсөн мэдээг илүү үр дүнтэйгээр авах боломжтой. Би энд зүгээр толгойнд орсон санаагаа мартахгүйн тулд бичсэн юм хэхэ. Тэрнээс биш хийсэн бүтээсэн зүйл байхгүйг ойлгоорой бүгдээрээ "0" дээр байна. Юм хийцгээе.

Sunday, December 26, 2010

Wednesday, October 27, 2010

Граф байрлуулах алгоритм

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


Миний саяхны даалгавар нь энэхүү графыг байрлуулах байсан учраас хэн нэгэнд хэрэг болж магадгүй гээд өөрийнхөө судалсан зүйлүүдийг орууллаа.

Графыг байрлуулах хэд хэдэн арга байдаг юм билээ.
1. Ортогональ байрлуулах. Энэ нь зангилаанууд нөгөөдөх рүүгээ тэгш өнцөг үүсгэж холбох, тооны дэвтрийн нүднүүд дээр байрлуулах гэсэн үг.
2. Оройнуудыг бодит амьдралыг хуулбарлан симуляци хийх. Энэ арга нь их гоё граф үүсгэдэг. Англи нэр нь "Force Based Algorithm"

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


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

Граф байгуулах асуудал ингээд дуусахгүй, анхны байрлалыг хэрхэн оновчтой сонгох вэ?

Санамсаргүйгээр байрлуулаад өөрөө тэнцвэртээ орно гээд найдаж болно. Гэвч хүсээгүй тэнцвэрийн нөхцөл гарч ирэх магадлалтай.


Дээрх графын хувьд ийм байвал арай илүү байх:
Дээрх "арай дээр" графыг байгуулахын тулд оройгоо тавихдаа хөршүүдтэйгээ ойрхон, бусад оройнуудаасаа хол байрлуулах хэрэгтэй.

Дээрээс нь үл үзэгдэгч "нар" шиг оройг зурж байгаа дэлгэцнийхээ тэг дунд нь байрлуулах хэрэгтэй. Хэрвээ тэгвэл "нар" маань бусад оройнуудаа өөр лүүгээ татаж зурагдах талбайд дүрсээ татаж оруулах болно. Энэхүү графтай 10 гаруй хоног зууралдсаны эцэст янз бүрийн коднуудаас санаа авсаар эцэст нь иймэрхүү граф байгуулагчтай үлдэж хоцорсон болно :) /* 30 орой 40 ирмэг. Ирмэг нь давхардсан байж магадгүй */
Үр дүн - 1:

Үр дүн-2:



Thursday, September 16, 2010

КтМС чамайг таргалуулна

Анх нэгдүгээр курст байхдаа 4-ийн ах нарыг хараад л пөөх эд нар чинь ямар тарган юм гэхэд Анхаа "бид нар ч гэсэн дөрөвтөө орохоор ийм л болно шд" гэхэд нь их инээж билээ хэхэ. Эхэндээ итгэхгүй байсан ч суудаг хүмүүс хөдөлгөөний дутагдалд орж өөрчлөгддөг нь үнэн юм байна.
Би өмнө нь. Дунд нь тамхи барьсан хар малгайтай нүдний шил тавьсан:

Дараа нь:

Манай Үүрээ өмнө нь:

Дараа нь:

Tuesday, August 3, 2010

Блогоо тусгаарланаа

Одооноос эхлээд энэ блог дээрээ зөвхөн хувийн юмаа бичиж байхаар шийдлээ. Мэдээж хөгжүүлэлттэй холбоотой зүйлүүдээ бас орхигдуулмааргүй байгаа болохоор шинэ блог нээгээд тус бүр дээр нь баримтжуулалт хийгээд явна.

Шинэчлэлт:
Джанготой холбоотой бичлэгүүдээ ийшээ хийж эхэллээ.

Sunday, June 13, 2010

Яахаа мэдэхгүй л байна

Надад ямар ч асуудал тулгараагүй, гэхдээ л ямар нэгэн зүйл хийх хэрэгтэй үе нь тулж ирчихээд байдаг.

Sunday, June 6, 2010

Код унших

Vim гэдэг хөгжүүлэгчийн хэрэгсэл хэрэглэсээр нэлээн удаж байгаа билээ. Харин "help" гэдэг хэсгээр нь зугаалж явж байгаад "tag" үүсгэх гэдэг хэсгийг нь оллоо маш хэрэгтэй эд байна.

ctags - команд нь ямар нэгэн хэл дээр бичигдсэн эх кодыг уншиж классын зарлагаа эсвэл функцийн зарлагаа глобал хувьсагч эд нарыг бүртгэж "tags" гэдэг нэртэй файлд бүртгэдэг. Ингэснээр vim ашиглаж байх үед ямар нэгэн мэдэхгүй класс, функц гарч ирвэл түүн рүү шууд үсрэх боломжийг олгодог. Хэрвээ суулгаагүй бол:

$ sudo apt-get install exuberant-ctags

Албан ёсны сайтынх нь хэлж буйгаар 41 хэлний синтаксийг уншиж чадна гэсэн байна.

#Одоо өөрийнхөө ажиллаж байгаа төслийнхөө хавтас руу орно.
$ cd your_project
#Си хэл дээр төслөө бэлдэж байлаа гэж бодъё тэгвэл бүх Си хэл дээр бичсэн эх кодуудыг
#ctags командаар бүртгэх хэрэгтэй.
$ ctags *.c
#tags гэсэн файл тухайн хавтас дотор үүсэх болно. Одоо vim рүүгээ ороод мэдэхгүй
#ямар нэгэн зарлагаа эсвэл функц дээр курсороо гүйлгэж очоод Ctrl+] дар.

Мэдээж өөр ямар нэгэн хэл хэрэглэж байгаа бол ар талын өргөтгөлийг нь дараах маягаар өөрчлөөд байх хэрэгтэй:

# Python хэлэнд
$ ctags *.py
# Ruby хэлэнд
$ ctags *.rb

гэх мэтчилэн. ctags команд дэд хавтсууд руу автоматаар орж бичдэггүй юм байна лээ. Тэгэхээр бүх директороос хайна гэвэл:

$ find . -name '*.py' -print | ctags -L -

Өмнө нь tags файл үүсгэсэн байгаад түүн дээр нэмж бичихээр бол "-a" горимыг тавьж өгөх хэрэгтэй. Си хэлний хувьд өөрийнх нь стандарт функцүүдийн тусламжийг авахаар бол "Shift+K" дарна. Стандарт функцийн мэдээллүүд нь ctags гэсэн файлд бүртгэгддэггүй.

Python хэлний хувьд Джанго фрэймворкийг ctags бүртгүүлчихвэл бүр амар.
$ find /usr/local/lib/python2.6/dist-packages/django/ -name '*.py' -print | ctags -L -
Дараа нь өөрийнхөө прожектийг бас бүртгүүлчих хэрэгтэй.
$ find my_project_directory -name '*.py' -print | ctags -a -L -
Одоо ингээд хэдэн файлуудын дунд ганцхан товч дараад л үсрээд байж дээ :) Буцаж үсрэхдээ Ctrl+O