Admiterea 2012 on-line – între modernism și reticență

Acest articol reprezintă o analiză personală a procesului de admitere on-line de la Facultatea de Economie și Administrarea Afacerilor și nu reprezintă părerea oficială a instituției. Orice opinie poate fi asimilată cu statutul meu profesional, dar nu poate afecta negativ imaginea instituției, având în vedere caracterul personal, particular, profesional și asumat al acestui blog.

 

Contextul

Un pic, parcă, neîncrezător (în mine), prin felul de a expune situația, sau de a cere părerea, Decanul FEAA, alături de domnul Prodecan din 2011, deschidea subiectul unei noi ere în Admiterea FEAA, nou de fapt și pentru întreg învățământul academic ieșean, pe care atât de mult ni-l imaginăm modern și pe care îl dorim în topurile mondiale. Era vorba despre admiterea on-line, care să permită candidaților din localități mai îndepărtate să se poată înscrie la facultate fără a fi nevoiți să se deplaseze până la Iași. Mai mult de atât, pe fondul crizei economice, Decanul a luat decizia de a reduce taxa de admitere pentru dosarele on-line cu 50 de lei. Mulți dintre noi nu înțeleg diferența dintre 250 și 200 de lei, dar pentru mulți candidați asta poate însemna costul unui abonament la telefon pe o lună, sau costul unui bilet redus până la mare, sau o cămașă, un tricou, un spray eventual, sau de ce nu, o seară în oraș cu prietenii la discotecă, pizza sau tot felul de sucuri printre care și de hamei.

Cumulăm economia de timp, oameni și spații angrenați în admitere, puteam spune pe vremea respectivă că era o afacere win-win… chiar dacă și zilele acestea le explicam colegilor că este mai ieftin sa faci admitere on-line decât clasic…

Și astfel a apărut Admiterea on-line 2011. Un pic grăbit sistemul, un pic poate prea complicat și mai ales fără suportul meu, pentru că exact în ziua în care am terminat aplicația, la ora 13 aveam avion spre New York pentru a face parte din juriul celei mai mari competiții studențești pe teme de IT din lume: Imagine Cup.

 

Promovarea

Având în vedere că, în conformitate cu mai multe articole de pe internet, unul din patru români intră pe Facebook, iar bugetul de promovare era extrem de limitat, adică deloc, am ales calea de a promova totul prin Facebook. La câți oameni a ajuns mesajul nostru? Probabil la mulți din cei interesați, dar nu un număr suficient de mare pentru a fi considerat un succes!

image

Vedeți pe harta de mai sus o dispoziție teritorială în funcție de candidații care și-au creat conturi de acces în sistemul de Admitere on-line.

În mod normal, din cei 480 de candidați înregistrați, cea mai mare parte sunt din zona Moldovei. Pe grafic nu sunt reprezentați și cei 4 studenți din Chișinău. Cred că cei mai câștigați au fost candidații din Hunedoara, Satu Mare, Constanța și București, care au beneficiat de o reducere semnificativă a costurilor cu transportul până la Iași pentru înscriere. Sigur, în faza a doua trebuie să se prezinte pentru încheierea contractelor de studii și depunerea actelor în original.

Un chestionar simplu ne arată care au fost principalele mijloace de informare ale studenților legate de Admiterea la FEAA:

Mulțumim tuturor celor care au distribuit mesajele noastre!

La final cifrele sunt interesante:

  • 105 dosare complete la Științe Economice + 1 Respins din Italia.
  • 15 dosare complete la Administrație publică
  • 155 dosare complete la Master + 1 Respins care nu îndeplinea criteriile de discipline prealabile.

 

Aspectele critice

Sunt încă multe de reproșat unui astfel de sistem de admitere on-line. Unele critici le punem pe seama noastră, pe altele le justificăm prin lipsa timpului, dar întotdeauna pe cele mai importante le punem pe ”to-do list” pentru admiterea următoare.

