Badral's personal blog
Интернет миний ертөнцийг хардаг цонх …

May, 2007Archive for

Линүкс дээр миний хамгийн өргөн хэрэглэдэг тушаалууд

Thursday, May 31st, 2007

Сая нэг файл хайж суугаад та бүхэнд өөрийн хамгийн их хэрэглэдэг хэдэн тушаалаа хуваалцая гэж бодлоо. Тухайн тушаал яаж ажилладагийг тайлбарлаж нуршаад байлгүй юу хийдгийг нь товч дурдъя.

Файл удирдах системтэй холбоотой тушаалууд
1.

ls -lSr # файлуудыг жагсаана. Хамгийн том нь сүүлд харагдана

2.

df -h # дискийн сул зайг харах

3.

df -i # дискийн чөлөөтэй inodes харах

4.

du -x / | sort -nr | head -20 # Хамгийн том 20 лавлахыг харах

5.

df -hT # залгагдсан файлын системүүдийг нийт багтаамж болон хэрэглэсэн
зай файл системийн төрөлтэй харах

6.

fdisk -l # дискийн хуваалтыг хэмжээтэй харах. Зөвхөн эзэн хэрэглэгчээр ажиллуулдаг

7.

tail file # Файлын сүүлчийн хэдэн мөрийг харах. Хэд гэдгийг -n параметерээр
тохируулна. Протоколл файл уншихад амар байдаг

8.

find / -name ‘myfile.txt’ # Файлыг таны эх (root) хуваалт (partition) дээрээс хайна.

9.

grep “mongolian” * # Идэвхтэй лавлах дотроос mongolian гэсэн үг орсон бүх
файлыг олно. Энэ миний хамгийн их хэрэглэдэг тушаал. Энгийн илэрхийлэл хэрэглэн хайх боломжтой

10.

grep -i mongolian my.txt # -i параметер авбал том жижиг үсэг ялгахгүй хайдаг

11.

grep -in mongolian my.txt # Олон параметер зэрэг авч болох ба -n авбал олдсон мөрийн дугаарыг цуг хэвлэнэ

12.

grep -l -i mongolian *.doc > result.txt # Хайлтын үр дүнг result.txt файлд
хадгална. -l параметер авсанаар мөрүүдийг харуулахгүй. Зөвхөн файлуудын нэрсийг
жагсаана

13.

grep -i -l -E “(word1|word2)” *.doc # Word1 эсвэл Word2 гэсэн үгийг
баримт файлд хайна. Яг ямар үгээр хайхаа сайн санахгүй бол боломжит үгсээрээ хайхад
хэрэгтэй байдаг.

14.

cat text1.txt | sed ‘s/mongol/mongolian/g’ > text1.txt.new
эсвэл шууд sed -i -e “s/mongol/mongolian/” text1.txt > text1.txt.new # text1.txt файл дотроос
mongol гэсэн үгийг mongolian гэсэн үгээр орлуулаад үр дүнг text1.txt.new файлд бичнэ. Мөн хэд
хэдэн файлд эсвэл бүх файлын хувьд ч орлуулах үйлдэл хийх боломжтой

Процесс удирдах системд хамаатай зарим тушаалууд

15.

ps aux # Системд ажиллаж буй бүх процессыг харах

16.

killall mozilla # Процессийг устгах. Жишээлбэл mozilla -г устгав

17.

kill -SIGHUP `pgrep squid` # squid тохиргооны файлыг дахин ачаална

18.

ps ax | grep process # Process ажиллаж буй эсэхийг шалгана

19.

top # Процессуудын санах ой болон CPU хэрэглээг харуулна

20.

pstree # Процессуудын мод харуулна

Мэдэхийг хүссэн тушаалуудаа сэтгэгдэлд оруулж болно.

Хүн болох багаасаа, хүлэг болох унаганаасаа

Tuesday, May 29th, 2007

