2009-05-26

Remove a service from Windows Registry

To remove a service from Windows registry use the following command at a cmd console (in Windows Vista run the console as Administrator):

sc delete <service_name>

2009-05-21

Some more JavaScript

Some quick tips:

  • To continue a string on the next line in JavaScript, use the \ operator like this:
    var s = "A long text \
    that continues on the next line";


  • Create on the fly functions like this:
    function functionAssembler(operatorSign){
    return new Function("a","b","return a" + operatorSign + "b;");
    }

    Use it to create functions:
    var add = functionAssembler("+");
    var substract = functionAssembler("-");
    var multiply = functionAssembler("*");
    var divide = functionAssembler("/");

    Use the function as always:
    document.write(add(10,5));
    document.write(substract(12,6));
    document.write(multiply(5,3));
    document.write(divide(125,5));

Functions in JavaScript

A Delphi programmer like me, accustomed with strongly typed programming, with clear function block limitation and with classic object oriented style, finds JavaScript overwhelmingly weird. In JavaScript a variable type is interpreted and can happily jump from one type to another, object oriented is based on prototyping starting from the Object primitive type and functions are objects derived from Object.
The Object type has two properties (constructor, prototype) and six methods (eval, toSource, toString, unwatch, valueOf, watch) (see here).
Function is a type descended from Object and has six more properties (arguments, arguments.callee, arguments.caller, arguments.length, arity, length) and two methods (apply, call) (see here).
Below are some code snippets:
Creating an object is as follows:
var myObject = new Object();
or
var myObject = { }
In the second notation, the members of the object are expressed like name:value pairs as:
var myObject = { aname : 15, bname: "test" }
Such a member can be a function like:
var myObject = { myfunc: function(msg){ return msg+msg; } }
A function can be created also as follows:
var f = new Function("a","b","return a+b;");
To create a simple object is used the special keyword this:
function myType(a,b,c){
 this.a=a;
 this.b=b;
 this.c=c;
}
Then you can use this object like:
var f = new myType(10," and ",20);
document.write(f.a + f.b + f.c); // The result is 10 and 20
Create an object with a method:
function myType(a,b){
 this.a=a;
 this.b=b;
 this.add = function(){ with(this) return a+b; }
}
Now use the object:
f = new myType(5,6);
document.write(f.add()); // The result is 11
Note that the add method is present in any object created and if there are 1000 instances of myType, there are also 1000 instances of the function add. To avoid this, use the prototype keyword like this:
function myType(a,b){
 this.a=a;
 this.b=b;
}
myType.prototype.add = function(){ return this.a + this.b; }
Use it like previously explained:
f = new myType(19,11);
document.write(f.add()); // The result is 30
There can be created a helper function like:
Function.prototype.method = function (name, func) {
  this.prototype[name] = func;
  return this;
};
The simple object:
function myType(a,b){
 this.a=a;
 this.b=b;
}
Add a new method like this:
myType.method("add", function(){ return this.a+this.b; });
Then use it as usual:
f = new myType(125,80);
document.write(f.add()); // The result is 205


This is enough to get started with objects for now.

2009-05-08

Problema cu monedele

