Imagine Cup 2017–News

Spre bucuria multor studenți, dar și a pasionaților de tehnologie, prestigioasa competiție Imagine Cup, organizată de Microsoft continuă și anul acesta (2016/2017) cu ediția a 15-a.

mainBlog

Așa cum ne-a obișnuit deja Microsoft aduce permanent schimbări nu numai în produsele sale ci și în competiția Imagine Cup. Anul acesta identificăm o schimbare de imagine și de integrare a competiției într-o platformă mai mare, Microsoft Imagine, care reunește mai multe instrumente destinate mediului Academic și educațional. Vechiul Dreamspark devine parte a platformei Imagine. De asemenea, identificăm o apropiere, nu integrat încă, cu platforma MVA.

Anul acesta, s-au anunțat până la data articolului, două competiții în Imagine Cup:

Hello Cloud

O competiție destinată pasionaților de tehnologiile cloud computing și care are la bază platforma Azure.

Este o competiție lunară cu premii de 1000 USD în fiecare lună. Anul trecut un student din Cluj-Napoca a câștigat premiul lunii martie.

Pașii pe care trebuie să-i parcurgeți pentru a participa:

P0. Căutați resursele de voință și încredere în voi.
P1. Vă creați un cont gratuit pe Microsoft Azure
P2. Finalizați una sau mai multe activități specifice
P3. Trimiteți rezultatul până în ultima zi de miercuri a fiecărei luni.

Reguli detaliate și sign up aici!

code.FTW!

Este o competiție adresată pasionaților de software design, care reunește toate secțiunile clasice de până acum: Inovație, Software Design și Gamming. Vestea cea mai bună este că premiul mare crește la această ediție la valoarea de 100.000 dolari.

code.FTW! este o competiție adresată echipelor de studenți. O echipă poate fi formată din maxim 3 membrii, iar proiectele trebuie să includă obligatoriu tehnologiile cloud Azure. Aplicațiile dezvoltate pot fi destinate dispozitivelor cu sistem de operare Windows, Android sau iOS.

În regulamentul oficial se recomandă ca fiecare echipă să nominalizeze un mentor, care poate fi cadru didactic la o universitate înrolată sau de la ONG-uri sau companii private.

Din surse neconfirmate încă, ediția de anul acesta va avea o finală locală găzduită cel mai probabil în Aprilie 2017 în București.

Anul trecut marele premiu la secțiunea Inovație a fost câștigat de o echipă de studenți de la Politehnica București. Detalii despre proiectul lor și implicațiile globale puteți consulta pe site-ul http://www.entymed.com/

Smiling members of the ENTy team strike a pose.

Echipa ENTy în finala de la Seattle, USA, 29 Iulie 2016.

Mult succes tuturor!

IF-THEN-ELSE in xPath

Există multă documentație și exemple pe Internet legate de utilizarea condițiilor IF-THEN-ELSE în formularele personalizate în InfoPath din SharePoint. De ce încă despre InfoPath? Pentru că este încă un produs suportat în versiunea de SharePoint 2016 și a fost prelungit suportul pentru InfoPath 2013. De ce xPath? Pentru că va mai rezista ceva timp.

În modimage clasic în xPath 1.0, cel care poate fi folosit pe formularele InfoPath 2013, nu există o sintaxă de tip IF-THEN-ELSE dar există o adaptare a acesteia, oarecum mai complicată dar care funcționează inclusiv pentru IF-uri imbricate.

În mod simplificat sintaxa este:

concat(
substring(TrueResult, 1, (BoolCondition) * string-length(TrueResult)),
substring(ElseResult, 1, (not(BoolCondition)) * string-length(ElseResult))
)

Formula poate fi scrisă pe mai multe rânduri sau pe un singur rând caracterele Enter nefiind interpretate în execuție. O altă formă a IF-THEN-ELSE-ului este prezentată în forma:

concat(
    substring(TrueResult, 1 div BoolCondition),
    substring(ElseResult, 1 div not(BoolCondition))
    )

Din punctul meu de vedere formula în schimb nu este la fel de exactă, rezultatul pentru True fiind de multe ori altertat, mai ales când se operează cu numere.

 

Introducerea unei noi condiții pe ramura IF-THEN transformă formula în:

concat(
    substring(
            concat(
                substring(
                    TrueResult1
                    , 1, (BoolCondition) * string-length(
                    TrueResult1
                    )),
                substring(
                    ElseResult1
                    , 1, (not(BoolCondition)) * string-length(
                    ElseResult1
                    ))
                )
            , 1, (BoolCondition) * string-length(
            concat(
                substring(
                    TrueResult1
                    , 1, (BoolCondition) * string-length(
                    TrueResult1
                    )),
                substring(
                    ElseResult1
                    , 1, (not(BoolCondition)) * string-length(
                    ElseResult1
                    ))
                )
            )),
    substring(
            ElseResult2
            , 1, (not(BoolCondition)) * string-length(
            ElseResult2
            ))
    )

Condițiile folosesc operatorii clasici: =, >, etc. În cazul în care valoarea comparată în condiție este un număr trebuie să folosim funcția number(câmp).

