2010/06/29

Файлын нэрэнд буй тусгай тэмдэгтийг арилгах

detox зэвсгийн тусламжтайгаар файлын нэрэнд байгаа тусгай тэмдэгтийг автоматаар устгаж мөн хоосон зайг доогуур зураасаар орлуулж болдог. Бяцхан чөтгөрийн порт модны sysutils/detox дотор энэ зэсвэг бий. Үбүнтү нөхдүүд бол aptitude install detox гэж суулгаарай.

# cd /usr/ports/sysutils/detox && make install clean

Ингээд одоо файлын нэрэнд байгаа хоосон зайг автоматаар доогуур зураасаар орлуулж, тусгай тэмдэгт байвал уг тэмдэгтийг устгаж болно:

# ls
test öäü !?_test
# detox test\ öäü\ \!\?_test 
# ls
test_oau_test

detox тай холбоотой нэмэлт мэдээллийг detox(1) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

2010/06/26

Суурилсан системийн хямдхан хавтан

Crosspost: http://embeddedsystem-mn.blogspot.com/2010/06/blog-post_29.html

Оюутан байхдаа Үйлдлийн системийн практик хэмээх нэгэн хичээл дээр сууж Motorola 68000 процессортой суурилсан систем (embedded system) програмчлах болов оо. Process scheduler өөрөө зохиох, GPIO (процессорын оролт гаралт) програмчлах гэх мэт зүйл хийх ёстой байлаа. Эхний өдөр яаж том төмөр дээр бичсэн код маань сериал портоор дамжиж суурилсан систем дээр хуулагдаж ажиллаад байгааг ойлгодоггүй, тэгээд суурилсан систем тун сонирхолтой санагдсан тул орой нь гэртээ очоод нэг гэрэлтдэг диод олж аваад сериал портын үзүүр дээр залгаж үзэв. RS232 сериал портын үзүүр -12 болон +12 вольтын хооронд хэлбэлзэж мэдээлэл дамжуулдаг тул юу гэж гэрэлтэх вэ дээ. (Уг нь параллель порт дээр залгасан бол асах байсан хэхэ) Үүнээс хойш суурилсан систем, тэр тусмаа микроконтроллер програмчлал сонирхох болсон билээ. Тухайн үед микроконтроллер програмчлалын/туршилтын хавтан их үнэтэй, над шиг шалдан оюутан худалдан авч чадахааргүй байв. 2005 онд сургуулиа төгсөөд эрдэм шинжилгээний ажилтан болсны дараа анхны цалингаараа Atmel STK500 гэдэг AVR микроконтроллер програмчлагч хавтан 100 еврогоор авч байж билээ. Тэр үеийг бодвол одоо микроконтроллер програмчлая гэвэл хямдхан хавтан байдаг болжээ. Хэрвээ суурилсан систем сонирхдог боловч их хэмжээний мөнгө зарах сонирхолгүй/чадалгүй хүмүүс байвал хэрэг болох болов уу гээд зарим нэгийг нь сонирхуулахаар шийдлээ:

MSP430 LaunchPad
Texas Instruments компани MSP430 хэмээх 16 битийн микроконтроллероо рекламдаж MSP430 LaunchPad гэж туршилтын хавтан хийжээ. 4.30$ -ын үнэтэй (2 пивоны үнэ гэсэн үг). 2 ширхэг микроконтроллер дагалдаж ирнэ. Shipping cost нь буюу тээвэрлэх хөлс нь үнэгүй гэж байгаа.

STM8S Discovery
STMicroelectronics компани STM8S хэмээх 8 битийн микроконтроллероо рекламдаж 10$ -ын үнэтэй STM8S Discovery гэдэг програмчлалын туршилтын хавтан хийжээ.

AVR Butterfly
Atmel компани AVR хэмээх 8 битийн микроконтроллероо рекламдаж AVR Butterfly хэмээх 20$ -ын үнэтэй туршилтын хавтан хийжээ. Эхний хоёр хавтантай харьцуулбал төрөл бүрийн мэдрэгч, LC дэлгэц болон speaker агуулсан учир юм гагнах дургүй хүмүүст хамгийн тохиромжтой. AVR микроконтроллер нь сонирхогчдын дунд хамгийн их тархсан микроконтроллеруудын нэг тул жишээ программ элбэг олддог.

2010/06/25

Үбүнтү/Дэбиан машинуудад ижил програм суулгах

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

За тэгэхээр эхлээд суугдсан пакетуудыг харах тушаал:

# dpkg --get-selections
ack-grep                                        install
acl                                             install
acpi                                            install
acpi-support                                    install
acpid                                           install
addressmanager.app                              install
adduser                                         install
aespipe                                         install
aisleriot                                       install
akonadi-server                                  install
alacarte                                        install
alien                                           install
alsa-base                                       install
alsa-oss                                        deinstall
alsa-source                                     install
alsaplayer-alsa                                 install
alsaplayer-common                               install
alsaplayer-gtk                                  install
anacron                                         install
anki                                            install
[...]

