Basics

Înainte de a începe să rezolvați laboratorul asigurați-vă că ați parcurs și înțeles noțiunile prezentate în sectiuniile Concepte și Demo.

Scrierea unui program C

La calea ~/uso-lab/04-appdev/support/basics/simple.c se află un program simplu C care afișează bine-cunoscutul mesaj “Hello, World!”.

Nu uita să folosești <TAB> pentru auto-completare, nu scrie de mână toată calea!

#include <stdio.h>

int main(void) {
  puts("Hello, World!");
  
  return 0;
}

Compilarea unui fișier C

Cel mai folosit compilator de C folosit pe Ubuntu este gcc. Acesta va fi folosit și de noi În cardrul laboratorului să compilăm fișiere scrise în limbajul C. Pentru a compila un fișier, rulăm comanda gcc urmată de numele fișierului pe care vrem să-l compilăm.

student@uso:~/uso-lab/04-appdev/support/basics/$ gcc simple.c
student@uso:~/uso-lab/04-appdev/support/basics/$ ls
a.out   simple.c
student@uso:~/uso-lab/04-appdev/support/basics/$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c5ad78cfc1de12b9bb6829207cececb990b3e987, not stripped

Outputul produs de această comandă este un fișier executabil cu numele a.out. Comanda file ne ajută să inspectăm tipul fișierului dat ca argument. În acest caz, ne spune că fișierul a.out este de tip ELF pe 64 de biți.

  1. De multe ori nu vrem ca executabilul rezultat să se numească a.out, ci vrem să aibă un nume mai intuitiv, spre exemplu simple. Compilați programul simple.c astfel încât fișierul rezultat să se numească simple (hint: man gcc, căutați după cuvântul cheie outfile).
  2. Folosind comanda file, verificați că fișierul simple este într-adevăr un fișier executabil.

Primii pași în lumea git-ului

Așa cum a fost precizat și la secțiunea Concepte, git ne ajută la versionarea codului. Versionarea codului este un pas foarte important în dezvoltarea aplicațiilor. Atunci când lucrăm la un proiect mai mare sau suntem mai mulți oameni care lucrăm la un proiect, este important să păstrăm o ordine în cod. Spre exemplu, ni se poate întâmpla să ne apucăm să implementăm un nou feature al aplicației și să modificăm codul suficient de mult încât să stricăm ceea ce aveam înainte. În această situație, vrem să avem o modalitate prin care să revenim la o versiune anterioară a codului. Un alt exemplu care demonstrează nevoia de a folosi o modalitate de versionare este dat de situația în care 2 sau mai mulți oameni lucrează la același proiect, dezvoltă două funcționalități diferite și nu vor să aibă probleme atunci când vor imbina cele 2 funcționalități în produsul mare.

Vom trece prin exemplele de mai sus în secțiunile următoare. Acum, ne vom concentra pe inițializarea proiectului.

  1. Înainte de toate, intrați pe Github sau pe Bitbucket și creați-vă un cont. Vom folosi mai târziu acest cont pentru a ține repository-urile pentru proiectele la care lucrăm.

Pentru a putea versiona codul pe care îl scriem, trebuie întâi și întâi să avem un loc în care să scriem codul. Ne reamintim din laboratoarele anterioare cum se creează un director în Linux. Să presupunem că pornim din directorul home al uitlizatorului student. Dacă nu vă aflați acolo, rulați comanda cd ~.

student@uso:~$ mkdir my-awesome-project
student@uso:~$ cd my-awesome-project
student@uso:~/my-awesome-project$

În acest moment, avem directorul în care vom lucra la proiectul nostru. Pentru a preciza sistemului că vrem să folosim git pentru versionare, trebuie să dăm comanda git init. Această comandă creează un repository local nou în care vor fi ținute toate datele legate de proiect. Vom vorbi despre repository-uri remote la secțiunile următoare.

student@uso:~/my-awesome-project$ git init
Initialized empty Git repository in /home/student/my-awesome-project/.git/
student@uso:~/my-awesome-project$ 

Dacă această comandă s-a executat cu succes, avem în acest moment un repository de git în directorul my-awesome-project. Dacă dăm comanda git status putem afla foarte ușor ce fișiere am modificat de la ultima actualizare a repository-ului.

student@uso:~/my-awesome-project$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
student@uso:~/my-awesome-project$ 