Prezentul articol este mai mult un exemplu de calculare a unui câmp dintr-un formular pe baza alegerilor sau datelor introduse de un utilizator. Practic există și alte metode de lucru, xPath fiind una din metodele foarte dificile. Astfel, dacă avem un formular prin intermediul căruia dorim să comparăm două valori, Value1 și Value2 atunci pentru a rezolva problema trebuie să folosim următoarea formulă:

image

Formularul conține două câmpuri cu numele Value1 și Value2 și un buton care determină valoarea textului afișat prin utilizarea formulei respective:

image

Pas cu pas implementarea:

1. Am creat un formular simplu în SharePoint cu cele două coloane;

2. Am personalizat formularul în InfoPath și am adăugat butonul Compare…

3. La acțiunea butonului am pus setare valoare câmp Title la formula de mai sus.

Simplu, nu? Smile

Condițiile cumulative

În IF-uri mai avem de multe ori și condiții cumulative. Pentru a specifica acest cumul de condiții trebuie să folosim operatorul AND sau OR după caz.

Formula devine în acest caz:

concat(
    substring(TrueResult, 1, (BoolCondition1 and BoolCondition2) * string-length(TrueResult)),
    substring(ElseResult, 1, (not(BoolCondition1 and BoolCondition2)) * string-length(ElseResult))
    )

 

Exemplu de formulă pentru compararea sumară a trei valori:

concat(
    substring(„Ambele valori sunt mai mari”, 1,
        ((number(dfs:dataFields/my:SharePointListItem_RW/my:Value1)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))
        and (number(dfs:dataFields/my:SharePointListItem_RW/my:Value2)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))) *
        string-length(„Ambele valori sunt mai mari”)),
    substring(„Una din valori este mai mica”, 1,
        (not((number(dfs:dataFields/my:SharePointListItem_RW/my:Value1)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))
        and (number(dfs:dataFields/my:SharePointListItem_RW/my:Value2)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3)))) *
        string-length(„Una din valori este mai mica”))
    )

Sper să vă fie util!

Platformele software – Mașină sau casă?

nosocialCunoscuții mei știu că una din aplicațiile la care mă mai pricep, dar pe care nu o suport, este Microsoft Dynamics CRM. În acest context, am avut ocazia să particip la prezentarea unui POC (Proof-of-Concept) la o mare companie din București. Lăsând deoparte faptul că POC-ul era proiectat ca o mică implementare, care presupunea foarte multe MDs sau MNs, și faptul că era scris într-un mod destul de abstract, cea mai mare greșeală a fost faptul că nu am înțeles procesul de vânzare. Fiecare companie are propriul său sistem de vânzare, care în principiu respectă aceeași trasabilitate, dar care are personalizări specifice bazate pe domeniul de activitate, logica și cutuma afacerii respective.

Fiind o persoană non-sales am ”ținut” să le prezint ”vânzătorilor” best practices aplicate pentru o implementare solidă și sustenabilă respectând as-default-as-possible și as-built-in-possible modul de implementare. Normal că nu le-a plăcut și cred că, în mod justificat, nu au fost interesați de aceste aspecte, ținând să mă penalizeze cu o ”clasică”, pe care, și eu am folosit-o de câteva ori în viață:

– Domnu’, dumneavoastră aveți mașină?
– Am.
– Și când ați cumpărat-o v-a interesat cum au fost strânse șuruburile? Smile

Clasic! Normal că m-am uitat la model și am întrebat-o pe soția mea daca-i place culoarea. Smile

Conducând, prin ploaia de sus și de tâmpiți de pe șosea, înapoi spre Iași mă tot gândeam de câte ori mi-am ”penalizat” studenții cu această întrebare… care iată demonstrează principiul ”întoarcerii roții”.

Și atunci mi-a trecut prin minte idea titlului: când îți cumperi o mașină, într-adevăr, nu te interesează cum sunt strânse șuruburile, pentru că ai garanția mărcii și a experiențelor similare. Este ca și cum ți-ai cumpăra Office și dacă vrei poți să-ți pui ceva butoane suplimentare pe Ribbon sau să schimbi temele de culori, echivalentul accesoriilor auto. Dar când vrei o platformă care să te asiste la vânzări sau orice altceva de dimensiuni mari (ERP, Document management, securitate) nu mai poți face comparații cu o mașină, pentru că ea trebuie construită după dorințele tale. Și cel mai important la o casă pe lângă culoare și câte camere are te interesează: fundația, ce tip de fier este pus, ce tip de beton, izolații și acoperiș sunt folosit și cu cât simț de răspundere este construită. Ulterior poți alege altă culoare pentru pereți, dar dacă structural te interesează doar varul, într-o zi, Doamne ferește, s-ar putea să ți se dărâme pe tine.

Normal că oamenii doreau și scări rulante până pe terasă… dar asta este altă poveste. Smile

Învățătura nr. 1: Nu lăsa niciodată tehnicienii să prezinte platforme software vânzătorilor.

Învățătura nr. 2: Majoritatea implementărilor mari eșuează pentru că oamenii nu sunt interesați de principiile care stau la baza construcției.

Blog la WordPress.com.

SUS ↑