Tag Archives: code

Սկսվում է Google Summer of Code 2012-ը

Հարգելի coder-ներ/ծրագրորդներ/ծրագրավորողներ/software_engineer-ներ: Մեկնարկում է Google Summer of Code 2012-ը: Նրանց համար, ովքեր տեղյաք չեն այս ամենամյա հիանալի իրադարձության մասին, մի փոքր ծանուցում.

Google Summer of Code-ը կրթաթոշակներ է տրամադրում երիտասարդներին, ազատ կոդով պրոյեկտների համար ամառվա ընթացքում աշխատելու դիմաց: Շատ հայտնի ազատ կոդով ծրագրային ապահովում մշակող ընկերություններ (Red Hat, Fedora, GNU և այլն) հրապարակում են իրենց նախագծերը, որից հետո ընդունվում են դիմումներ ուսանողների կողմից, և ընդունված դիմումների տեր ուսանողները ողջ ամառվա ընթացքում աշխատում են նախագծերի հետ կապված առաջադրանքների վրա: Իրենց գործը հաջողությամբ ավարտած ուսանողները Google-ի կողմից արժանանում են $5000 արժողությամբ չեկի:

Google Summer of Code 2012-ի ժամանակացույցը
Փետրվարի 4 — GSoC-ի մեկնարկ
Մարտի 9 — Մարտի 12 — Հետաքրքրված կազմակերպությունները առաջարկում են իրենց նախագծերը
Մարտի 16 — Կազմակերպությունների ցուցակը հրապարակվում է GSoC-ի պաշտոնական կայքում
Մարտի 17 — Մարտի 25 — Հետաքրքրված ուսանողները քննարկում են նախագծերը կազմակերպությունների հետ
Մարտի 26 — Ապրիլի 6 — Ընդունվում են ուսանողների դիմումները
Ապրիլի 23 — Ուսանողների դիմումների ընդունում/մերժում
Մայիսի 21 — Օգոստոսի 27 — Ուսանողներն աշխատում են իրենց նախագծերի վրա
Օգոստոսի 27 — Արդյունքների ամփոփում

Ծրագրին ավելի մանրամասն ծանոթանալու և ավելի մանրամասն ժամանակացույցը ստանալու համար այցելեք ծրագրի պաշտոնական կայքը: Գրանցվե՛ք, մասնակցե՛ք, ձեռք բերեք ոլորտի առաջատարների հետ շփման փորձ, հաստատե՛ք գործնական կապեր… Բոլոր դիմողներին մաղթում եմ հաջողություն:

Advertisements

Թողնել մեկնաբանություն

Filed under Համալսարանական, Իրադարձություններ

Նարնջագույն և Կապույտ ռոբոտների խնդիրը

Այս ծրագրավորման խնդիրն առաջարկվել է Google Code Jams օնլայն ծրագրավորման մրցությի սահմաններում որպես որակավորման փուլի խնդիր: Խնդիրը բավականին զվարճալի է և հետաքրքիր, ուստի առաջարկում եմ, որ դուք ևս լուծեք:

portal-2-co-op

Չար Արհեստական Ինտելեկտը փակել է կապույտ և նարնջագույն ռոբոտներին տեստավորման սենյակում: Ռոբոտներից ամեն մեկը կանգնած է միջանցքում, որտեղ ամեն մետրի վրա տեղադրված է մի մեծ կոճակ՝ յուրաքանչյուր միջանցքում ընդհամենը 100 կոճակ {1, 2, … 100}: Ժամանակի 0 պահին երկու ռոբոտն էլ կանգնած են իրենց միջանցքների 1 համարի կոճակի մոտ: 1 վայրկյանի ընթացքում ռոբոտներից ամեն մեկը կարող է անել հետևյալ քայլերից մեկը՝
1. տեղափոխվել մեկ մետր առաջ
2. տեղափոխվել մեկ մետր ետ
3. սեղմել այն կոճակը, որի մոտ տվյալ պահին գտնվում է
4. կանգնել և ոչինչ չանել
Որպեսզի ԱԻ-ն դուրս թողնի նրանց սենյակից, ռոբոտները պետք է սեղմեն կոճակները ըստ նախապես տրված խիստ հաջորդականության: Օրինակ՝ O 2 O 7 B 96 O 65 B 1 նշանակում է նարնջագույնը պետք է սեղմի 2 համարի կոճակը, ապա 7 համարի, հետո կապույտը պետք է սեղմի իր միջանցքի 96 համարի կոճակը և այլն…
Ռոբոտներից յուրաքանչյուրը ի սկզբանե գիտի հրամանների հաջորդականությունը և ցանկացած պահին կարող է կապ հաստատել ընկերոջ հետ և պարզել, թե նա «ուր է հասել»:

090410_portal_2_coop_pax_preview_tԽնդրի պահանջը հետևալն է: Ունենալով մուտքում նմանատիպ հրամանների հաջորդականություներ, յուրաքանչյուր հաջորդականության համար տպել, թե նվազագույնը քանի վայրկյանից կարող են ռոբոտները կատարել ԱԻ-ի տեստը: Մուտքային ֆայլի առաջին տողում տրվում է հրամանների հաջորդականությունների քանակը, հաջորդ տողերում հրամանների հաջորդականությունից առաջ տրվում է տվյալ հաջորդականություններում հրամանների թիվը:

Մուտքային ֆայլի օրինակ
3
4 B 17 O 1 B99 O 75
2 O 18 B 26
3 O 45 B 64 O 1

Ելքային ֆայլ
103
27
92

Թողնել մեկնաբանություն

Filed under Մտածենք..., Ծրագրավորում

Օձ. Net – Մաս 1

Արդեն 2 շաբաթ է, ինչ ուսումնասիրում եմ Microsoft .Net պլատֆորման՝ մասնավորապես Windows միջավայրում կլիենտային ծրագրերի ստեղծման Windows Forms տեխնոլոգիան: Ուզում եմ կիսվել իմ ձեռք բերած փորձով: Բլոգում կթողարկեմ Օձ .Net վերնագրով հոդվածներ: Մեր հեռահար նպատակն է C# լեզվով գրել հին ու բարի Snakes խաղի ժամանակակից տարբերակը: Ասեմ միանգամից, որ մեր նախագծից գերժամանակակից գրաֆիկա ու շեյդերների տեղատարափ սպասող ընթերցողը կարող է միանգամից թողնել ընթերցումը և ինտերնետում կամ որևէ այլ տեղ որոնել DirectX SDK-ի կամ նման այլ գրաֆիկական գրադարանի մասին հոդվածներ: Ասեմ, որ հոդվածիս կկցեմ նախագծի ամբողջ կոդը: Ընթացքում հնարավորինս պարզ ձևով կբացատրեմ կոդի բացատրություն պահանջող կտորները: Կշոշափվեն նաև C#-ի և .Net-ի հետ կապված հարցեր: Ծրագիրը թարգմանելու համար ձեզ պետք կգա C#-ի թարգմանիչ, որը անվճար կարելի է բեռնել Microsoft-ի կայքից, Ցանկալի է ունենալ ժամանակակից IDE (Integrated Development Environment), ինչպիսին է օրինակ Microsoft Visual Studio .Net-ը: Ծրագիրը աշխատացնելու համար անհրաժեշտ է .Net Framework 2.0 կամ ավելի նոր տարբերակը: Նախաբանն այսքանն էր, իսկ այժմ անցնենք գործին:

Մի քանի խոսք նախագծի մասին
Դե բնական է, խաղի «վիզուալ միջուկը» գրելու համար պետք է օգտվել ինչ-որ գրաֆիկական API-ից: Հատուկ .Net պլատֆորմայի համար նախագծվել է երկչափ վեկտորական գրաֆիկայի ու տեքստի արտածման GDI+ API-ն, որն իրենից ներկայացնում է հին Windows API-ի GDI-ի (Graphics Device Interface) համալրված ու կատարելագործված տեսակը: Ես նախատեսել եմ, որ ծրագրում ոչ մի ռաստերային ռեսուրսներ (bitmap նկարներ և այլն) չօգտագործեմ (մի տեսակ հաճելի է զուտ վեկտորային պատկերը): Առաջին մասում մենք կհասցնենք ստեղծել Windows-ի Form (հայերեն լեզվով ասած՝ պատուհան), «պատկերենք» նրա մեջ 20×20 չափերով տախտակ ու նկարենք ինչ որ դիրքում մեր օձին: Պատկերենք բառը այստեղ վերցված է փակագծերի մեջ, որովհետև էֆեկտիվության նկատառումներով տախտակի վանդակներ, որպես այդպիսիք չենք նկարելու: Փոխարենը ժամանակավորապես (պրոֆիլակտիկ նպատակներով) ցանց կնկարենք պատուհանի մեջ, որպեսզի տեսնենք, ճիշտ ենք տեղադրում օձին, թե ոչ:

