2007-06-27

Windows программчлал цуврал - 1 Registry

Windows программчлалын эхний хичээл. Эмх цэгцгүй эхлэж байгааг уучлаарай. Дараа нь ерөнхийд нь цэгцэлсэн бичлэгүүдийг оруулан засварлах болно.

Windows үйлдэлийн системд Register гэж байдаг. Энэ нь ерөнхийдөө бол Windows ийн ажиллах тохиргооны файл гэж ойлгож болно. Үүнд маш их зүйлс байдаг. Жишээ нь OS ийн Хувилбар, Лицензийн тухай, Мөн дээр нь суулгасан байгаа программууд гэх мэт бүх л мэдээлэлийг хадгалаж байдаг.


Бид энэ том сангийн хаа нэгтэй өөрийн программдаа хэрэгтэй тохиргоо, Нууцлал зэргийг хийж болно.
Гэхдээ Registry ийг нөөцөлдөг харьцуулдаг программууд их байгаа учираас нууцын чухал мэдээлэлийг хадгалах аюултай анхаарах хэрэгтэй.


Visual Basic 6.0 дээрээс Registry рүү бичдэг эргүүлэн уншидаг бяцхан жишээ хийж үзий. Windows ийн Register тэй ажиладаг код байна уу үзий. API Viewer ийг ашиглан хайлт хийв. Анх ачаалсаныхаа дараа File -> Load text file ийг дараж. WIN32API.TXT ийг сонгоно.
Дээрхи хэсгээс хэрэгцээтэй функцүүдээ сонгон Add дээр нь дарж цуглуулана.
Доорхи кодын Зарлалтын хэсэгт бичиж өгнө. Овоо хэд

'**************************************
' WIN32 API аас сонгосон функцүү
' ____Registry засварла
'**************************************

Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _
(ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _
ByVal lpData As String, lpcbData As Long) As Long


Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long


Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long


Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long


Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _
ByVal lpClass As String, ByVal dwOptions As Long, _
ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, _
phkResult As Long, lpdwDisposition As Long) As Long


#If Win32 Then

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const ERROR_SUCCESS = 0&
Public Const REG_SZ = (1)
#End If

Type SECURITY_ATTRIBUTES

nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type Кодын хэсэгт доорхийг хуулан тавина уу.
'**************************************
' Name: ____Registry засварлагч
' Description: Register рүү бичих унших функц
'
' By: Анхбаяр.Л
'
' http://tech-ankhaatk.blogspot.com
'


'
' Registry рүү бичих функц
'
Public Function bSetRegValue(ByVal hKey As Long, _
ByVal lpszSubKey As String, _
ByVal sSetValue As String, _
ByVal sValue As String) As Boolean

On Error Resume Next
Dim phkResult As Long
Dim lResult As Long
Dim SA As SECURITY_ATTRIBUTES
Dim lCreate As Long
RegCreateKeyEx hKey, lpszSubKey, 0, "", _
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
SA, phkResult, lCreate
lResult = RegSetValueEx(phkResult, sSetValue, 0, _
REG_SZ, sValue, CLng(Len(sValue) + 1))
RegCloseKey phkResult
bSetRegValue = (lResult = ERROR_SUCCESS)

End Function
'
' Registry ээс унших функц
'
Public Function bGetRegValue(ByVal hKey As Long, ByVal sKey As String,_
ByVal sSubKey As String) As String


Dim lResult As Long
Dim phkResult As Long
Dim dWReserved As Long
Dim szBuffer As String
Dim lBuffSize As Long
Dim szBuffer2 As String
Dim lBuffSize2 As Long
Dim lIndex As Long
Dim lType As Long
Dim sCompKey As String

lIndex = 0
lResult = RegOpenKeyEx(hKey, sKey, 0, 1, phkResult)


Do While lResult = ERROR_SUCCESS And Not (bFound)
szBuffer = Space(255)
lBuffSize = Len(szBuffer)
szBuffer2 = Space(255)
lBuffSize2 = Len(szBuffer2)
lResult = RegEnumValue(phkResult, lIndex, szBuffer, lBuffSize, dWReserved, lType, szBuffer2, lBuffSize2)