Ингээд дээрх тушаалыг ашиглан зэрэгцүүлэх машин дээрээ эхлээд пакет жагсаалт бэлдэнэ:

# dpkg --get-selections | grep -v deinstall > dpkg-get.txt

Одоо суулгах машин дээрээ файлаа хуулж тавиад дараах тушаалаар суулгана:

# dpkg --clear-selections
# cat dpkg-get.txt | dpkg --set-selections
# apt-get dselect-upgrade

Хэрэв эхний машины /etc/sources.list файл нь хоёр дахь машиныхтай зөрүүтэй бол адил болгох хэрэгтэйг анхаараарай.

Дагалдаж суух портыг хэрэглэгч өөрөө бэлдэх

wanted-ports-н тусламжтайгаар хэрэглэгч өөрөө зааж өгч болохоор дагалдаж суугдах мета-порт бэлтгэж болдог. Бяцхан чөтгөрийн порт модны ports-mgmt/wanted-ports мөчирт wanted-ports олдоно:

# cd /usr/ports/ports-mgmt/wanted-ports && make install clean

Анхны удаад wanted-ports ийг ажиллуулбал тохируулгын файл бэлтгэгддэг:

# wanted-ports
wanted-ports: WARNING -- no config file found,  creating initial /var/db/wanted-ports.conf

гэсэн сонголтоор wanted-ports-н дагалдаж суух порт болгож заасан портыг нэмнэ:

# wanted-ports -a www/apache20
wanted-ports: Register new dependency "apache>=2.0.63_15:${PORTSDIR}/www/apache20"?  y

Дээрх жишээний дагуу apache20 портыг дагалдаж суух порт болгож заасны дараа wanted-ports ийг дахин суулгах юм бол apache20 дагаж суудаг:

# cd /usr/ports/ports-mgmt/wanted-ports && make missing
www/apache20
devel/apr0
archivers/xz

Дагалдаж суух портыг -d сонголтоор болиулна:

# wanted-ports -d www/apache20
wanted-ports: Delete dependency "apache>=2.0.63_15:${PORTSDIR}/www/apache20"?  y

Ингээд хүссэн бүх портоо нэмсэний дараа /var/db/wanted-ports.conf файлыг өөр машин уруу зөөж тэндээ wanted-ports ийг суулгах аваас уг заасан портууд бүгд автоматаар суугдах болно. Цаашлах юм бол, wanted-ports портыг "pkg_delete(1)" тушаалаар хүссэн портоо устгагдахаас сэргийлсэн хамгаалалт болгож хэрэглэх боломжтой билээ:

# pkg_delete swaks-\*
# wanted-ports -a mail/swaks
wanted-ports: Register new dependency "swaks>=20100211.0:${PORTSDIR}/mail/swaks"?  y
# cd /usr/ports/ports-mgmt/wanted-ports && make deinstall install clean
# pkg_delete swaks-\*
pkg_delete: package 'swaks-20100211.0' is required by these other packages
and may not be deinstalled:
wanted-ports-0.1_1

wanted-ports тай холбоотой нэмэлт мэдээллийг wanted-ports(1) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

2010/06/24

Хоолойгоор урсах өгөгдлийг AES түлхүүрээр цоожлох

aespipe зэвсгийн тусламжтайгаар стандарт оролт/гаралтанд байгаа өгөгдлийг AES-р түлхүүрдэж нууцлалтай хувиргалт хийж болдог. Бяцхан чөтгөр дээр aespipe нь порт модны security/aespipe мөчирт бий (үбүнтү нөхдүүд бол aptitude install aespipe ).

# cd /usr/ports/security/aespipe && make install clean

Ингээд стандарт оролт дээрх юмуу жишээ нь хоолой дундуур урсаж байгаа өгөгдлийг aespipe уруу өгөхөд хувиргагдсан өгөгдөл нь стандарт гаралтаар гарч ирнэ. Танаас түлхүүрдэж хувиргах нууц үгийг асуусны дараа өгөгдлийг хувиргадаг:

# file testdatei
testdatei: PDF document, version 1.4
# cat testdatei | aespipe > testdatei.enc
Password: *******************
# file testdatei.enc 
testdatei.enc: data

Тушаалыг -d сонголттой гүйцэтгэснээр өгөгдлийг нууц хувиргалтаас тайлах болно:

# cat testdatei.enc | aespipe -d > testdatei
Password: *******************
# file testdatei
testdatei: PDF document, version 1.4

aespipe-тай холбоотой нэмэлт мэдээллийг aespipe(1) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

Хэрэглэгдэхгүй болсон дагавар портын устгал