Ստորև բերվում է ծրագրի կոդը:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
class Snakes : Form
{
static public int direction = 0, ifieldx, ifieldy,
fieldsize, snakelen = 5;
public int snposx = 7, snposy = 8;
private Rectangle[] Snake;
public static void Main()
{
Application.Run(new Snakes());
}
public Snakes()
{
Text = “Օձ .Net”;
Width = 400;
Height = 400;
BackColor = Color.ForestGreen;
ResizeRedraw = true;
fieldsize = 20;
ifieldx = this.ClientRectangle.Width / fieldsize;
ifieldy = this.ClientRectangle.Height / fieldsize;
Snake = new Rectangle[]{
new Rectangle((snposx-4)%fieldsize*ifieldx, snposy%fieldsize*ifieldy, ifieldx, ifieldy),
new Rectangle((snposx-3)*ifieldx, snposy*ifieldy, ifieldx, ifieldy),
new Rectangle((snposx-2)*ifieldx, snposy*ifieldy, ifieldx, ifieldy),
new Rectangle((snposx-1)*ifieldx, snposy*ifieldy, ifieldx, ifieldy),
new Rectangle(snposx*ifieldx, snposy*ifieldy, ifieldx, ifieldy),
new Rectangle(0, 0, 0, 0),
new Rectangle(0, 0, 0, 0),
new Rectangle(0, 0, 0, 0)
};
}

protected override void OnPaint(PaintEventArgs e)
{
Graphics gfx = e.Graphics;
Pen p = new Pen(Color.Black, 0);
//gfx.SmoothingMode = SmoothingMode.HighQuality;
//gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
Brush snakeb = Brushes.Indigo;
int i = 0;
for (i = 0; i < fieldsize*ifieldx; i += ifieldx)
{
gfx.DrawLine(p, new Point(i, 0), new Point(i, ifieldy * fieldsize));
}
for (i = 0; i < fieldsize*ifieldy; i += ifieldy)
{
gfx.DrawLine(p, new Point(0, i), new Point(ifieldx * fieldsize, i));
}
gfx.FillRectangles(snakeb, Snake);
}
}