Dat fiind faptul că nu am create/șters/modificat niciun fișier din directorul my-awesome-project, comanda git status ne spune că nu avem nicio schimbare pe care să o “comitem”, adică nu avem nicio schimbare în directorul curent pe care ar trebui să o anunțăm.

README și .gitignore

Uzual, orice proiect vine atașat cu 2 fișiere README și un fișier .gitignore. Fișierul README conține informații despre cum este structurat proiectul, despre cum se folosește, practic conține orice are nevoie pentru a putea ajuta pe cineva (care nu a lucrat la proiect). Fișierul .gitignore este fișierul care îi spune utilitarului git ce fișiere să ignore atunci când cineva adaugă fișiere la repository. Spre exemplu, fișierele binare nu trebuie adăugate niciodată în repository deoarece este foarte, atenție foarte, probabil ca un program compilat pe un sistem să nu fie compatibil pe un altul.

Primul pas pe care trebuie să-l facem după ce am inițializat repository-ul proiectului nostru este să adăugăm un fișier README, care va fi actualizat pe parcursul dezvoltării și un fișier ascuns cu numele .gitignore.

student@uso:~/my-awesome-project$ echo "Initial content" > README # Scrie textul ''Initial content'' în fișierul ''README''. Fișierul este creat dacă nu exista deja.
student@uso:~/my-awesome-project$ echo "main" >  .gitignore # Creează fișierul .gitignore cu conținutul ''main''.
student@uso:~/my-awesome-project$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	.gitignore
#	README
nothing added to commit but untracked files present (use "git add" to track)

Comanda git status ne arată că au fost modificate cele 2 fișiere, dar că sunt untracked, adică nu au fost adăugate (încă în repository). Pentru a le adăuga, trebuie să facem 2 pași. Prima dată, le adăugam în setul de fișiere tracked. Pentru a face asta folosim comanda git add urmată de fișierele pe care vreți să le adăugați, în cazul acesta README și .gitignore.

student@uso:~/my-awesome-project$ git add README .gitignore
student@uso:~/my-awesome-project$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   .gitignore
#	new file:   README
#

În acest moment git știe de fișierele README și .gitignore. Vedem acest lucru cu ajutorul comenzii git status. Al doilea pas este să comitem schimbările. Acest lucru se face cu ajutorul comenzii git commit alături de argumentul -m <mesaj>. Mesajul este o descriere a commit-ului, descrie ce modificări au fost aduse odată cu aceasta versiune nouă de cod. git commit va lua toate fișierele adăugate la pasul anterior, le va marca pe toate cu același mesaj de commit și le va submite în repository-ul local.

student@uso:~/my-awesome-project$ git commit -m "Initial commit"
[master (root-commit) 64bccb0] Initial commit
 Committer: student <student@uso>
 
 2 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 README
student@uso:~/my-awesome-project$ git status
# On branch master
nothing to commit, working directory clean

La o nouă rulare a comenzii git status vedem că schimbările au fost efectuate cu succes. Pentru a vedea istoricul commiturilor făcute pentru acest repository rulăm comanda git log. Acum trebuie să vedem că a fost efectuat un singur commit de-a lungul timpului și anume cel cu identificatorul 64bccb03c2f3a8e76730582676bd944902a0c1eb. Acest șir de caractere în hexazecimal este generat aleator și este unic pentru fiecare commit, ajutându-ne astfel să identificăm commit-urile în cazul în care ar exista mai multe cu același nume.

student@uso:~/my-awesome-project$ git log
commit 64bccb03c2f3a8e76730582676bd944902a0c1eb
Author: student <student@uso>
Date:   Mon Oct 7 15:49:20 2019 +0300
 
    Initial commit
  1. Creați un program C cu numele main.c în directorul ~/my-awesome-project/ care să afișeze mesajul “Hello, World!”.
  2. Verificați faptul că git vede această schimbare folosind comanda git status. Ar trebui să vedeți următorul output:
  # On branch master
  #
  # Initial commit
  #
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  #	main.c
 
  1. Comiteți noile schimbări și asigurați-vă că totul este în regulă. Nu treceți mai departe dacă vreo comandă pe care ați dat-o nu funcționează. La final, git status nu ar trebui să mai găsească niciun fișier ca 'tracked'. Verificați folosind git log sau chemând asistentul.
uso/laboratoare/new/04-appdev/basics.txt · Last modified: 2019/10/27 14:44 by elena.stoican
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0