Нэг програмтай зууралдаад ойрд зав гардаггүй. Ямар програм болохыг нь удахгүй задланаа. 😉
Аливаа зүйл багаас эхэлдэг. Тиймээс та PHP хэлний чадвараа нэмэгдүүлэхийг хүсэж байвал дараах хэдэн зүйлийг санаж програмаа бичиж байхад илүүлэхгүй. Ямар ч гэсэн хамгийн энгийн 10 зүйлийг энд дурдая. Тэрнээс уртыг бичих зав гарахгүй байх.
1. Давхар хашилтын (“) оронд дан хашилт хэрэглэж байх. Жишээлбэл: “Хариу: $result” -ийн оронд ‘Хариу: ‘. $result гэх мэт. PHP хөрвүүлэгч (интерпретор) давхар хашилт доторх зүйлсийг шалгадаг ба дан хашилтад байгаа зүйлсийг шууд залгадаг тул таны програмын хурдад эерэгээр нөлөөлнө. Мөн кодын эмх цэгцэд сайнаар нөлөөлнө.
2. If нөхцөл шалгахдаа хамгийн магадлалтай зүйлсээ эхэнд шалгаж байх хэрэгтэй. Таны програмын хурдад сайнаар нөлөөлнө.
3. Цикл хэрэглэх болбол аль болох for, foreach, while (each() list()) гэсэн дарааллаар хэрэглэж байх хэрэгтэй. Учир нь for, foreach while (each() list()) хурдан байдаг.
Жишээлбэл: for ($i=0; $i<$len; ++$i) бусад хувилбаруудаасаа хамгийн хурдан нь. For цикл дотроо нөхцөл шалгахдаа функц бүү дууд! Жишээлбэл: for ($i=0; $i<$strlen($str); ++$i) биш $len=strlen($str); ($i=0; $i<$len; ++$i); хэрэглэвэл таны код илүү оптимал хурдан ажиллана. Мөн PHP4 шинжээчийн хувьд Postfix буюу ($i++) алхмын оронд prefix (++$i) алхам хэрэглэвэл таны код шинжээчээр илүү хурдан шалгагдах тул бас хурдыг бага ч гэсэн нэмэгдүүлнэ. PHP5-ын хувьд онцын ялгаа мэдэгдэхгүй болсон байсан. 4. Юникод өгөгдөлтэй ажиллаж байгаа бол та өгөгдлийн баазад бичилт хийхийнхээ өмнө mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_connection=utf8'); функцүүдийг заавал дуудаарай. Тэгвэл танд өгөгдлийн кодчиллын асуудал гарахгүй. 5. mysql_escape_string() функцийн оронд mysql_real_escape_string хэрэглэж бай. Учир нь mysql_real_escape_string функц тухайн өгөгдлийн кодчиллыг харгалзаж үздэг тул илүү найдвартай. 6. Энгийн илэрхийлэл ашиглахдаа ereg функцүүд биш preg функцүүд ашиглаж байвал илүү хурдан. 7. Өгөгдөл хэвлэхдээ echo, print, printf гэсэн дарааллаар функцүүдээ сонгох хэрэгтэй. Яагаад эхлээд echo -г сонгох хэрэгтэй вэ гэвэл өгөгдлийг шууд гаралт руу тушаадаг тул энэ 3 дотроо хамгийн хурдан нь. Урьд нь PHP3 дээр print хамгийн хурдан нь гэгддэг байсан боловч PHP4-с хойш биш болсон. 8. Ховдог байх хэрэггүй. 🙂 Өгөгдлийн баазаас өгөгдөл уншихдаа хаа сайгүй SELECT * FROM table гэж авах хэрэггүй. Зөвхөн хүссэн талбараараа авч байх хэрэгтэй. SELECT fieldname FROM table гэх мэт. Адгийн наад зах нь хүснэгт шалгах үйлдлийг хэмнэнэ. 9. Заагч (Reference) ашиглаж байх хэрэгтэй. Ямар нэг хувьсагчид хуулбарлаад яваад байвал таны серверийн физик санах ойд хадгалагдах ба серверийн хүчин чадалд муугаар нөлөөлнө. Жижиг хэмжээний скриптүүд дээр сүртэй ялгаа мэдэгдэхгүй боловч томоохон хэмжээний програмууд дээр илэрхий ялгаа ажиглагддаг. PHP5 аас өмнөх хувилбар дээр хуулбартай ажиллах нь илүү хурдан гээд хөгжүүлэгчид ихээхэн ашигладаг байсан бол PHP5-с хойш эсрэгээр эргэсэн. 10. Залхуу холболтоос зайлсхий. PHP файлын толгой бүр дээр шууд файлуудыг холбоод яваад байх нь утгагүй. Яг зайлшгүй хэрэгтэй газар нь функц дотроо холбоод явах нь илүү үр ашигтай. Зарим үйлдэлд огт хэрэггүй үед бүхэл бүтэн файл эсвэл класс үргэлж холбох нь утгагүй. Эцэст нь кодыг маш эмх цэгцтэй, тайлбартай бичиж явах нь туйлын чухал. Яаж эмхэлж цэгцлэх талаар янз бүрийн жишээ баримтууд инэтээр дүүрэн бий. Олж аваад уншицгаана бизээ.

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

Tuesday, May 22nd, 2007