Una din cele mai mari critici a fost adusă pentru componenta de plată on-line cu cardul. Am studiat ceva problema și până acum sistemul de plată care ni se-ar fi potrivit cel mai bine este cel de la PayU. Decizia de implementare nu-mi aparține, dar ar fi frumos să reușim într-un viitor.

Alt aspect critic a fost legat de procedura efectivă de admitere, care nu conține și o componentă pentru un examen de admitere. Aceste reguli de asemenea, nu le stabilim noi, dar un test general, fie el și grilă, ar putea fi susținut și on-line prin BlackBoard sau chiar implementat în SharePoint. Cel puțin un test de departajare sau de cunoștințe generale ar trebui susținut, după părerea mea. De exemplu din cei 480 de candidați înregistrați, 9 NU au completat o adresă de e-mail corectă, 3 și-au scris greșit prenumele iar jumătate nu au folosit caractere românești în numele lor, a localității sau județului.

Un alt aspect, critic, pe partea internă, este managementul incorect al timpului și al alocării activităților în așa fel încât să nu mai avem depășiri de termene în fluxurile de aprobare și verificare. Permanent am ținut informați candidații și conducerea despre stadiul procesării dosarelor on-line și a confirmării plăților de la bancă, folosind o listă de indicatori cantitativi.

image

Heirupismul ne caracterizează de multe ori, alimentat și de promisiunile ne-sustenabile de genul: vom găsi o formă de…, timp în care sub imperiul nopții noi procesăm dosare, iar soțiile noastre stau singure acasă, așteptându-ne cu copii mici în brațe.

Având în vedere faptul că permanent am interacționat cu candidații prin e-mail, telefonic, on-line, și cum nu toate merg întocmai ca la carte, am avut și neplăceri în colaborarea cu candidații, unul dintre cele mai negre feedback-uri venind pe linia e-mail-ui:

image

Cazuri și cazuri! Lipsa informării corecte este cumulată de multe ori cu nerecunoaștere și duc invariabil la ”împușcarea pianistului”. Înghițim invectivele de printre dinți (că doar nu suntem la mănăstire), vorbim frumos, răspundem prompt și corect și mergem mai departe.

 

Aspectele tehnice

Având în vedere specializarea mea tehnică, altă soluție decât SharePoint nu am găsit pentru a realiza admiterea on-line. Folosind fluxul de depunere a fișelor din admiterea clasică, l-am adaptat pe acestea în așa fel încât să fie cât mai ușor pentru candidații neexperimentați cu SharePoint să poată completa într-un mod cât mai natural fișele.

Puteți vedea în video-help modul în care se realiza completarea fișelor în on-line. Pentru stocarea fișelor am utilizat o listă clasică SharePoint cu peste 100 de coloane, iar formularul de introducere a datelor l-am personalizat cât mai aproape de ”clasic” în InfoPath.

Cel mai provocator din punct de vedere tehnic a fost realizarea listei cu atât de multe coloane, tipuri, opțiuni, valori implicite, valori de selectat.

image

Descrierea XML a câmpurilor am realizat-o prin concatenări succesive în Excel, apoi am generat scriptul PowerShell din imagine cu ajutorul căruia am creat rapid listele.

Pentru a asigura faptul că fiecare candidat își poate vedea doar fișa sa, am realizat un view public cu filtrare după autor, iar celelalte view-uri le-am eliminat din setările listei, precum și posibilitatea ca utilizatorii să-și poată crea propriile view-uri nefiltrate.

Pentru înregistrarea conturilor de acces pe site, am folosit tot o listă SharePoint, la care am conectat un fișier Excel pentru extragere, validare, prelucrare date introduse de candidați, generarea comenzilor de creare a conturilor în Active Directory și setare a grupului de utilizatori care pot introduce fișe pe site-ul de admitere. La acest fișier Excel am conectat un template Word în care am generat o scrisoare de tip mail-merge care trimitea automat e-mail prin intermediul Outlook-ului, în mod personalizat fiecărui utilizator, conținând instrucțiuni de conectare la site-ul de admitere.

