rolisz's site

Simplu calculator în Python - partea 3

Acest post face parte dintr-o serie în care eu fac un mic calculator în Python.

Data trecută am construit arborele sintactic core­spun­ză­tor expresiei, iar acuma îl vom evalua. Aceasta este mult mai simplu decât parsarea, așa că hai să scăpăm. În final vom face apoi un REPL (read, evaluate, print loop), deci vom face o „consola” pentru cal­cu­la­torul nostru. Aceasta este utilă pentru a putea beneficia de atribuirea de valori, că altfel ele se pierd după fiecare execuție.

Să începem cu testele:

from interpreter import interpreter
from tokenizer import Tokenizer
from tree import parseTree

pT = parseTree()
tok = Tokenizer()
interp = interpreter()
Tree = pT.buildParseTree(tok.tokenize("1+2"))
assert(interp.evaluate(Tree) == 3)
Tree = pT.buildParseTree(tok.tokenize("(5+(2\*3+2))-3\*((5+6)/2-4)"))
assert(interp.evaluate(Tree) == 8.5)
Tree = pT.buildParseTree(tok.tokenize("x = 2"))
assert(interp.evaluate(Tree) 
continue.

Simplu calculator în Python - partea 2

Acest post face parte dintr-o serie în care eu fac un mic calculator în Python Data trecută ne-am ocupat de împărțirea stringului rezultat în bucăți elementare. Acum vom trece la următoarea parte: parsarea. Aceasta ne va da structura expresiei pe care vrem să o evaluăm. Dacă în urma to­k­enizării obțineam erori dacă stringul conținea caractere invalide, acum vom obține erori dacă tokenele noastre nu sunt în ordinea potrivită (dacă avem doi operatori unul după altul de exemplu) sau dacă nu sunt suficienți operanzi (numărul de paranteze deschise nu coincide cu cele închise). Este important de menționat că deocamdată nu atribuim semantică tokenelor, ci doar sintaxă. Regulile de ordine de efectuare a op­er­ați­ilor continue.

Simplu calculator în Python - partea 1

De mai multă vreme tot mă bate gândul să fac ceva in­ter­pre­ta­tor pentru un limbaj mai simplu. Ca o primă aventurare în lumea in­ter­pretării șirurilor de caractere ca in­strucți­u­ni pentru calculator, m-am decis să fac un simplu „cal­cu­la­tor” în Python, care să aibă și suport pentru câteva funcții matematice și pentru variabile.

Basically, ce urmăresc eu e să am un mic progrămel care știe să facă ur­mă­toarele:

7+10*sin(pi/2)/2-3^2  # să dea 3
x = 127-30*ln(e)      # x să aibă valoarea 97
y = x^2 - 60/30*(6+x) # y să aibă 9203

Definiția riguroasă a sintaxei pe care o acceptă programul este următoarea:

<Number> = [0-9]+.?[0-9]* <Identifier> 
continue.

Statistici si grafice în R

Să presupunem că avem un fișier text care conține notele unor elevi de la 3 examene. Fișierul are următoarea structură:


Grupa 1 2 2 Nota1 4 continue.

Scurtă introducere în R

R este un limbaj de programare făcut în primul rând pentru a face calcule statistice și pentru a vizualiza acestea. Are aproape 20 de ani (1993) și este cel mai folosit limbaj pentru data mining.[1. Rexer Analytics] Este desigur cross-platform, merge nativ și pe Windows, Linux, Mac OS X.

El vine gata integrat cu "IDE", deși acesta e cam nașpa (no au­to­com­plete, no keyboard text selection, etc.). Există și al­ter­na­tive cum ar fi RStudio sau RKWard. Pentru scopul acestui tutorial, îi cam totuna ce folosiți, limbajul contează.

Operații se pot introduce în linia de comandă și rezultatul este afișat imediat:

> 10 + 2*5
[1] 20
> sqrt(49) + log(10)
[1] 9.302585

Operatorul de atribuire este... <-. continue.

Project Euler și AC

Pentru că marți am examen practic la Arhi­tec­tura Cal­cu­la­toarelor, am decis să mă pregătesc și eu un picuț. Seara la 10. Cu ce să ma pregătesc mai bine decât cu probleme de la Project Euler? Acesta este un site unde se găsesc o mulțime de probleme, mai mult de al­go­rit­mică, care pot fi rezolvate în orice limbaj de programare. Am făcut primele 3 în PHP mai demult, iar acum o să refac primele 2 în Assembly (cu anumite limitări), și o să încerc să mă explic cât mai bine.

Problema 1: Find the sum of all the multiples of 3 or 5 below 1000.

assume cs:code, ds:data
data segment
   
continue.

Metode speciale în Python

Îmi cer scuze că nu am scris de vreo 2 săpt. Am fost plecat și am fost în pană de idei

Clasele din Python pot avea, pe lângă metodele normale, care se apelează direct, și metode speciale, care nu prea sunt apelate direct (deși se poate), ci Python le apelează atunci când are nevoie de ele. Un exemplu de asemenea metodă specială, pe care toată lumea îl știe, este __init__, care definește con­struc­torul clasei. Acesta nu îl apelăm noi direct, ci Python îl apelează în momentul în care creăm o clasă nouă. Un alt exemplu destul de cunoscut (cel puțin dacă sunteți studenți la UBB) este __str__, care este continue.

Chat cu Node.js

V-ați distrat cu ce am învățat în postul anterior despre web-dev cu  Node.js? Lux, hai să continuăm.

Să începem cu primirea de date de la browser. Vom face asta cu un simplu XML­HttpRe­quest. Să modificăm pagina SSE.html să conțină ur­mă­toarele elemente:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>
<body><input type='text' id='message'/>
<button value='Send' id='send'>Send</button>
<script>
document.getElementById('send').addEventListener('click', sendmessage);
document.getElementById('message').addEventListener('keydown', function(event) {
    if (event.keyCode == 13) {
        sendmessage();
    }
});
function sendmessage() {
    var req = new XMLHttpRequest();
    req.open('POST', '/xhr');
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(document.getElementById('message').value);
    req.onreadystatechange = function (e) {
 
continue.

Introducere în Node.js

The logo of the Node.js Project from the
offic... Image via Wikipedia

Vineri a apărut, în sfârșit, varianta oficială pentru Windows la node.js (până acuma era doar variantă neoficială, care avea or­ga­ni­zarea pe foldere genială din Unix, aka „fiecare program să facă un lucru, dar acela bine”, aka o infinitate de fișiere și ex­e­cutabile, pe când acum e doar un simplu exe), așa că am zis să văd și eu care îi acest „big deal” despre node.js.

Pentru început, pro­gra­marea web cu aceasta e complet diferită față de cum merg lucrurile în combinația Apache (sau nginx, etc) + PHP (și bănuiesc că și de Python, Ruby, etc), și am descoperit asta chinuindu-mă câteva ore bune până să îmi dau seamă continue.

Git tutorial

În timp ce citeam un eseu despre Luceafărul, am văzut că Eminescu a prelucrat poemul în 5 variante succesive și am început să mă gândesc ce sistem de versionare folosea. Sigur nu era așa de eficient ca și Git.

Git e un sistem de versionare dis­tribuită, dezvoltat de Linus Torvalds în 2005 când acesta s-a plictisit de a tot colabora cu câteva mii de oameni la kernelul Linux prin fișiere .tar și patchuri.

De ce ar folosi cineva un sistem de versionare?

Pentru că omu' e prost și greșește. Face o schimbare într-un fișier, salvează și a doua zi își dă seama că nu trebuia să șteargă și să rescrie jumate continue.