Сүүлийн үед CVS -с SVN рүү ихэнх төслүүд нүүх болов. Албан бус боловч яалт ч үгүй SVN нь CVS-ыг залгамжилан, түүнийг түрж гарч ирж байгааг хөгжүүлэгчид бид харж байна. Өнгөрсөн жил ОпенМН багийнхаа CVS ыг ч би SVN рүү шилжүүлж орхисон билээ.
CVS нь Eclipse дээр стандартаар хамт суучихсан байдаг тул CVS проектуудыг шууд үүсгээд хэрэглэхэд амар байдаг. Харин SVN-ийг хэрэглэхийн тулд та Subclipse суулгах хэрэгтэй болно. Энэ нь Eclipse-н нэг плагин юм. Нэг хэсэг shell дээр гараараа SVN checkout хийж явдаг байгаад залхуу хүрээд Eclipse CVS шиг амар боломж хайсаар Subclipse -г олсон юм.
Суулгахад плагин яаж суулгадаг билээ тэр зарчимаар маш амархан суулгана. Help -> Software Updates -> Find and Install гэж ороод Search for new features to install гэдгийг сонгоно. Тэндээ new Remote Site гэдэг товчийг дараад гарч ирсэн цонхонд Subclipse гэсэн гарчиг өгөөд http://subclipse.tigris.org/update хаягийг оруулна. Ингээд суулгах процесс автоматаар үргэлжлэх ба эцэст нь Eclipse шинээр эхлүүлэхийг асууна. Түүнийг зөвшөөрч эхлүүлсэнээр суух процесс дуусна. Суулгах явцад асуудал гарвал http://subclipse.tigris.org/install.html хаягаас дэлгэрүүлэн харж болно.
Харин яаж хэрэглэхийг одоо дурдая.
Window->Show View -р ороод Other гэдгийг сонгоно. Дараах цонх гарч ирэх ба SVN Repository -г сонгон нээнэ.
Үүний дараа гарч ирэх цонхонд баруун товшилт хийгээд дараах зургийн дагуу SVN repository зааж өгнө.
Жишээлбэл https://mngl.net/openmn/gnome/ гээд өгчихөж болно. Энд ОпенМНыхэний хийсэн Гномын монгол орчуулгын сүүлийн хувилбар байгаа. Энэ холбоосын тохиргоог цаашид хийхдээ Window -> Preferences-> Team -> SVN рүү ороод хийнэ.
Шинэ проект SVN-с авч үүсгэх хэрэгтэй болбол одоо File -> New -> Project гээд ороход дараах байдлаар нэмэгдсэн байх болно.


Repository-тойгоо ажиллах болбол оруулж ирсэн тухайн төслийнхөө нэрэн дээр баруун товшилт хийгээд Team рүү орж, доорхи зурган дээр харагдаж байгаагийн дагуу ажиллана. Яг л CVS -тэй ажиллаж байгаатай ижил.

ОпенМН -ы вэб хуудсан дээр Commit, Checkout гэх мэт Repository-тай ажилладаг үйлдлүүдийн тухай дэлгэрэнгүй тайлбарласан байгаа.
Нуршаад байлгүй тодорхой бичихийг оролдов.

Форум модул ба өгөгдлийн баазын загвар

Monday, May 21st, 2007

Өнгөрсөн долоо хоногт Болор агуулга удирдах системийнхээ (АУС) форум модультай зууралдсаар өнгөрүүлэв. Энэ модуль нь бусад модулийг бодвол нилээн интерактив интерфейстэй тул цаг нилээн авлаа.
Энэ модул нь үндсэндээ хэлэлцүүлэгийн ангилал удирдах хэсэг, хэлэлцүүлэг удирдах хэсэг, сэдэв удирдах хэсэг, бичлэг удирдах хэсэг. тохиргооны хэсэг гэсэн үндсэн 5 дэд модульд хуваагдав.
Эхний 2 хэсэг харьцангуй амархан тул нэг их цаг алдалгүй амжуулав. Сэдэв ба бичлэг удирдах хэсэгт нилээн цаг зарсаны нэг нь хэрэглэгчид BBcode орууулахыг зөвшөөрөх BBcode parser класс болон хэрэглэгчид заавал код бичүүлэхгүй шууд оруулах интерфейс хийх байлаа. Regular Expression (энгийн илэрхийлэл гэж орчуулагдах уу?) бичээд маш жижигхэн класс үүсгэв. Хэрэглэгчийн интерфейс хэсэгт Болор АУС-ийн WYSIWYG засварлагчаар ашигласан TinyMCE -г ашиглалаа.
Мөн найдвартай байдлын үүднээс хэрэглэгчээс HTML, PHP, TAG (тэмдэглээс гэж орчуулагдах уу) зөвшөөрөхгүй гэхээр хэрэглэгчид PHP, HTML код оруулж хэлэлцэхэд бэрх болох гээд байсан тул зөвшөөрөхөөр оруулж оруулсан өгөгдлийг шинжлэн найдвартай хадгалах гэж жаал цаг зарлагадав. Модул одоогоор ерөнхийдөө дууссан бөгөөд сэдэв эхлүүлэгчид өөрийнхөө сэдвийг засварлах, төлөв тогтоох, модераторуудад сэдэв болон бичлэг удирдах боломжуудыг нэмэх л үлдэв.
Энд төлөв тогтоох гэдэг дээр наалттай юу зарлал уу гэсэн биш энэ сэдэв шийдэгдэж хаагдсан уу үгүй юу? Шийдэл баталгаатай юу үгүй гэдгийг заах юм. PHPBB ч юм уу vbulletin дээр ийм боломж байдаг эсэхийг мэдэхгүй. Ямар ч гэсэн надад тун хэрэгтэй мэт санагдаад ийм боломж нэмэв.
MYSQL өгөгдлийн баазын загвар гаргахдаа би DBDesigner хэмээх үнэгүй програм хангамжийг ашигладаг. Ямар ч гэсэн миний хэрэгцээг хангаад байдаг сайн програм. Линүкс виндовс аль алин дээр нь асуудалгүй ажиллана. Энэхүү програм ашиглан гаргасан форумын өгөгдлийн баазын загварын хураангуй хэлбэрийг доор хавсаргав. (MSSQL өгөгдлийн баазын загвар гаргахдаа би visio ашигладаг.)
Болор форумын өгөгдлийн баазын загвар
Өгөгдлийн баазын загвар гаргаж явах нь тухайн бүтээгдэхүүнийг гаргасаны дараа арчилан сайжруулах, баримтжуулах зэрэгт онцгой ач холбогдолтой байдаг. Хэрэв та загвараа эхлэж гаргадаггүй бол өнөөдрөөс эхлэн үргэлж загвар гаргаж явж байгаарай.