Modelul de securitate trebuie să fie foarte restrictiv în astfel de situații, pentru că vorbim de foarte multe date cu caracter personal, orice scurgere de astfel de informații afectând ireversibil tentativele de a mai organiza astfel de admiteri pe viitor.

Surprinzător a fost însă faptul că nici un candidat nu a avut temeri legate de datele cu caracter personal. Teama cea mai mare a venit din neîncrederea în funcționarea unui astfel de sistem, alarmați și de fluxurile de lucru Verificare și Banca, activate automat pe fiecare fișă. Din cauza procedurilor de lucru cu banca s-a produs o întârziere de două zile pe fluxul de validare a încasărilor și confirmare a plății, fapt care a generat reacții cel puțin surprinzătoare. De exemplu, cel puțin doi candidați au renunțat la admiterea on-line, și au venit la facultate pentru a depune clasic dosarul, plătind o diferență de +50 lei.

Puteți urmări în acest video-help modul de funcționare a celor două fluxuri de aprobare.

Licența de SharePoint 2010 Standard for Internet Services, Academic Edition o avem achiziționată de 2-3 ani, pentru a putea oficializa parteneriatul cu Microsoft pe linia de promovare reciprocă și susținerea cu software pentru laboratoarele instituției noastre. Trebuie menționat că, în versiunea free a SharePoint (cunoscută și sub numele Foundation) nu se pot realiza toate funcționalitățile de care am beneficiat noi în versiunea utilizată.

 

Viitorul

Singura certitudine pe care o avem este că: viitorul este întotdeauna incert. Cel mai probabil vom continua să utilizăm platforme de aplicații de admitere on-line. O altă echipă de profesori și studenți de la masterul SIA sunt în stadiu avansat de realizare a unei aplicații integrate de admitere care să aibă componentele clasice și cele on-line integrate, nu ca acum, când trebuie să exportăm datele după finalizare către departamentul de baze de date.

Pe de altă parte, încă din 2011 anumite facultăți din Cuza ne-au cerut aplicația de admitere. Anul acesta cererea a fost reînnoită pe diferite canale. Unii oameni doresc să extindem Admiterea on-line pentru toată Universitatea, cu scopul de a da șansa câtor mai mulți candidați din țară să se înscrie la noi.

Personal mi-am arătat disponibilitatea de a pune la dispoziție platforma de admitere, dar dezvoltată în Cloud, beneficiind invariabil de puterea lor de calcul și disponibilitatea de necontestat. Mai trebuie specificat că planul de licențiere A2 în Cloud este complet gratuit pentru Universitățile din România. Trebuie să mulțumim și vremii, pentru că a fost caniculă și Dorel a stat la umbră, pentru că dacă dădea cu târnăcopul, ca de obicei prin Copou, făceam admitere on-line prin corespondență. :)

 