portmaster тушаалыг -s сонголттой гүйцэтгэвэл суугдсан порт дундаас дагалдаж хамааралтай гэж суугдсан мөртлөө хэрэглэгдэхгүй болсон портуудыг устгаж болдог:

# portmaster -s
Information for sdocbook-xml-1.1,1:

Comment:
"Simplified" DocBook XML DTD

Description:
The "Simplified" DocBook XML DTD is a small subset of the DocBook XML DTD.

WWW: http://www.oasis-open.org/docbook/xml/simple/

===>>> sdocbook-xml-1.1,1 is no longer depended on, delete? y/n [n] y
===>>> Delete old and new distfiles for textproc/sdocbook-xml
       without prompting? y/n [n] y
===>>> Deleting stale distfile: docbook-xsl-1.75.2.tar.bz2
===>>> Deleting stale distfile: docbook-xsl-doc-1.75.2.tar.bz2
===>>> Running pkg_delete -f sdocbook-xml-1.1,1
xmlcatmgr: enabling compatibility mode; removing ALL matching entries
xmlcatmgr: enabling compatibility mode; removing ALL matching entries
Information for compat5x-i386-5.4.0.8_11:

Comment:
A convenience package to install the compat5x libraries

Description:
This package allows you to install the compat5x libraries on your
system, so you can use legacy binaries that depend on them.

Ports usage example:

--
.include <bsd.port.pre.mk>

.if ${OSVERSION} >= 600000
LIB_DEPENDS+=   c.5:${PORTSDIR}/misc/compat5x
.endif
--

===>>> compat5x-i386-5.4.0.8_11 is no longer depended on, delete? y/n [n] y
===>>> Delete old and new distfiles for misc/compat5x
       without prompting? y/n [n] y
===>>> Running pkg_delete -f compat5x-i386-5.4.0.8_11
Information for localedata-5.4:

Comment:
Legacy locale data for FreeBSD 6+

Description:
This package provides compatibility locale data for FreeBSD 6.x to run
4.x/5.x binaries. When you have a trouble with locale at running a legacy
binary, you should guide them to find legacy locale data with setting
PATH_LOCALE environment variable.

env PATH_LOCALE=/usr/local/share/compat/locale command

===>>> localedata-5.4 is no longer depended on, delete? y/n [n] y
===>>> Delete old and new distfiles for misc/localedata
       without prompting? y/n [n] y
===>>> Running pkg_delete -f localedata-5.4
[...]

portmaster-тай холбоотой нэмэлт мэдээллийг portmaster(8) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

Дагалдаж суугдаагүй портын жагсаалт үүсгэх

portmaster тушаалыг –list-origins сонголттой гүйцэтгэвээс суугдсан бүх портын жагсаалтаас дагавар хамааралтай гэж суугдсан портуудыг нь хасаж харуулдаг. Энэ жагсаалтын тусламжтайгаар ижил порт суугдсан систем бэлтгэж болох юм.

# portmaster --list-origins
www/piwik
ports-mgmt/portmaster
lang/python25
archivers/unzip
www/dokuwiki
www/eaccelerator
www/fluxcms
www/mod_security
security/php-suhosin
mail/squirrelmail

portmaster-тай холбоотой нэмэлт мэдээллийг portmaster(8) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

2010/06/23

Subversion архиваас хуулбар хийх

Subversion архивыг заавал ч үгүй тусгай эрх шаардагддаг svnadmin dump тушаал ашиглах боломжгүй үед rsvndump зэвсгийн тусламжтайгаар энгийн хэрэглэгчийн эрхээр үүсгэж болдог. Бяцхан чөтгөр дээр порт модны devel/rsvndump мөчирт rsvndump олддог:

# cd /usr/ports/devel/rsvndump && make install clean

Ингээд архивлах Subversion хаягаа rsvndump-д өгч болно. Хэрэв архив луу нэвтрэлт хийх ёстой бол -u болон -p сонголт өгснөөр хэрэглэгчийн нэр болон нууц үгээ дагуулж өгөх боломжтой.

# rsvndump https://trillian.chruetertee.ch/svn/freebsd-gecko > freebsd-gecko-svn.dump
* Dumped revision 0.
* Dumped revision 1.
[...]
* Dumped revision 317.

Одоо svnadmin load тушаалын тусламжтайгаар архиваа өөр газарт уншуулан зөөж болно:

# svnadmin create freebsd-gecko
# svnadmin load freebsd-gecko < freebsd-gecko-svn.dump
<<< Started new transaction, based on original revision 1
     * adding path : trunk ... done.
     * adding path : branches ... done.
     * adding path : tags ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * adding path : trunk/www ... done.
     * adding path : trunk/Mk ... done.

------- Committed revision 2 >>>