Eclipse – PHPEclipse – Aptana – Texlipse

Sunday, May 13th, 2007

Амралтын өдрүүдэд ОпенМН багийнхаа шинэ вэбийг хийж өнжив. Ингээд вэб хуудас бүтээхдээ өөрийн ашигладаг хэрэгслүүдийн талаар товч дуулгамаар санагдлаа. Учир нь бид бүхэн гадныхан шиг тийм баян хүмүүс биш ба тэр үнэтэй мундаг програмуудыг нь тэр бүр худалдаж аваад байж дийлдэггүй шүү дээ. Оюутан байдаа тэр үнэтэй програмуудыг нь кракдаад хэрэглээд байдаг байлаа. Одоо харин тэр бүр хууль зөрчөөд байж болохгүй юм аа. Тиймээс үнэгүй нээлттэй эх бүхий програм хангамжаар тэр айхтар үнэтэй програмуудыг орлож чадахуйц орчиныг бүрдүүдэхийг зорьсон юм. Вэб хөгжүүлэл хийхдээ би ихэвчилэн PHP ашигладаг тул PHP, JS, HTML, CSS зэргийг засварлах хэрэг их гарна.
Оюутан байхдаа Жава хэл дээр програм бичих гэж Eclipse хэрэглэж сурсан ба үнэндээ Жава хэлийг түүнээс өөр зүйл дээр илүү бичих аргагүй тийм сайн орчин юм гэдгийг мэдэж авсан билээ. Eclipse хэрэглэдэг хүн бүр түүний ямар хүчирхэг, тогтвортой програм хөгжүүлэхэд таатай байдгийг мэднэ дээ. Тиймээс Eclipse-н PHP плагин хайж гарав. Ингээд PHPEclipse гээч зүйлийг олж авав. Энэ миний одоо хэрэглэдэг хамгийн дуртай PHP засварлагч болж чадсан. Урьд өмнө нь ultraedit болон PHPedit хэрэглэж байгаад нэг хэсэг Zend studio гээч айхтар эдийг кракдаж байгаад хэрэглэж эхлээд байлаа. Zendsudio хэдийгээр хүчирхэг сайн програм мөн боловч PHPEclipse-ийн хажууд надад юу ч биш санагдсан. Магадгүй миний амт өөр байсан юм боловуу бүү мэд. Zendstudio-d байдаг бүх зүйл PHPEclipse дээр байдаг. Код шинжээч болон зөвлөөч, баримтжуулагч, шалгагч гээд CVS/SVN дэмжилт бүх зүйлс бий. Мөн янз бүрийн файл класс тодорхойлогч руу маш амар харайгаад харайгаад оччихно. Файлын хэсгүүдийг эвхэнэ. Кодын тайлбарыг dokbook-д тохиромжтойгоор янзын гоё хийнэ. Автомат код форматлагчтай! Үнэгүй. Нээлттэй эх. Үнэндээ л супер, супер.
PHPEclipse- ээр зөвхөн PHP засварлахад тохиромжтой байдаг тул CSS,JS,HTML засварлах чадвартай плагин хэрэг болов. Их олон янзын Eclipse плагин байдаг юм байна. Ингээд Aptana хэмээх сайхан эдийг олж авсан юм. Энэ нь маш сайхан CSS, HTML, JS засварлагч юм. Eclipse нь ямар ч үйлдлийн системүүд (Виндовс, Линүкс, Юникс, Мак гээд) дээр маш тогтвортой ажилладаг ба бүх плагин-үүд нь бүгд ажиллана. Tex/LaTeX хүртэл плагин саяхан олж суулгаад хэрэглэж байгаагаа дуулгасан байхаа.
Ингээд эдгээрийг (Texlipse -ээс бусад) би 2005 оноос эхлэн өнөөг хүртэл хэрэглэж байна даа. Үнэхээр сэтгэл ханамжтай явдаг. Та хэрэглээд үзээрэй. Салж чадахгүй болно шүү. 🙂
Сүүлийн үед хэдэн залуус EasyEclipse гээд Eclipse -ийг төрөл төрлөөр нь пакетлаад гаргадаг болсон харагдсан. Жишээлбэл PHP хэлийн нь хувьд миний энэ ашигладаг орчин байх жишээтэй. Java, Perl, Python, C/C++ гээд хэлүүд дээр бас тус тусынх нь зориулалт тохиргоо бүхий сайн орчинг бүрдүүлсэн байгаа. Залхуу тань хүрч байвал бэлнээр нь энэ EasyEclipse-г татаж аваад суулгаж ч болох юм.