If (lResult = ERROR_SUCCESS) Then
sCompKey = Left(szBuffer, lBuffSize)


If (sCompKey = sSubKey) Then
bGetRegValue = Left(szBuffer2, lBuffSize2 - 1)
End If
End If
lIndex = lIndex + 1

Loop

RegCloseKey phkResult
End Function

2007-03-12

Fedora core 6

Сүүлийн үед OpenSource оор амьсгалаад байгаа. Ажлынхаа PC ны OS ийг солиж орхив. Баахан багцуудыг суулгаад л байлаа. Бүгдийг нь суулгаад ажлынхаа орчиныг бэлдэх гэж баахан мунгинав. Майл клиент, Eclipse, Java .... гээд л ойр зуурын программуудыг тохируулан суулгав. Ер нь их зүгээр юм аа. Таалагдсан шүү.

Миний суулгасан үйлдэлийн систем Fedora Core 6( Zod) гэдэг хувилбар нь. Олон багц сонголгүйгээр шууд байгаагаар нь суулгахад 5 гега орчим болж байна. Дээр нь ажилынхаа файлуудыг хуулаад 10 орчим гега болж байна. 50 гега-г 30, 20 оор нь хувааж суулгах гэж байсанаа мартаад 50 ийгаа тэр чигт нь Fedora-д өгчихсөн. Дараа нь Partition Editor оор тухтайхан засаж авна аа.

Ер нь бол энэ үйлдэлийн систем хуучин ажиллаж байсан XP ээс дутах юм алга.
OpenOffice2.0, Firefox 1.5, GAIM 1.5 (Messenger), мэдээж shell, C ийг янз бүрийн компайлерууд бүгд байна. Java, C дээр код бичдэг эсвэл янз бүрийн вэб хөгжүүлэлт хийдэг хүнд бол тун боломжийг багажуудтай. Хамгийн гол нь янз бүрийн үнэтэй Crackad сан прогамууд гэж байхгүй бүгд л үнэгүй. Бүр заримыг нь кодыг нь татаж авч байгаад өөрийнхөөрөө засаад ашиглаж боломжтой. Монгол хэлээр бичих Windows ийн share луу хандах зэрэгт ямар ч асуудалгүй. Системийн ерөнхий ажиллагаа нь тогтвортой Windows шиг элдэв Virus-д баригдахгүй амар.

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

Боломжтой бол суулгаад ашиглаад үзэхийг зөвлөж байна.

2007-02-12

Хөөрхий програмист

Программ хангамжийн хөгжүүллтэнд доорхи хүмүүсийн үүрэг маш чухал. Хамгийн нарийн эрсдэл ихтэй ажилыг нь хөгжүүлэгч буюу доорхи зурган дээр байгаа developer хийдэг нь үнэн. Хэрвээ менежер (Manager), шалгагч (Tester) нар нь муу бол хамгийн хүнд ачаа нь хөгжүүлэгч д ирнэ. Доорхи зураг эсэргээгээ зурагдах байх.

Хэрвээ дээрхи 2 дүр менежер (Manager), шалгагч (Tester) маань сайн ажиллаад хөгжүүлэгчийн гаргасан алдааг гаргаахгүй агнадаг бол хөгжүүлэгч дээр гол хариуцлага нь ирнэ.


Гэхдээ л код бичих сайхан ажил. Шантрахгүй хичээвэл зурган дээрхи байдалд орохгүй.

2007-02-07

TopCoder ийн тухай

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

Программ хангамжийн загварчлалын уралдаан. Шагнал 700 - 2000$
Программын хөгжүүлэлт хийх уралдаан. Шагнал 500 - 1000$
Программын цогц систем хийх уралдаан. Шагнал 4000-30'000$
Программ шалгах уралдаан. Шагнал 700- 2000$
Дунд сургуулиудын програмчлалын бодлого бодох онлайн тэмцээн. Шагнал Ивээн тэтгэгчээс хамаарна.
Программчлалын марафон уралдаан. Тусгай алгоритим зохиох бодлогууд.

