Skip navigation

Tag Archives: web development

Nuş cum am ajuns să dau de o implementare a algoritmului de verificare a CNP-urilor postată de cineva pe softpedia (ocazie cu care am descoperit că nu mai recunosc o sursă de foxpro – eh, amintiri din tinereţe), şi am muncit 10 minute să fac o implementare în javascript; ete-o:

function map(fn, arr){
	var ret = [];
	for(var x = 0; x < arr.length; x++)
		ret.push(fn(arr[x]));
	return ret;
}

function reduce(fn, arr, initial){
	function iter(idx, ret){
		if(idx >= arr.length)
			return ret;
		else
			return iter(idx+1, fn(arr[idx], ret));
 	}
	return iter(initial ? 0 : 1, initial || arr[0]);
}

function sum(arr) { return reduce(function(x, y){ return x + y;}, arr, 0); }

function ccnp(cnp){
	if(cnp.length != 13)
		return false;

	cnp = map(parseInt, cnp.split(''));

	var coefs = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];
	var idx = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];

	var s = map(function(x){return coefs[x] * cnp[x];}, idx);
	s = sum(s) % 11;

	return (s < 10 && s == cnp[12]) || (s == 10 && cnp[12] == 1);
}

Scris în javascript 1.7 (suportat de Firefox), map era mult mai simplu de scris ca [fn(arr[x]) for(x in arr)], dar să păstrăm lucrurile portabile…

pentru cine se întreabă:
map aplică o funcţie elementelor unui array şi returnează un array cu rezultatele
reduce combină elementele unui array cu o funcţie dată şi returnează o valoare; după ce am scris-o the functional way mi-am amintit că există for, deci se putea scrie şi aşa:

function reduce(fn, arr, initial) {
	ret = initial;
	for(var i = 0; i < arr.length; i++) { ret = fn(arr[i], ret); }
	return ret;
}

(varianta cu for şi side-effects e probabil mai rapidă, but nowhere as fun :D).

On an unrelated note: extrem de enervant editorul de la wordpress, când ai de pus snippet-uri de cod; evident, cine l-a scris a considerat că scriptul lui ştie html mai bine ca mine, prin urmare modifică şi când scriu raw HTML :(.

Anunțuri

L-au lansat de ceva timp. L-am aşteptat multă vreme. M-am abţinut de la trollisme înainte să-l folosesc îndeajuns; acum cred că pot să-mi exprim o părere avizată: suge. Din mai multe motive:

  • te obligă să foloseşti svn-ul de pe wordpress.org; prost, pentru că eu folosesc ceva infinit mai deştept decât subversion, şi trebuie să actualizez svn şi să fac un tag de câte ori dau drumul la o versiune nouă;
  • au un packager idiot care pune fişierele în nume_plugin.tag (unde tag e versiunea); cum destul de puţini luseri îşi folosesc creierele din dotare, fie nu le merge (add_options_page and friends produc niste chestii total aiurea), fie ajung să aibă mai multe versiuni în acelaşi timp (şi dacă le mai şi activează crapă tot pe motiv de funcţii definite de 2 ori)
  • te obligă să foloseşti markdown (care suge in itself), iar procesorul de markdown pe care îl folosesc suge şi el
  • ca şi în cazul extend/ideas, degeaba te plângi că are bube, nu răspunde nimeni cu săptămânile, când răspund zic că or să le repare, şi dp aia rămâne cum am stabilit

rău de tot, chiar; şi ăştia (wordpress) îl impun pt scrisul fişierelor readme de la plugin-uri, damn it. de ce nu sintaxa de la trac? :((

Proiectul la care lucrez foloseşte Symfony (nu, nu a fost alegerea mea, eu încerc să evit să am de-a face cu bijuteria de imbecilitate numită propel, care din motive filosofice mă pune fie să scriu tone de cod de-amboulea, fie să fac cu 300 de query-uri ce se poate face cu unul singur); atunci când am început lucrul la el, versiunea stabilă curentă era 0.6.3. buuuuun, folosim! Aduc aplicaţia la o formă acceptabilă, funcţionează, dezvolt în continuare, etc., la un moment dat văd că băieţii au scos 1.0.nus’cat (beta). Dau să upgrade. Iese fum. svn revert, şi lucru în continuare pe 0.6.3, până când am azi nevoie să instalez un plugin, şi mă trezesc că s-au schimbat nişte parametri la command line (ghicit uşor ce lipsea), şi s-a schimbat şi arhitectura sistemului de plugin-uri.

All right, nu-i bai, citim documentaţie. Oops! we couldn’t find the page that you’re looking for! Se pare că simfoniştii noştri au considerat că e o idee bună să radă toată documentaţia versiunilor ante 1.0 (acum stable), inclusiv din SVN. Păi multă muie, măi dragă! vă lăudaţi că e enterprise ready şi suportaţi versiunile timp de 3 luni… trac-ul plânge că error 500 sau nu se încarcă deloc când dau să văd timeline; şi mai multă muie, stimaţi retarzi! Sunteţi pe drumul cel bun. Sap momentan prin sursele simfoniei şi ale lui pake şi ale pear-ului. Fuck you very much, Symfony devs!

ok, back to work.

later update: dorinţa mea de sex cu toate rubedeniile de gen feminin vii sau decedate simfoniştilor se menţine: nu poci să văz timeline, nu poci să văz revizii anterioare, versiunea cărţii pentru 0.6.3 redirectează către trunk (sau către Amazon), prin urmare fuck you again very much, Simfony!