Эхний үе шат асуудлын анализ – Үүргийн дэвтэр

Thursday, May 10th, 2007

Програм хангамжийн инженерчилэлийн эхний үе шат болох асуудлын анализын эхэнд (төлөвлөлт хийх үед) “Үүргийн дэвтэр” болон “Системийн тодорхойлолт” бэлтгэх хэрэгтэйг өмнө дурьдсан билээ. Энэ үүргийн дэвтэр нь

  • Зорилгын тодорхойлолт
  • Бүтээгдэхүүний хэрэглээ
  • Бүтээгдэхүүний үйл ажиллагаа (functional requirement)
  • Бүтээгдэхүүний өгөгдлүүд
  • Бүтээгдэхүүний шинж чанар
  • Чанарын шаардлагууд
  • Нэмэлт

гэсэн 7 хэсгээс тогтоно.

Зорилгын тодорхойлолт

Энэ хэсэгт үндсэн даалгаварыг тодорхойлон бичнэ. Үүнийг ихэнх тохиолдолд даалгавар олгогч бэлтгэчихсэн байдаг тул хуулаад тавихад хангалттай.
Энэ хэсэгт та өөрийн зүгээс системд хэн хэн оролцохыг тодорхойлчих хэрэгтэй. Хэн
хэн энэ системийг хэрэглэх юм? Тэд хэр зэрэг туршлагатай вэ? гэх мэт.
Энэ хэсэгт “Энэ програм хангамжийг хэрэглэсэнээр ямар зорилгод хүрэх ёстой вэ?” гэсэн асуулт хариулагдсан байх ёстой.

Бүтээгдэхүүний хэрэглээнд

Энэ хэсэгт хөгжүүлэх системийн хэрэглээний хүрээ хязгаарыг тодорхойлох хэрэгтэй
байдаг. Тухайн газрын мэргэжилийн ухагдахуунуудыг оруулан ихэнх тохиолдолд зураг
оруулж ирж дүрсэлбэл зохимжтой харагддаг. Байгууллагын бизнес процессийг
тодорхойлон хаана төслын ямар хэсэг тохирохыг тоочих хэрэгтэй.
Энэ хэсэгт “Энэ програм хангамж ямар хэрэглээний хүрээ болон хэнд зориулагдсан бэ?” гэсэн асуулт хариулагдсан байх ёстой.

Бүтээгдэхүүний үйл ажиллагаа

Энэ хэсэгт хөгжүүлэх системийн үндсэн функц, үйл ажиллагааг нарийвчилан
тодорхойлох хэрэгтэй. Функционал шаардлага гэж англи литературууд дээр
тэмдэглэсэн байгаа. Энэ хэсэгт ерөнхий Use Case диаграмыг оруулж ирж болно.
Мөн нээлттэй, бүрхэг асуултуудыг энд оруулах хэрэгтэй бөгөөд эцсийн хувилбар
дээр хоосон байх хэрэгтэй. Харин завсарын хувилбарууд дээр маш их утга учиртай,
хэрэгтэй байдаг.
Энэ хэсэгт “Бүтээгдэхүүний үндсэн функц үйл ажиллагаа даалгавар өгөгчийн зүгээс юу юу
вэ?” гэсэн асуулт хариулагдсан байх ёстой.

Бүтээгдэхүүний өгөгдөлүүд

Энд програм хангамжийн ажиллах үндсэн өгөгдөлүүд оруулж ирнэ. Хэв файлыг харна уу!
Энэ хэсэгт “Бүтээгдэхүүний үндсэн өгөгдөлүүд даалгавар өгөгчийн зүгээс юу юу вэ?” гэсэн асуулт хариулагдсан байх ёстой.

Бүтээгдэхүүний шинж чанар

Энэ хэсэгт хөгжүүлэх системийн өмнөх хэсэгт заагдсан үйл ажиллагаанд хамаараагүй
шинж чанаруудыг оруулна. Үүнд бүтээгдэхүүний хэрэглэгдэх системийн орчин болон
функционал бус шаардлагууд орно. Энэ хэсэг хэдийчинээ тодорхой байна бүтээгдэхүүнийг тестлэх орчинг бүрдүүлэхэд төдийчинээ сайн байдаг.
Энэ хэсэг “Бүтээгдэхүүний бусад шинж чанарууд юу вэ? Ямар нэг функц дээр хугацаа, өгөгдөл, нарийвчилалаас хамааран онцгой зүйлс шаардагдах уу?” гэсэн асуултанд хариулт өгсөн байх ёстой.
Хэв файлд жишээ бий.