Дээрхи төрлийн бүх тэмцээнүүд нь 7 хоног болгон шинэ шинэ бодлого уралдаанууд зарлагдаж байдаг бөгөөд хэрвээ та бүртгүүлсэн бол таньд энэ талаар майл ирж байх болно.

Эдгээрээс хархад хамгийн өндөр шагналтай нь программын цогц систем хийх уралдаан юм. Үүний талаар өөрийн ойлгосоноо тайлбарлавал. Topcoder сайтаас зарласан программ хийх шаардлагаын хүсэлт нь жишээ нь Агуулахын барааны бүртгэлийн систем. Ашиглах технолог нь ASP.NET 1.1, SQL Server 2000. Гэх мэтээр байдаг бөгөөд 18 наснаас дээш Topcoder сайтанд бүртгүүсэн байх хэрэгтэй гэх мэт шаардлагууд байдаг байна.

Хэрвээ та завтай, хийж чадна гэсэн итгэлтэй бол үзээд алдхад алдах юм байхгүй гэж зөвлөмөөр байна. Мэдээж программ хангамжийн талаар болон Англи хэлний маш их мэдлэг шаардах нь ойлгомжтой.

2007-02-01

Монгол хэлний орчуулагын нээлттэй эх төсөл

Саяхан Очирхуяг ахын гаргасан Монгол хэлний орчуулагын программ хийх ( Эхний ээлжинд Монгол - Япон - Монгол ) саналыг нь дэмжиж түүнд нь би оролцохоор болов. Энэ санаачилагын дагуу өчигдөр sourceforge.net дээр шинээр төсөл бүртгүүлэв.
Төслийн нэр нь
Mongolian Language Translation system
Энэ нээлттэй эх төсөлд оролцох хүсэлтэй хүмүүс
- montrans-users@lists.sourceforge.net
Хөгжүүлэлтэнд оролцох хүсэлтэй хүмүүс
- montrans-developers@lists.sourceforge.net

Дээрхи майлийн листүүд рүү майл бичинэ үү. Хэн ч оролцох боломжтой бөгөөд хэрвээ таньд ямар нэг санал, санаа, зөвлөгөө, бидэнд хэлэх ямар нэг зүйл байвал http://sourceforge.net/tracker/?func=add&group_id=188343&atid=924933
хаягаар орж бичин үлдээж болно.

Жич: Төсөлд оролцохын тулд sourceforge.net сайтанд бүртгүүлэн эрх авсан байх хэрэгтэй.


Одоогоор дөнгөж эхлэж байгаа болхоор дутуу дулимаг зүйл их гарах байх эдгээрийг ойлгон хамтран ажиллахыг хүсэж байна.

2007-01-16

OpenSource төслийн орчуулга

Сүүлийн үед нээлттэй эх төслүүд маш их эрч хүчээ авч байгаа билээ. Эдгээрийн хамгийн мундаг гэсэн хэд нь олон хэлүүд дээр орчуулагдаж байна. Программаа хийчихээд олон хэлээр гаргадаг болгох гэж нэлээд их цаг зарах нь ойлгомжтой. Би өөрөө 2 хэлтэй программ бичих гэж нэлээд их цаг зарцуулаж байсан удаатай.
Гэтэл энэ том асуудалыг сүрхий шийдсэн байх юм. GNU ийн GetText төсөл их боломжийн шийдсэн байна. Хэрвээ та өөрийн программаа олон хэл дээр гаргадаг болгохын хүсвэл зааварын дагуу программынхаа кодыг бага зэрэг засварлаад зааварын дагуу нь ажиллаад байхад таньд нэг .po эсвэл .pot файл үүсгэж авах юм байна. Үүний дараагаар poEdit, poTranslator зэрэт төслийн программуудын тусламжтайгаар дуртай хэлрүүгээ хөрвүүлэн хэлнийхээ санг нэмэж болох нь ээ.

Лавлагаа :
http://en.wikipedia.org/wiki/Gettext
http://www.poedit.org/
http://sourceforge.net/projects/potranslator/
http://sourceforge.net/projects/poedit/
http://www.poedit.org/
http://www.gnu.org/software/gettext/
http://gnuwin32.sourceforge.net/