<<< Started new transaction, based on original revision 3
     * adding path : trunk/www/firefox ... done.
     * adding path : trunk/www/firefox/distinfo ... done.
     * adding path : trunk/www/firefox/pkg-descr ... done.
     * adding path : trunk/www/firefox/files ... done.
     * adding path : trunk/www/firefox/files/patch-xptcall-sparc64 ... done.
     * adding path : trunk/www/firefox/files/patch-ff-414540 ... done.
     * adding path : trunk/www/firefox/files/patch-xptcall-alpha ... done.
     * adding path : trunk/www/firefox/files/patch-ff-460425 ... done.
     * adding path : trunk/www/firefox/files/patch-ff-331088 ... done.
     * adding path : trunk/www/firefox/files/patch-ff-380418 ... done.
[...]

rsvndump-тай холбоотой нэмэлт мэдээллийг rsvndump(1) МАН хуудаснаас нь олж уншаарай.

Орчуулгын эх хуудас нь: http://www.chruetertee.ch/blog/

2010/06/22

chruetertee.ch

Бяцхан чөтгөр дээр суулгаж болдог хорин хоёр мянга гаруй порт програмууд бий. Гарчиг дээрх хаягийг хөтөлдөг нөхөр бол энэ порт цуглуулганд хоёр порт нэмэрлэсэн эр. Энэ их порт дундаас ямар нь хэрэгтэй, юунд хэрэгтэй, яаж хэрэглэх гээд төөрч будилах зөндөө л нөхцөл үүснэ дээ. Гэтэл энэ нөхөр тэр дундуур сайн жаалдаг байгаа юм. Долоо хоног тутамд сонирхолтой портуудаас түүж тайлбарлан жишээ авч заана. Миний хувьд энэ хуудас бол байнга шалгаж сонирхдог хуудасны минь нэг мөн билээ. "Үүнийг сонирхдог монгол хүн ойлгож уншдаг бол…" гэсэн бодол толгойд байнга орж ирдэг байсан тул бараг долоо хоногийн өмнө орчуулж тавих зөвшөөрөл хүссэн захидал илгээсэн юм. Ингээд өчигдөр хариу иржээ. Мэдээж чадалтай хүний өгөөмөр захидал байж таараа. "Орчуулгандаа вэб хуудасны минь хаягийг оруулсан байвал баярлана шүү" гэсэн хүсэлтийг нь мэдээж баяртай биелүүлэх болно. Герман хэл сонирхдог нь эх хуудаснаас нь уншсан нь дээр л дээ. Ямартаа ч, бяцхан чөтгөртэй болон юникстэй нөхөрлөдөг хүмүүсд сонирхуулах зөндөө их мэдээлэлтэй болсондоо би баяртай байна.

Beat, vielen herzlichen Dank!

2010/06/17

Гар тулаан

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

Дворак Квэрти хоёрыг байн байн сэлгэж хэрэглэх гэсний хэрэггүй. Дворакт нэг орсон хүн хэзээ ч квэртигээр цохидоггүй. Ялан дийлэгч болсон хүн чинь ялагдсан тал уруу юу боллоо гэж орохыг хүсэх юм бэ? Хаана ч очсон гараа дворак тулаанд бэлдэж болдог болсон цаг (Алим, Оцон шувуу, Бүндөүс бүгдэд нь суугдсан байгаа. ANSI стандартчлагдсан цохилт учраас тэр шүү дээ ).

Дворак дээр дасгал хиймээр бол ядаж нэг цаг зөвхөн дворак цохилт хийх ёстой бөгөөд дунд нь байнга амрах хэрэгтэй. Ингэх үедээ хоёр зүйлийг анхаарах хэрэгтэй. Хурдны дасгал хийж байгаа бол оновчтой байх алба үгүй. Эсрэгээр, оновчтой байх дасгал хийж байгаа бол заавал хурдтай байх хэрэггүй. Үүнийг маш сайн анхаарах хэрэгтэй.

За ингээд уран зөгнөлийн цэнэг дууссан тул энгийн үгээр үргэлжлүүлэхээс дээ. Дворак гарын бүтцийг жаахан ноцтой харъя. Хамгийн их өргөн тархсан байрлал нь Dvorak simplified. Гэхдээ бусдаасаа ердөө нэг хоёр товчоор л ялгаатай учраас алийг нь ч хэрэглэсэн болно. Гар дээрх товчлууруудын голын эгнээг Дворак дээр гэр эгнээ гэж нэрлэдэг. Энэ мөрөнд өнөөх алдартай далан хувийн товчнууд оршиж байдаг байна. Зүүн гар талд эгшиг, баруун гар талд гийгүүлэгчид. Онцгой тэмдэгтүүд хоёр гарын дээд болон доод захад байрлана. Хамгийн их ордог эгшиг болон гийгүүлэгчид нь гэр эгнээний голд, хоёр дахь их давтамжтай гийгүүлэгчид нь баруун талын дээд гол хэсэгт байрладаг. Үг болгонд эгшиг ордог учраас бичих үед хоёр гар заавал оролцдог нь маш сайны шинж. Гэтэл Квэрти дээр гэр эгнээнд нь ердөө ганцхан эгшиг бий гээд боддоо (их ухаалаг шийдсэн байгаа биз?). Дворак дээр үнэхээр бичих текстийн дал орчим хувийг гэр эгнээнээс цохидог. Хуруунууд бараг ийш тийш сарвалзахгүйгээр нэг эгнээнээс л пижигнүүлээд байна гэсэн үг шүү дээ. Гар луугаа харж цохидог хүн байвал энэ хуудсыг хэвлэж аваад хайчлаад нааж бас хичээллэж ч болно.