Чанарын шаардлагууд

Тухайн даалгавар өгөгч ямар ямар эрсдэлийг хүлээж авах чадвараас хамааруулан тодорхойлно. (Найдвартай байдал, бат бэх, хэрэглэгчид таатай орчин, үр ашигтай байдал,…)
Энэ хэсэгт “Ямар ямар чанарын шаардлагуудыг ямар төвшинд хангах ёстой вэ?” гэсэн асуулт хариулагдсан байх ёстой.

Нэмэлт

Өөр ямар онцгой шаардлагууд байна вэ? Та юу ажиглав. Бүгдийг нь энд тэмдэглэх хэрэгтэй.

Үүргийн (Зорилгын биш шүү! андуураад бичсэн байснаа заслаа) дэвтрийн Латекс эхийг эндээс татаж аваад өөртөө хэрэглэж болно.
Виндовс дээр MikTex ашиглан хөрвүүлсэн PDF энд бий.
Убунту дээр texlive ашиглан хөрвүүлсэн хувилбар PDF энд бий.
За нилээн яаруу бичсэн тул алдаа мадагтай зүйлс орсон байж болох юм. Санал сэтгэгдэлээ хэлнэ буй за. Удахгүй Системийн тодорхойлолтоо бэлтгэж дуусаад иймэрхүү нэг юм мутарлая. Би өөрийн зүйлсээ герман хэл дээр хийгээд монгол хэл рүү хөрвүүлж тавьж байгаа тул зав чөлөөнөөс шалтгаалж жаахан удаж байгааг болгооно уу.

Монгол ном бэлтгэх латекс хэв

Thursday, May 10th, 2007

За та бүхэнд амлаж байснаар өчигдөр орой сууж хийсэн латекс номын хэвийн эхийг энд хавсаргалаа. Би өөрөө латекс хамтран хөгжүүлдэг, эсвэл өнө удаан жил хэрэглэсэн мэргэжилтэн биш тул гологдолтой зүйлс олон байгаа байх. Та бүхэн эх кодыг шалгаад сайжруулах зүйлс байвал илгээнэ үү.
Энэхүү баримтын эхийг Убунту линүкс дээр texlive ашиглан бэлтгэсэн болно. Үүсгэгдсэн PDF файлын чанар хангалттай сайн биш байж болох юм. Та бүхэн яаж сайжруулж болох тухай зөвөлгөө өгөөрэй.
Монгол хэл маань латекс/текс орчинд хаа очиж сайн дэмжигдсэн байдаг нь берлиний их сургуулын доктор Oliver Corff -той холбоотой болов уу. Тэрээр montex пакетыг бэлтгэсэн бөгөөд одоо монгол бичгийг дэмжилт хийгээд дуусч байгаа юм шиг байна лээ.
Мөн таван хэлийн толь бичгийн төсөлтэй нь та бүхэн www.pentaglot.net хаягаар ороод танилцаж болох юм байна.

Програм хангамжийн инженер гэж хэн бэ?

Monday, May 7th, 2007