Într-o urnă se află 4 tipuri de monede, cea mai mare având valoarea de 1£. Ştiind că fiecare monedă există de acelaşi număr de ori şi că suma existentă în urnă este de 14.13£, găsiţi câte monede sunt de fiecare tip şi care este valoarea lor.
Notă: În UK monedele au valorile: 0.01£, 0.02£, 0.05£, 0.10£, 0.20£, 0.25£, 0.50£, 1.00£.
Genul acesta de problemă presupune de fapt rezolvarea unei ecuaţii cu mai mulţi parametri întregi. Ecuaţia problemei este s=n*(a+b+c+d), unde s=14.13 şi d=1. Deci n*a+n*b+n*c+n=14.13 şi trebuie să se afle n,a,b şi c. O astfel de ecuaţie se poate rezolva prin forţă brută, însă ideea de rezolvare este mult mai frumoasă atunci când se studiază posibilele valori ale parametrilor astfel încât să se găsească mult mai repede soluţia. Pentru că a+b+c+1>=1 avem faptul că 0<n<15. Dacă folosim pentru a, b şi c valoarea cea mai mică (a=b=c=0.01) atunci n=14.13/1.03=13.72, deci n<14. Dacă folosim pentru a, b şi c valoarea cea mai mare (a=b=c=1) atunci n=14.13/4=3.5325, deci n>3. Având un interval pentru n şi ştiind că n este număr întreg nu ne rămâne decât să calculam prin forţă brută posibilele valori pentru n.
n=4, atunci 14.13/4=3.5325, valoare imposibilă pentru că rezultatul trebuie să aibă maxim 2 zecimale;
n=5, atunci 14.13/5=2.826, valoare imposibilă;
n=6, atunci 14.13/6=2.355, valoare imposibilă;
n=7, atunci 14.13/7=2.01(857142), valoare imposibilă;
n=8, atunci 14.13/8=1.76625, valoare imposibilă;
n=9, atunci  14.13/9=1.57, valoare posibilă;
n=10, atunci 14.13/10=1.413, valoare imposibilă;
n=11, atunci 14.13/11=1.28(45), valoare imposibilă;
n=12, atunci 14.13/12=1.1775, valoare imposibilă;
n=13, atunci 14.13/13=1.08(692307), valoare imposibilă;
Prin urmare am avut noroc şi am găsit doar o singură valoare posibilă pentru n şi anume n=9. Deci fiecare monedă se găseşte de exact 9 ori. Trebuie să aflăm acum valorile monedelor, conform ecuaţiei a+b+c+1=1.57, deci a+b+c=0.57. Ştim că a≠b≠c şi observăm rapid soluţia a=0.5, b=0.05 şi c=0.02.
Răspuns: Monedele au valorile 0.02£, 0.05£, 0.5£ şi 1£, fiecare monedă fiind de exact 9 ori.
Observaţie: Dacă nu am fi ştiut că valoarea unei monede este de 1£, atunci am fi fost nevoiţi să căutăm n în intervalul [4,78] (14.13/0.18=78.5, 0.18 fiind suma minimă a 4 monede diferite). Găsirea unei soluţii nu implică faptul că soluţia este unică.

2009-05-05

Valori versus Drogati

Originally posted on Aedoh forum (fragments):