Квэрти болон Дворак цохилт яаж үүсээд хэрхэн тархсан тухай зургаар илэрхийлсэн энэ цомгийг сөхөөд заавал нэг үзээрэй. Шинэ гарч ирсэн ерөнхийлөгч Обамад хүртэл улс даяар дворак хэрэглүүлэх санал тавих талаар өгүүлсэн энэ нийтлэлийг уншаад үзэхэд бас сонирхолтой. Дворак ертөнцөд энэ хүний нөлөө их.

Юникс ертөнц дээр амьдардаг хүмүүс гарыг солихдоо X сервер ажиллаж байгаа бол:

setxkbmap dvorak
X сервергүй тэрминал дээр бол:
loadkeys dvorak
буцаахаар бол:
setxkbmap us
loadkeys us
Хэрэв зөвхөн эмаксийн нэг буфер дээр хичээллэмээр байгаа бол:
Ctrl-\ english-dvorak 
гээд энтер дарахад зөвхөн уг буфер дээр гарын байрлал дворак болох болно.

Ингээд цохиод байж дээ!

2010/06/14

Нууц л бол нууц

Самуурахаар олон мэдээлэл дунд санаж байх зориулалтаар howto-XXX гэсэн баахан файлыг энд байрлуулж байсан тухай өмнө нь энд үнсэх тэрлэл дээр сараачиж байсан даа. Тэнд нууцлалтай холбоотой хоёр төрлийн заавар хадгалагдсан байгаа юм. Нэг нь openssl, нөгөөх нь gpg ашиглах тухай. Гэлээ ч, үнэхээр чухал бичиг баримтаа нууцлах үед энэ хоёр заавраа өмнөө дэлгэж байгаад аль нэгийг нь сонгодог байв. Нууцалчихаад нууцлаагүй хувилбараа бас устгана. Устгахгүй мартаад орхичихвол урвагч болоод явчихна даа. За ямар ч байсан нэг шувуу нэг сүвлэдэг төмөр олоод далд оруулах газраа олж ядна гэсэн утга бүхий ардын үг байдаг даа, тэрүүн шиг нэг хүн муулж бичсэн файлаа далд нууцлах гэж жижигхэн төвөг болдог байв.

Гэхдээ бас нэг арга бий ажээ. Тэр нь gpg ашигласан эмаксийн нэг горим. Нэр нь EasyPG. Хувилбар 23 аас эхлээд өөрт нь агуулагдсан байдаг юм байна. Хамгийн сайхан нь нууцлах файлынхаа толгойд ганцхан мөр оруулаад л болох нь тэр:


"my_key_email@foo.org" ийн оронд өөрийнхөө gpg дээр үүсгэсэн түлхүүрийнхээ нэрийг өгөөд л болно.

Ингээд та файлаа бичиж дуусаад хадгалаад (*.gpg өргөтгөлтэй) хаах юм бол уг файл тань gpg дээрх таны түлхүүрээр нууцлалын хувиргалт хийгээд дискэн дээр хадгалагдчихна. Эмаксаар буцаагаад нээхээр танаас буцааж хөрвүүлэх түлхүүрийн тань нууц үгийг асуугаад энгийн файл шиг өмнө тань дэлгэж харуулах бөгөөд энэ нь тухайн үедээ санах ойд л задаргаатай байх юм. Хм,, тэгэхээр буузанд байгаа нууц мөнгийг ууцанд байгаа нууц цүүгээр олох нь дээ.. Мөн шавж өгвөө :)

2010/06/10

Сериал портоор файл солилцох

Crosspost: http://embeddedsystem-mn.blogspot.com/2010/06/blog-post.html