Өмнө амласан ёсоор Програм хангамжийн инженерийн тухай товч дурдъя. Бид програм хангамжийн инженерүүдийг программист гэж нэрлэдэг. Гэвч программист, програм хангамжийн инженер хоёр жаахан ялгаатай.
Програм хангамжийн инженер (software engineer) гэдэг мэргэжил програм хангамжийн инженерчлэл (Software engineering) хөгжиж эхэлсэнээс хэдэн жилийн дараа гарч иржээ. Үүгээр хуучны программистуудын үүрэг даалгавар өсөн нэмэгдсэн гэж үзэж болно. Учир нь программистууд жижиг програмчлал л хийдэг бол програм хангамжийн инженерүүд том програмчлал хийдэг. Програм хангамжийн инженерчлэл салбарт програмчлалыг жижиг (Programming in small) болон том (programming in large) гэж 2 ангилдаг. Жижиг програмчлал гэдэг нь ямар нэг хэл дээр код алгоритм бичихийг хэлдэг. Сайн программист хүн маш үр ашигтай чанартай алдаа мадаггүй сайн алгоритм бүхий програм бичдэг. Харин том програмчлал нь жижиг програмчлал дээр нэмээд төсөл төлөвлөлт, шаардлага, үр ашгийн тооцоо, програм хангамжийн бүтэц загварыг гаргадаг. Гэхдээ ирээдүйд энэ том програмчлалд жижиг програмчлал харьяалагдахгүй болох байх.
Програм хангамжийн инженерүүд юу хийдгийг нарийн тодорхойлохын тулд эхлээд програм хангамжийн инженерчлэлийг тайлбарлах хэрэгтэй болох байх. Өнгөрсөн зун би энэ сэдвээр нэг лекц уншиж байсан. Мэргэжилийн бус хүний тэмдэглэл тул ойлгомж муутай байх. Хүсвэл үзүүлэнг нь хавсаргаж болно. Энэ дашрамд цахим өртөө төрийн бус байгууллага монголд янз бүрийн сэдвээр сайн сайн лекц уншуулдаг тул та бүхэн http://holboo.tsahimurtuu.mn хаягаар ороод хэзээ, хаана, хэн, ямар лекц уншихыг мэдээд аваарай.
Програм хангамжийн инженерчлэл нь өөрийн гэсэн хөгжүүлэлт хийдэг үе шатуудтай байдаг. Эдгээр үе шатуудыг хэрэгжүүлэх янз бүрийн загвар байдгаас хамгийн түгээмэл үр өгөөжтэйг нь “Хүрхрээ” (waterfall) загвар гэж үздэг. Үүнийг зургаар харуулъя.
Хүрхрээ загвар
Эдгээр үе шатууд нь дотроо мөн хуваагдаад явна. Жишээ нь эхний шатаас шаардлагын тодорхойлолт гаргаж ирэхэд албан ба албан бус тодорхойлолт гаргаж ирдэг. Энд Lastenheft гэж ярьдаг. Бид “Үүргийн дэвтэр” гээд нэрлэчихье . Албан бус тодорхойлолтыг үүрэг даалгавар өгөгчтэй хамтран гаргана. Харин албан тодорхойлолтыг зөвхөн даалгавар хүлээн авагч гаргадаг. Энд Pflichtenheft гэж ярьдаг ба англиар “system specification” гэдэг тул бид “Системийн тодорхойлолт” гээд нэршчихье. Энэ Системийн тодорхойлолт маань нөгөө шаардлагын тодорхойлолт болох учиртай.
За би өөрийн төслийн үүргийн дэвтэрээ гаргаад энд яаж хийдэг болон хийсэн тухай бичээд монгол хэл дээр нэг Латекс хэв бэлдээд тавинаа. Мөн ер нь монголоор латекс дээр ном бичих хэвийг энд тавина гэж амласан байгаагаа мартаагүй байгаа. 😉

Төслийн хажуугаар хавчуурга тооц

Friday, May 4th, 2007

Төсөл төлөвлөлтөндөө хугацааг байнга нөөцтэй авч байх хэрэгтэй. Төслийн хажуугаар өндөр эрхтэй даалгаварууд байнга орж ирж байдаг. Үүнийг тооцож байхгүй бол төлөвлөсөн хугацаандаа дуусна гэж байхгүй. Өнөөдөр шаардлагын тодорхойлолт (Requirement Specification) хийгээд сууж байтал (уг нь энийг менежертэй цуг хийх ёстой байсан боловч нөгөөхийн зав гарсангүй) дарга веб хуудсын инспекторуудийн өгөгдлийн баазад нэг хүснэгтийг 1:N болгож байж засагдах нэгэн өөрчлөлт хийж байж шийдэгдэх нэгэн даалгавар өгчихвөө. Ингээд нөгөө шаардлагын тодорхойлолтоо хийж амжсангүй ээ.
Нөгөө веб өгөгдлийн баазын дизайныг өөрчилсөнөөр PHP эх кодод засвар хийсээр хагас өдрийг барав. Энэ хооронд MySQL 4.1 – ээс хойш дэмжигдсэн GROUP_CONCAT() гэсэн функцийг олж хэрэглэв. Энэ GROUP BY нөхцөлийн аггрегат (нэгтгэл?) функц үнэхээр хэрэгтэй функц байна. Энэ нь 512 хүртэл урттай бол VARCHAR тэмдэгт мөр илүү бол BLOB объект буцаадаг юм байна. Хамгийн гол нь та N:1 хүснэгтүүдээс олон дахин уншилт хийхгүй ганц уншилт хийгээд PHP дээр explode() функцын тусламжтай холбох боломжтой болох юм.
За харих цаг боллоо.

Windows оос Линүкс рүү

Friday, May 4th, 2007

Нэг шинэ ПК автал нөгөө виндовс виста гайхалтай ирвээ. Энэ үйлдлийн систем үнэхээр өлгийн дотроо байгаа нь мэдэгдэж байлаа. Eclipse-ээ суулгаад ажиллах гэтэл CVS update хийх үед бичих хандалтын эрх хүрсэнүй гээд болсонгүй. Уг нь би өөрөө администратор эрхтэй байсан тул сайн ойлгосонгүй. 🙁 Дараа нь 1200 еврогоор худалдаж авсан (байгууллагаараа авхуулсан 🙂 ) ганц оригинал Microsoft Visual Studio 2003 .NET суулгаад хуучин хийж байсан төслүүдээ импортлож байтал виста гуай таарамжгүй програм (incompartible with vista) байна гээд сонордуулаад олигтой ажиллаж өгдөггүй дээ. 🙁
Ер нь хөгжүүлэгчид, програмистуудад одоохондоо хэрэглэхэд арай л болоогүй нь байгаа илэрхий байлаа. График дүрслэлийн хувьд нилээн сайжирч линукс, макентош маягтай болсон санагдсан. 🙂
Ингээд хуучин XP-тэй хоршуулан хэрэглэдэг байсан дебиан линүкс рүүгээ бүрэн шилжүүлэхээр шулуудлаа. Виндовс XP -г тоглоом (empires) тоглох, outlook, visio, visual studio .net ашиглах гэж л хэрэглэж байсан тул эдгээрийг линукс рүү шилжүүлчихэд л болох гээд байна даа.