Sunt de acord ca nu acordam atentia cuvenita oamenilor importanti care au trait in Romania, insa propria decadenta ne impiedica sa recunoastem valorile. In schimb sa afirmi ca in ziua de azi persoanele valoroase sunt pe cale de disparitie este foarte hazardat. Massmedia e prea preocupata cu isterizarea populatiei ca sa se mai preocupe de lucrurile cu adevarat importante. Este imprumutat modelul de stiri american, in care o stire despre ceva pozitiv nu este stire ci doar ceva negativ reprezinta o stire. Parerea mea e sa ne dea voie si cu arme ca sa putem sa ne impuscam de spaima (i.e. in USA anual 10K oameni mor prin impuscare). In aceste conditii ce se percepe de la televizor e o Romanie negativa. Prin urmare trebuie sa fii concentrat ca Chagdud Tulku Rinpoche (http://www.tibetantreasures.com/tthtml/ctr.htm) ca sa prinzi vagile stiri pozitive. Atunci afli ca avem valori in box, judo, inventii, chiar si retail. O alta solutie este sa mergi sa vezi lucrurile pe viu. De exemplu dupa cate stiri negative auzi despre Bucuresti ai crede ca sunt cam 2 infractori pe metrul patrat si in realitate cobori din tren in Gara de Nord si lucrurile sunt ok, nu te ataca nimeni in secuda numarul doi (de fapt multimea asta de stiri nasoale despre capitala mi se pare o palida incercare de a mai tempera migratia).

Sa polemizez impotriva tehnologiei din cauza unor ciumpalaci care nu o folosesc corespunzator sau isi fac rau folosind-o, nu o s-o fac niciodata. Ma doare in cot de oamenii care se distrug singuri. Daca ar fi dupa mine as lasa lumea sa se drogheze si sa moara. Tratarea drogatilor pe banii oamenilor platitori de taxe e ca naiba. As vrea o lume in care sa pot sa aleg daca sunt solidar sau nu. Eu nu as fi, iar celelalte specii existente pe planeta nu sunt nici ele solidare. Deja incit la violenta ca Mircea Badea si conform noii legi a lui peste fac inchisoare ca indemn la jihad, desi asa mujahid cum sunt nu am nimic cu nimeni.

2009-05-02

Ce au cu calculatorul?

Originally posted on Aedoh forum:

M-am saturat sa aud oamenii ca au ceva impotriva "calculatorului". Nu tehnologia este "evil", ci oamenii o folosesc adesea fara discernamant. Din punctul meu de vedere romanii habar nu au de tehnologie. Priveste pe situl http://www.ted.com/ si convinge-te.
Tinerii din ziua de azi sunt "a new breed", oameni fundamental globalizati si democratici. Internetul a ajutat la stergerea partiala a granitelor, cunoasterea este disponibila in cantitati uriase... Realizezi destul de repede ca nu poti sti si nu poti citi nici macar o zecime din cat exista (i.e. poti petrece cativa ani citind doar situl http://www.howstuffworks.com/). De aceea oamenii de maine se bazeaza pe infrastructura informatica, pe baze de date create automat de motoare de indexare, pe accesul oricand si oriunde la retea. Din toata masa aceasta de informatie trebuie sa alegi ce este relevant pentru tine... Invatamantul clasic, evident, nu face fata nevoii de "customization" a informatiei pentru fiecare individ.
"And there is real Romania", romanii (in proportie mai mare cei tineri) sunt foarte ancorati in Internet pentru ca: massmedia traditionala esueaza dramatic in a furniza continut pentru ei, cu exceptia catorva posturi de muzica si cateva emisiuni cu intindere numarata in secunde, lipsa banilor nu permite vizitarea pe viu a unui loc sau obiectiv, si altele mult mai subtile si complexe. Internetul devine astfel o fereastra spre lume, creaza viata paralela in care inegalitatile par sa fie nivelate. Migrarea asta bineinteles ca enerveaza pentru ca regulile sunt schimbate brusc; multi tineri lipsesc din viata reala, s-au virtualizat; astfel nu mai poti sa ajungi la ei cu produsele tale atat fizice, cat si intelectuale; nu mai participa haotic la munca pe viata pentru un camion de caramizi (i.e. o casa) sau o tona de tabla (i.e. o masina), tot ce au nevoie e apa, paine si bandwidth.

Nu pot sa fiu mai in dezacord de atat cu mentalitatea de genul: Toti copii sunt interesati de droguri si alte tampenii in loc sa se preocupe de ce e specific varstei.
In primul rand este mult prea generalizat toti copiii... Cam cat inseamna acest toti? Lipsa de incredere in tineri nu ajuta la nimic, insa adanceste si mai mult "gap"-ul dintre generatii. Drogurile sunt o problema, dar nu este extinsa la toata generatia, iar in ce priveste tampeniile, cel putin maturii au demostrat ce le-a putut capul in tara asta (i.e. razboaie, comunism, rasism, furt). Apoi este evident ca ce era specific varstei acum 20, 100, 1000 de ani nu mai este specific unei anumite varste acum.

Time has changed, therefore it's time for youth to claim equlity in rights.

Endnote: Cei care vor zice ca am scris intr-o limba neromana, sa considere faptul ca limba romana este o mixtura de toate limbile peste cele cateva sute de cuvinte dacice, asa ca tundeti iarba in alta parte.