Сүүлийн хэдэн хоног хамаг цагаа оцон шувуу үйлдлийн системтэй Artila PAC-5010 хэмээх ARM9 эмбэддэд хавтантай ноцолдож өнгөрөөв. Сэриал портоор (монголчууд COM порт гэж яриад заншсан болохоос биш жинхэнэ нэр нь UART/RS232 юм) холбогдоод шууд бүрхүүл рүү нь хандаж болдог аж. Ингэж холбогдон хавтангаа тохируулах явцад өөрийн төмрөөс хэдэн ширхэг файл хавтан уруугаа хуулах хэрэгтэй болов. Энэ тохиолдолд хамгийн амархан арга нь хавтангаа сүлжээнд холбоод FTP/SSH ашиглан хуулах юм. Харамсалтай нь ойр хавьд илүү switch байгаагүй тул сэриал портоор файлаа зөөхөөс өөр аргагүйд хүрэв. Ингээд Гүүгл ахаас асуугаад kermit гэж програм байдгийг мэдэж авлаа. Энэ програмыг 80 аад оны дундуур хоорондоо хол орших төмрүүдийг утасны сүлжээ ашиглан модемоор холбож хоорондоо файл солилцоход ашигладаг байжээ. Одоо бол эмбэддэд систэм уруу сэриал портоор файл солилцоход л ашигладаг юм байна. За ингээд kermit ашиглан хэрхэн файл хуулах талаар бичье: Эхлээд хэрэглэгчийн үндсэн хавтас дотор (эмбэддэд хавтан болон өөрийн төмөр дээр тус тус) .kermrc файл үүсгээд доорх текстийг хуулаад хадгалаарай.

set line /dev/ttyS0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
Эхний мөр нь ямар сэриал порт ашиглан холбогдох вэ гэдгийг заана. Би эмбэддэд хавтан дээрээ /dev/ttyS0 ыг харин төмөр дээрээ USB2Serial хувиргагч ашигласан тул /dev/ttyUSB0 гэж тус тус бичсэн. Бусад мөрүүдийг өөрчлөх хэрэггүй. Эмбэддэд хавтангийн бүрхүүл дээр kermit -r гэж бичсэний дараа KERMIT READY TO RECEIVE... гэж гарч ирэнгүүт тэрминал программаа хаагаарай (тэрминал программаа хаахгүй бол сэриал порт чинь чөлөөлөгдөхгүй). Одоо төмөр дээрээ kermit -s filename гэж бичвэл файл тань хавтан руу хуулагдаж эхэлнэ.

Чөтгөрийн зүрхэнд хүрэх замд ...

За надад бол мэргэн цоохор, бусдад бол эрээн цоохор байж болох нэг юм энд сараачаад орхие.

FreeBSD үйлдлийн системийг үүнээс хойш чөтгөр гэж нэрлэе.

За тэгэхээр чөтгөрийн цөмийн эх код нь /usr/src/sys санд байдаг. Цөмийн эх кодоос хайлт хийхдээ хэд хэдэн аргаар хайж болно. Жишээ нь:

find /usr/src/sys -name "*.c"|xargs grep -i 'sockbuf_waste_factor'
grep -R 'sockbuf_waste_factor' /usr/src/sys/*

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

Хэрэглэгчийн талбарын програм цөмийн хамгаалагдсан эсвэл хамгаалагдаагүй хэсгээс хувьсагч эсвэл утга шууд авах бол sysctl(3) эсвэл kvm(3) интерфэйс ашиглана. Өөрөөр хэлбэл цөмийн хамгаалагдсан өгөгдлийн бүтцийн хувьсагч руу шууд хандаж утга авч болохгүй гэсэн үг юм. Цөм нь хэрэглэгчийн талбараас авч болох утгыг SYSCTL макронууд ашиглан хэрэглэгчийн талбараас авч болохоор гаргаж болно. Мөн цөмийн талбарт програм бичих эсвэл өөрчлөлт хийх, жишээ нь тогтмолууд нэмэх зэрэг зүйлс хийх бол ABI буюу application binary interface болон зохих дүрэм журмыг харгалзан үзэх ёстой.

Цөмийн өгөгдлийн бүтцийг шууд тэр чигээр нь хэрэглэгчийн талбар руу авч болохоор хийж болохгүй. Өөрөөр хэлбэл тийм өгөгдлийн бүтцэд заагч эсвэл тогтмол массив зэргийг зарлаж болохгүй юм. Нэг шалтгаан нь заагч нь 64 бит болон 32 битийн систем дээр хэмжээ нь өөр байдаг явдал юм. Мөн ингэж зарласан тохиолдолд цөмийн хувьсагч руу хэрэглэгчийн програм шууд хандаж цөмийг сүйрүүлэх боломжтой болох юм. Цөмийн заагч болон өгөгдлийн бүтцийг хэрэглэгчийн талбарт шууд авах боломжтойгоор хийх нь ABI-г зөрчиж байгаа явдал юм.

Мөн хэрэглэгчийн санах ойгоос өгөгдлийн бүтэц авах эсвэл хэрэглэгчийн санах ой руу өгөгдлийн бүтэц хуулах бол тийм өгөгдлийн бүтэц дотор аль болох заагч хэрэглэхгүй байх хэрэгтэй. Учир нь цөмийн талбарын заагчийн хэмжээ хэрэглэгчийн талбарын заагчийн хэмжээнээс өөр байх боломжтой. Ингэж өөр байх тохиолдолд 32-бит/64-битийн compat shim-үүд буюу таарамжтай нийцтэй байлгах тохиргоонууд хэрэгтэй болно.

Цөмийн талбарын програмд хувьсагч зарлахдаа санах ойд аль болох бага зай эзлэхээр зарлаж өгөх хэрэгтэй. Жишээ нь:


гэсэн өгөгдлийн бүтэц байя гэж бодоё. Энэ бүтцийг ашиглах үндсэн програмд struct ipfw_port_table_entry *ent гэж зарлан санах ойн талбарт зай гарган өгвөл энэ хувьсагч нь 64 битийн систем дээрх заагчийн хэмжээтэй адил санах ойн хэмжээ эзлэх болно.

64 бит архитектурын гол дутагдал нь 32 битийн архитектуртай харьцуулбал өгөгдөл нь санах ойд 32 битийнхээс илүү хэмжээний зай эзэлдэг (заагчийн хэмжээ, бусад төрлүүд болон тэдгээрийг зэрэгцүүлж адил болгох гэснээс болоод). Ингэснээр өгөгдсөн процессийн санах ойн шаардлагыг ихэсгэж процессорын кэшийн хэрэглээг үр ашигтай ашиглахад сөрөг нөлөө үзүүлж болзошгүй юм.

Цөмийн өгөгдлийн бүтцийг (жишээ нь struct дотор struct байхад тус тусад нь санах ойн талбар зааж өгөхөд санах ойн зайны хувьд үр ашиггүй ашиглагдахаас гадна заагчтай ажиллахад төвөгтэй болно) аль болох цугт нь бүтнээр нь allocate хийх буюу санах ойн талбар зааж өгөх хэрэгтэй. Цугт нь санах ойн талбар хуваарилан зааж өгвөл санах ойн кэшийг үр дүнтэй ашиглахаас гадна өгөгдлийн бүтцийг унших үеийн эзлэх зайг багасгана.

Мөн өгөгдлийн бүтцүүдийг тодорхойлох бэлэн аргууд байдаг, бүх төрлийн list-үүд, queue, hash зэрэг өгөгдлийн бүтцүүдтэй ажиллах макронууд sys/queue.h толгой файлд заагдсан байдаг бөгөөд queue(3) гарын авлагаас уншиж болно.

Бичсэн кодоо style(9)-д дурдсан загварын дагуу хэлбэржүүлэх ёстойг бас мартаж болохгүй юм.

2010/06/07

Чанга бодох

Урьд нь би анх програм бичих дадлагаар нэг байгууллага дээр жил гаран ажиллахдаа нэгэн үзээгүй үзэгдэлтэйгээ учирсан юм. Тэр нь чангаар бодох. Намайг хийх юмаа чадахгүй байгааг минь дааж авсан хүн маань анзаараад нэг өдөр намайг хажуудаа суулгаж байгаад хэрхэн програмчлахыг харуулсан юм. Тэгэхдээ бүх юмыг эхнээс нь эхлээд бичиж эхэлсэн бөгөөд надад тайлбарлаж ярилгүй зөвхөн өөрөө өөртэйгөө ярьж байгаа юм шиг бодлоо чангаар ярьж бичиж үзүүлэв. Нүдний минь өмнө босоод ирж байгаа тэр програм, нөхрийн бодож байгаа бодол хоёр намайг зүгээр л хүлчихсэн мэт хөдөлгөөнгүй хөшиж билээ.

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

За ямар ч байсан энэ чигээрээ мацаад байвал нохойн дуу ойртож л байна. Бичиж эхлэнэ шүү дээ. Гарын байрлал юу ч гэсэн эмакс дээр бэлдэж авна. Энүүн дээрх сэтгэгдлийн талбай дээр хүүтэй мэтгэлцэж байхдаа түрэгүүдийн бэлдэж авсан гарын байрлал нь дэлхийн хурдан бичлэгийн уралдаанд 14 удаагийн дээд амжилт эвдсэн гэдгийг уншсанаар миний dvorak гарын байрлал уруу орох зам минь эхэлсэн бил ээ. Түрэгүүдийн гарын байрлал нь дворак байрлал дээр үндэслэсэн гэсэн магадлалтай бөгөөд түрэг хэлний шинж чанарыг судлан мөн гарын хурууны үе мөч, шөрмөсний таталцлыг судалсны үр дүнд бүтээсэн гарын байрлал юм. Жинхэнэ улс гэгч нь эх орныхоо хүүхдүүдэд харийн тоглоомоор тоглуулахдаа эх хэл, соёлоо харгалзан үзэж судалж байж тоглуулдагийн сонгодог жишээ энэ бус уу? Үсэгнүүдээ 49 болон 51 хувийн ачааллаар зүүн болон баруун гарт оноож өгсөн нь дворак гарын байрлал бүтээх таван дүрэмнээс зарчмын хувьд нэг их зөрөөгүй мэт. Хүүтэй маргалдаж байхдаа нэг зүйлийг би ухаарсан. Одоо байгаа байрлалууд монгол хүнд зориулсан гарын хуваарилалт биш. Бид зөвхөн том нөлөөтэй улсын л шахсан хоолыг идэж байна. Гарч байгаа ялгадас нь одоогийн улсын минь энэ байдал. Уншигч авхай миний үгнээс улс төрийн бухимдлын үгс холилдож байгаад дургүйцэж магадгүй. Гэхдээ үр хүүхдийнхээ ирээдүй гэж улсаа харахаар ийм байдалд орохоос өөр арга үгүй болдог юм байна. За жолоог зөв зам уруугаа залъя. Бид ямар ч байсан өөрсдийн хэлээ сайн судалж байж товчлуурын хуваарилалт бүтээх ёстой.

Хэл шинжлэлийн зэвсгүүд ашиглаж байгаад хэлэнд их давтагдсан хоёрлосон болон гуравласан эгшиг, үе, гийгүүлэгч, үг гэх мэтийн судалгааг харгалзан үзэж гарын хуваарилалт бүтээж болно. Ингэхийн тулд корпора буюу судлагдах их хэмжээний текст материал бэлдсэн байх шаардлага гардаг. Би энэ тэрлэлийг монгол бичгээрээ бичдэг болтлоо кирил үсэг хэрэглэх бөгөөд удахгүй солигдохын хооронд кирил бичигт тийм судалгаа хийж цаг заваа үрмээргүй байна. Одоогийн дворак байрлалыг латин үсгэнд хэрэглэж, эх монгол бичигтээ цоо шинэ дворак байрлал бүтээхийг хүснэм. Социйн үеийн бичээчдийн гарын хуваарилалт дээр дадлагажиж кирилээр бичиж сурсан ч юмыг гээх амархан шүү дээ!

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

За тэгээд бэлэн текст одоогоор бидэнд бий бил үү? Байгаа бол тэр нь юникод стандартад заасан тэмдэгтийг ашигласан уу? гэсэн асуултууд хөвөрсөөр. Сүүл орхиц болон нэр үгэнд залгагдах дагаваруудын дунд нь заагладаг тэмдэгтүүд хуруунд илүү ойр байх ёстой ч юм шиг.

Одоогоор байгаагаас гурван гарын байрлалыг би оллоо. Надад гурвуулаа санаанд минь хүрсэнгүй. Эхнийх нь өвөр монголд хэрэглэгдэж байгаа гарын байрлал:

Энэ байрлал нь бараг л латин хуваарилалтыг шууд ашигласан байгаа юм. Тийм болохоор миний хүссэн гарын хуваарилалт биш. Удаах нь Бадрал нөхрийн опенофисд хэрэглэгдэх гарын байрлал:

Бас л өвөр монгол байрлалтай ойролцоо. Нөгөө миний дурдаад байсан онцгой тэмдгүүд харин өөр өөр газар зоогдсон байгааг хоёр гарын байрлалаас ялгаж харж байгаа биз дээ. Ингээд би энэ байрлалыг бас л сонгохыг хүссэнгүй. Адаг сүүлд нь VirtualNodepad хэмээх бүндөүс дээр монгол бичгээр бичиж болдог програмын гарын хуваарилалт:

Энэ хуваарилалтанд нэг содон ялгаа бий. Латин хуваарилалтыг биш харин кирил монгол хуваарилалтыг ашигласан байгаа юм. Энүүн дээр би илүү хурдан бичих магадлалтай боловч энэ хуваарилалтыг хэрэглэхгүй болох шалтгааныг минь та дээд хэсэгт уншсан даа.

Бас нэг сонирхолтой анзаарагдсан зүйл гэвэл энэ гурван зургийн файлуудыг нэрлэсэн нэрүүд юм. uighur.jpg, KeyMonScr1.png, hudammon.jpg. Өвөр монголын гарын хуваарилалтыг герман нөхрийн вэбээс олсон санагдаж байна, тийм болохоор uighur гэж нэрлэсэнг тэгсгээд өнгөрөөчихөе. Бадрал нөхөр Монгол Скрипт нэрийг сонгож. Бүндөүс нөхдүүд худам монгол нэрийг сонгосон байх юм. Гэтэл би гэж бас нэг юм зохиоё гээд галзуураад байдаг. Бадрал нөхрийн нэр сонголт илүү оносон гэж би бодож байна. За тэгж байгаад нэр ороод ирэх байх аа. Файлын л нэр шүү дээ ямар сүртэй юм гэж та бодож байна уу? Харин тийм ээ, би ч гэсэн бас тэгж бодож байна :)