За эхлээд дебианаа (testiing, unstable) суулгах гэтэл seagate 500 GB SATA хатуу дискийг таниж чаддаггүй дээ. Ингээд илүү шинэ цөмтэй дебиан пакет хэрэглэдэг түгээлт хайж байгаад ubuntu Feisty Fawn хувилбарыг Linux-Kernel 2.6.20 цөмтэй болохыг мэдээд суулгаж үзлээ. Үнэндээ асуудал гарсангүй. Виндовсоос хурдан суучихлаа. Үнэхээр магтууштай сайжруулалтууд харагдаж байна лээ.
Харин фонт шинэчлэлт хийж байхад алдаа өгч байсныг гараар touch хийж засав. Дараа нь apache, php, opencvs, mono … гээд хэрэглэдэг бүхнээ суулгалаа.
Eclipse суулгаад PHPeclipse плагин суулгасаны дараа файл хадгалаж байхад алдаа өгөөд болсонгүй. GCJ д байгаа юм боловуу гэж бодоод sun JDK суулгав. Хэвээрээ. 🙁 Файл хадгалах биш хадгалах үед вэб шинэчлэлт хийхэд алдаа өгч байж болох юм гэж бодоод PHPEclipse-ийн тохиргоо руу ороод Refresh PHP browser view when opening editor дээр байгаа хирээсийг аваад хаячихлаа. PHP хуудсаа шууд Eclipse дээрээ харж чадахгүй боловч асуудал арилав. 🙂 Тэр ч нэг их хэрэг болдог биш дээ. Ямар ч гэсэн програм хөгжүүлэхэд асуудалгүй болов. Харин OpenOffice build шинээр хийнэ гэдэг том ажилтай болвоо. Учир нь бараг 2 жилийн турш би зав чөлөөндөө ОпенОфисыг монголчилж байсан билээ. Энэ ажилынхаа тухай тусад нь бичиж байх болноо. Хэдэн өдөр зав чөлөөндөө ноцолдож байж хамгийн шинэ хувилбар болох OpenOffice 2.3 -г хөрвүүлээд авлаа. Өөрийн орчуулгаа дутуу чигээр нь энэ хувилбарт нэгтгээд локалчилсан хөрвүүлэлт хийх явцад нэг алдаа гарсан харагдсан. Зав гарахаар янзлахаас.
Өчигдөр харин Outlook дээр байсан бүх имэйлүүдээ (.pst) эмхэлж цэгцлэн evolution рүү оруулах гэтэл заавал Outlook ажиллаж байж янзалдаг юм байна. Виста дээр Outlook суулгаж байгаад экспортлох гэтэл mbox формат байсангүй. Thunderbird суулгаж байгаа бүх имэйлээ импортлолоо. Гэтэл хэл хэдэн удаа аюулгүйн нөөцлөлт хийж байсан тул имэйлүүд өчнөөн олон удаа давхцаад ороод иржээ. Ингээд thunderbird plugin хайж гарлаа. Remove Duplicate Messages 0.1.02 олоод суулгах гэтэл thunderbird-ын 1.6 хүртэл хувилбар дээр л ажиллана гээд суусангүй. Ингээд албан бус хувилбар болох http://bohnfamily.com/xpi/remove_duplicate_messages-0.1.01-mb.xpi -г татаж аваад суулгатал асуудал гарсангүй.
Бүх давхардсан имэйлүүдээ устгалаа. 2003, 2004 онд нийлээд 1200 гариу имэйл хүлээн авсан харагдана лээ. Бодвол хэрэгтэй гээд устгаагүй хэд нь байх даа.

Ингээд Mozilla Thunderbird -ын стандарт хэрэглэгчийн дотор үүссэн лавлахуудаа шууд эволюшны хэрэглэгчийн өгөгдөл хадгалагч лавлах буюу /home/user/.evolution/mail/local руугаа хуулаад оруулаад ирвээ. Визуал Студиогийн оронд Моно суулгасан. Тэгж байгаад VB.NET төслүүдээ оруулж ирэхээс.
За даа тоглоом ч нэг их тоглоод байх биш тэрийг линүкс дээр ажиллуулдаг болгох гэж цаг заваа үрэхээ болъё.
Ингээд цаашид гэртээ зөвхөн линүксээ хэрэглэхээр шийдлээ. Тэртэй тэргүй ажил дээрээ виндовстой зууралддаг юм чинь.