Մեր Snakes դասը ժառանգած է System.Windows.Forms.Form դասից: Static Public տեսակի սահմանված են direction, ifieldx, ifieldy, snakelen փոփոխականներ: Առաջինը հետագայում ցույց է տալու օձի շարժման ուղղությունը, երկրորդն ու երրորդը՝ երևակայական տախտակի վանդակի չափսերը, վերժինը՝ ինչպես կարելի է կռահել անունից, օձի երկարությունն է և սկսբնարժեքավորած է 5: snposx և snposy փոփոխականներում պահված է օձի գլխի տվյալ պահի կոորդինատները տախտակի վրա: Օձը իրենից ներկայացնում է Rectangle դասի մասիվ:
С#-ում static մոդիֆիկատորը նշանակում է, որ static հայտարարված փոփոխականը/ֆունկցիան/օբյեկտը/և այլն հասանելի է առանց այդ դասի նմուշ (instance) ստեղծելու: Այլ կերպ ասած, դասի static անդամները ստեղծվում են ծրագրի աշխատանքի սկսվելուց: Ահա թե ինչու Main ֆունկցիան միշտ հայտարարվում է static: Application.Run(new Snakes()) դիմումով Snakes-ի կառուցիչով ստեղծվում է Form և այն բերվում է էկրան: Ավելի ծավալուն ու հետաքրքիր է Snakes-ի կառուցիչը: Այստեղ արժեքավորվում են Form դասի որոշ Property-ները: Property-ն նորամուծություն է C#-ում և ինչ-որ միջին տեղ է զբաղեցնում ֆունկցիայի և անդամ-փոփոխականի միջև: Նրանում կարելի է ստանդարտ set և get ֆունկցիաներ սահմանել, որոնց միջոցով կարելի է կատարել մուտքագրվող տվյալների ստուգում: Form.Text-ում պահվում է Form-ի վերնագիրը (caption),  Form.Width ու Form.Height-ը Form-ի (ուշադրությու՛ն Form-ի, և ոչ թե դրա Client Area-ի): Form.ResizeRedraw-ի true լինելու դեպքում պատուհանի չափերը փոխելուց կանչվում է OnPaint ֆունկցիան (այն կքննարկենք մի փոքր ուշ):  Ի միջի այլոց նշեմ, որ C#-ը լիովին ապահովում է Unicode-ի նորմալ արտածումը, այնպես որ առանց խուսափելու կարելի է հայերեն, ռուսերեն և ցանկացած լեզվով տեքստ օգտագործել որպես սիմվոլային տողեր, ինչպես նաև որպես իդենտիֆիկատորներ .CS ֆայլերում: Այնուհետև մեր դասի կառուցիչում արժեքներ ենք վերագրում fieldsize-ին: Հաշվի առնելով դրա արժեքը, հաշվում ենք ifieldx, ifieldy-ը: Արժեքներ ենք վերագրում նաև Snake-ի էլեմենտներին: Ուշադրություն դարձրեք օրինակ
(snposx — 4) % fieldsize * ifieldx  արտահայտությանը: Այն ավելի մանրամասն կքննարկենք հաջորդ մասերում, երբ կփորձենք շարժել մեր օձին: Սա թույլ չի տալիս, որ օձը դուրս գա մեր ցանցից: Երբ, օրինակ, այն դուրս է գալիս ցանցի աջ կողմից, դրա գլուխը հայտնվում է ցանցի ձախ կողմում: Մասիվի վերջին երեք էլեմենտները պահեստային կարգավիճակում են: Մեր օձը խաղի ընթացքում, ըստ մտահղության, բոյովանալու է J:
Եվ վերջապես քննարկենք OnPaint գերբեռնված ֆունկցիան: Այն ամենը, ինչ GDI+-ի միջոցով նկարելու ենք էկրանին, նկարելու ենք այստեղ: Գրաֆիկական սարքին դիմելու համար ստեղծում ենք Graphics դասի օբյեկտ, որը փոխանցվում է OnPaint ֆունկցիային արգումենտի տեսքով: Սրան հաջորդող հայտարարված սև Pen-ով գծելու ենք ցանցը: snakeb Brush-ով  ներկելու ենք օձի մարմինը կազվող Rectangle-ները: GDI+-ում կա ստանդարտ, նախապես որոշված 141 ARGB գույն (բացի սիստեմային գույներից), դրանք բոլորը հասանելի են որպես Color դասի Property-ներ: Մեկնաբանությունների մեջ առնված երկու տողերը միացնում են AntiAliasing-ը: Պիքսելների մշակման այս մեթոդը լայնորեն կիրառվում է վեկտորական գրաֆիկայում և midtone-ների միջոցով ավելի հարթ ու հղկված է դարձնում վեկտորական պատկերների եզրերը: Եթե Ձեր համակարգիչը բավականին հզոր է, կարող ես միացնել AntiAliasing-ը և տեսնել տարբերությունը:
Հաջորդող 2 for ցիկլերում նկարվում են ցանցի նախ ուղղահայաց, հետո հորիզոնական գծերը: Ուշադրություն դարձրեք, որ GDI+-ում գիծ գծելու համար անհրաժեշտ է միայն մի ֆունկցիայի դիմում: Վերջին մեթոդը ներկում է Snake մասիվի տարրեր հանդիսացող Rectangle-ները, դրանով տեսանելի դարձնելով մեր օձը: Արդյունքում պետք է ստանաք նման մի բան.

Համոզվելպւց հետո, որ օձը կանգնած է ճիշտ տեղում, ունի ճիշտ գույնը և երկարությունը, կարելի է մաքրել ցանցը պատկերող կոդը, քանի որ այն այլևս մեզ պետք չի գա:
Շարունակելի…

Մեկնաբանություններ (2)

Filed under Ծրագրավորում