Impactul mediatic

    Mulțumim frumos!

    În loc de concluzii

    Cred că, din punct de vedere tehnic, implementarea soluției se poate încadra într-un exemplu mult mai larg de soluții pentru colaborare dintre instituții și consumatorii de servicii instituționale. Nu-i deloc greu să vezi de sus un proces, să vezi care sunt intrările în proces, care este fluxul de aprobare și feedback după care să produci rezultatele. Totul în deplină transparență și cu informarea permanentă și corectă a beneficiarului cu privire la stadiul procesării cererii sale. Vorbim de instituții moderne și transparente, în care cetățeanul este parte a procesului. Acesta este exemplul care ne arată că tehnologia este suficient de matură pentru așa ceva. Dar sunt oamenii pregătiți?

    Aceasta a fost Admiterea on-line 2012 la FEAA, sesiunea de vară. Mulțumim tuturor celor implicați!

    #SharePoint 2010 – Enumerate and Deactivate Anonymous access using PowerShell

    Acest articol se aplică site-urilor de SharePoint 2010 publicate în Internet care au cerințe de securitate diferite în structură lor.

    Una din problemele de securitate în contextul implementărilor complexe este legată de modul de acces la diferite site-uri. Se întâmplă adeseori ca în contextul relaxării securității pentru portalurile de SharePoint publicate în Internet, să ne confruntăm cu un abuz de acces anonim la nivelul anumitor site-uri sau subsite-uri, fapt care poate duce la repudierea în public a unor informații sensibile.

     

    Picture1

    În diagrama de mai sus site-ul Home are configurat acces anonim, site-urile cu albastru nu au acces anonim iar cele cu roșu au securitate individuală și configurat accesul anonim.

    Dacă un anonim accesează adresa: http://home/Site3/ i se vor solicita datele de conectare. În cazul în care apelează http://home/site3/Site32/ nu i se mai cer datele de autentificare pentru a vizualiza pagina. Site-urile 321 și 322 pot avea acces anonim prin moștenire de la site-ul părinte Site32.

    Propunerea principală a acestui articol este aceea de inventariere periodică a securității infrastructurii SharePoint în sensul depistării anumitor site-uri web cu conținut sensibil accesibil anonimilor.

    În mod clasic pentru a enumera structura unei ferme de SharePoint putem folosi comanda:

    stsadm -o enumallwebs > C:\ScriptsOutput\AllSubWebs.xml

    care ne permite să exportăm în format XML toată structura din toate bazele de date. Această comandă nu extrage însă și starea de acces în mod anonim la site-ul Web. În aceste condiții trebuie să utilizăm comenzile Powershell specifice SharePoint pentru a putea extrage starea anonimilor.

    În articolul lui Brian Beach [1] observăm că există 3 stări ale accesului anonim la un subweb SharePoint: 

    • fără acces anonim: valoarea 0
    • Acces anonim cu configurație implicită de acces la liste și biblioteci: valoarea 1.
    • Acces anonim la întregul site web: valoarea 2.
      Dar pentru a enumera toate site-urile avem nevoie de ceva mai mult. Articolul [3] lui Craig Trulove mi-a salvat destul de multă muncă, pentru că mi-a oferit posibilitatea de a identifica rapid o structură asemănătoare celei extrase de comanda stsadm și care să conțină și starea de acces a anonimilor la site.
      În scriptul de mai jos la linia 89 extrag în structura XML a infrastructurii valoarea parametrului de acces anonim. Copiați codul și salvați-l într-un fișier PS1.
       1: # Autor: Craig Trulove

       2: # WebPage: http://www.craigtothepoint.com/Lists/Posts/Post.aspx?ID=11 

       3: # Modified: Valy Greavu, valygreavu.com

       4:  

       5: #Region Function Definition: EnumAllWebs

       6: function EnumAllWebs

       7: {

       8:     param

       9:     (

      10:         [string]$DatabaseName,

      11:         [string]$DatabaseServer

      12:     )

      13:     #Region Function Definition: FindSiteTemplateReference

      14:     # Checks to see if the specified template is installed in the farm

      15:     # Returns null if template is not found, returns the template if it is

      16:     function FindSiteTemplateReference

      17:     {

      18:         param

      19:         (

      20:             [int]$lcid,

      21:             [string]$TemplateName

      22:         )

      23:         foreach ($template in $templates)

      24:         {

      25:             if (($template.LCID -eq $lcid) -and ($template.Name -eq $TemplateName))

      26:             {

      27:                 return $template

      28:             }

      29:         }

      30:         return $null

      31:     }

      32:     #EndRegion Function Definition: FindSiteTemplateReference

      33:     #Region Function Definition: ProcessOneContentDatabase

      34:     # Runs for each database

      35:     function ProcessOneContentDatabase

      36:     {

      37:         param

      38:         (

      39:             [System.Xml.XmlTextWriter]$writer,

      40:             [Microsoft.SharePoint.Administration.SPContentDatabase]$db

      41:         )

      42:         #Region Function Definition: OutputSiteXml

      43:         # Generates the XML for each site

      44:         function OutputSiteXml

      45:         {

      46:             param

      47:             (

      48:                 [System.Xml.XmlTextWriter]$writer,

      49:                 [Microsoft.SharePoint.SPSite]$site

      50:             )

      51:             $writer.WriteStartElement("Site")

      52:             $writer.WriteAttributeString("Id", $site.ID)

      53:             $writer.WriteAttributeString("OwnerLogin", $site.Owner.LoginName)

      54:             # Check if it is a host header site collection

      55:             if ($site.HostHeaderIsSiteName)

      56:             {

      57:                 $writer.WriteAttributeString("HostHeader", $site.HostName)

      58:             }

      59:             if ($site.AllWebs.Count -gt 0)

      60:             {

      61:                 $writer.WriteStartElement("Webs")

      62:                 $writer.WriteAttributeString("Count", $site.AllWebs.Count)

      63:                 foreach ($web in $site.AllWebs)

      64:                 {

      65:                     try

      66:                     {

      67:                         $reference = FindSiteTemplateReference -lcid $web.Language -TemplateName "$($web.WebTemplate)#$($web.Configuration)"

      68:                         # Check if web template is properly installed

      69:                         if ($reference -eq $null)

      70:                         {

      71:                             $str = "Unknown"

      72:                         }

      73:                         elseif ($web.Configuration -eq -1)

      74:                         {

      75:                             $str = [string]::Empty

      76:                         }

      77:                         else

      78:                         {

      79:                             $str = "$($web.WebTemplate)#$($web.Configuration)"

      80:                         }

      81:                         $writer.WriteStartElement("Web")

      82:                         $writer.WriteAttributeString("Id", $web.ID)

      83:                         $writer.WriteAttributeString("Url", $web.Url)

      84:                         # Extract AnonymousState 

      85:                         # AnonymousState determines if anonymous users have access to the site collection as follows:

      86:                         # A "0" disables anonymous access. In other words, anonymous users have no access to a Web site.

      87:                         # A "1" allows default anonymous access. This specifies that anonymous users can access lists and libraries if the lists and libraries allow anonymous access.

      88:                         # A "2" specifies that anonymous users can access the entire Web site.

      89:                         $writer.WriteAttributeString("Anonymmous", $web.AnonymousState)

      90:                         # Handle cases where str var not set or set to empty string

      91:                         if (($str -ne $null) -and ($str -ne [string]::Empty))

      92:                         {

      93:                             $writer.WriteAttributeString("TemplateName", $str);

      94:                         }

      95:                         if ($web.Configuration -ne -1)

      96:                         {

      97:                             $writer.WriteAttributeString("TemplateId", $web.WebTemplate);

      98:                         }

      99:                       $writer.WriteEndElement()

     100:                     }

     101:                     catch [Exception]

     102:                     {

     103:                     }

     104:                     finally

     105:                     {

     106:                         $web.Dispose()

     107:                     }

     108:                 }

     109:                 # End element for webs

     110:                 $writer.WriteEndElement()

     111:             }

     112:             # End element for site

     113:             $writer.WriteEndElement()

     114:         }

     115:         #EndRegion Function Definition: OutputSiteXml

     116:         $writer.WriteStartElement("Database")

     117:         $writer.WriteAttributeString("SiteCount", $db.CurrentSiteCount)

     118:         $writer.WriteAttributeString("Name", $db.Name)

     119:         $writer.WriteAttributeString("DataSource", $db.ServiceInstance.NormalizedDataSource)

     120:         # Only process sites if any exist

     121:         if ($db.Sites.Count -gt 0)

     122:         {

     123:             $writer.WriteStartElement("Sites")

     124:             foreach ($site in $db.Sites)

     125:             {

     126:                 try

     127:                 {

     128:                     OutputSiteXml -writer $writer -site $site

     129:                 }

     130:                 catch [Exception]

     131:                 {

     132:                 }

     133:                 finally

     134:                 {

     135:                     $site.Dispose()

     136:                 }

     137:             }

     138:             # End element for sites

     139:             $writer.WriteEndElement()

     140:         }

     141:         #End element for database

     142:         $writer.WriteEndElement()

     143:     }

     144:     #EndRegion Function Definition: ProcessOneContentDatabase

     145:     

     146:     # Create bool vars for passing to sub functions

     147:     $local = Get-SPFarm

     148:     $services = New-Object Microsoft.SharePoint.Administration.SPWebServiceCollection $local

     149:     $cs = [Microsoft.SharePoint.Administration.SPWebService]::ContentService

     150:     $templates = Get-SPWebTemplate

     151:     $StringWriter = New-Object System.IO.StringWriter

     152:     $writer = New-Object System.XMl.XmlTextWriter $StringWriter

     153:     $writer.Formatting = "indented"

     154:     $writer.WriteStartElement("Databases")

     155:     # if database was specifed process only that database

     156:     if ($DatabaseName)

     157:     {

     158:         # if databaseserver was not specified use default

     159:         if ($DatabaseServer -eq $null) { $DatabaseServer = $cs.DefaultDatabaseInstance.DisplayName }

     160:         $db = Get-SPContentDatabase -DatabaseName $DatabaseName -DatabaseServer $DatabaseServer

     161:         # Process database

     162:         ProcessOneContentDatabase -writer $writer -db $db 

     163:     }

     164:     # otherwise process all databases

     165:     else

     166:     {

     167:         foreach ($service in $services)

     168:         {

     169:             foreach ($application in $service.WebApplications)

     170:             {

     171:                 foreach ($database2 in $application.ContentDatabases)

     172:                 {

     173:                     # Process database

     174:                     ProcessOneContentDatabase -writer $writer -db $database2

     175:                 }

     176:             }

     177:         }

     178:     }

     179:     # End element for databases

     180:     $writer.WriteEndElement()

     181:     # Return output as string

     182:     $StringWriter.ToString()

     183:     $StringWriter.Flush()

     184:     $writer.Flush()

     185: }

     186: #EndRegion Function Definition: EnumAllWebs

     187: # Call function

     188: enumallwebs

    Execuția:

    .\enumallsubwebs.ps1 > C:\ScriptsOutput\AllSubWebs.xml

    crează fișierul AllSubWebs.xml pe care-l putem deschide și analiza cu Excel.

    Coloanele care ne interesează sunt:

      Scriptul lui Craig conține o mică eroare care împiedică enumerarea corectă a site-urilor corespondente bazei de date MySite, dar de obicei această aplicație web nu se configurează pentru acces anonim.
      Fișierul XML deschis în Excel îl putem filtra pentru a identifica site-urile cu acces anonim, a le evalua în sensul dacă ele corespund politicilor instituției de acces. În cazul în care dorim să dezactivăm accesul anonim pentru anumite site-uri putem să compunem în Excel comenzile de dezactivare care trebuie să fie de felul următor:
         1: # Preluare într-o variabilă PowerShell a valorii curente a site-ului care are activat acces anonim

         2: $Web = Get-SPWeb http://home/site3/Site32/ 

         3: # Dezactivarea accesului anonim.

         4: $Web.AnonymousState = 0

         5:  

    Operațiunea se repetă pentru toate site-urile ale căror acces anonim trebuie să fie dezactivat.

    Succes!

    Referințe:

    Blog la WordPress.com.

    SUS ↑