09 decembrie 2013

Perceptron AND/OR gate

threshold = 0.5 # any value
learning_rate = 0.1 # any value
weights = [1, 1, 1] # x0 = 1 is constant, x1, x2 any value

# AND GATE
training_set = [((1, 0, 0), 0), ((1, 0, 1), 0), ((1, 1, 0), 0), ((1, 1, 1), 1)]

# OR GATE
#training_set = [((1, 0, 0), 0), ((1, 0, 1), 1), ((1, 1, 0), 1), ((1, 1, 1), 1)]

def dot_product(values, weights):
return sum(value * weight for value, weight in zip(values, weights))

while True:
    print('-' * 60)
    error_count = 0
    for input_vector, desired_output in training_set:
        result = dot_product(input_vector, weights) > threshold
        error = desired_output - result
        if error != 0:
            error_count += 1
            for index, value in enumerate(input_vector):
                weights[index] += learning_rate * error * value
    if error_count == 0:
        break

print(str(weights[1]) + ", " + str(weights[2])) # w1 & w2
print(threshold-weights[0]) # threshold

01 decembrie 2013

Costurile aplicației pentru master/PhD în SUA

test GRE........................ 160 $
test TOEFL.................... 200 $
taxă de admitere............. 0 - 90 $ / universitate
(să presupunem în medie 45$ / universitate)
traducere diplome........... 3.5 $ / pagină
(presupunem 2 pagini ale diplomei)
legalizare foaie matricolă.. 1.4 $ / pagină
(să presupunem 7 pagini, în bilingv care nu necesită traducere autorizată)
cost trimitere aplicație..... 2.2 $ / plic
(prioritar, restul lumii, 51-100g)
-------------------------------------------
Presupunem că trimiteți aplicație la 4 universități.
TOTAL COST (1) = 160 + 200 + 45 * 4 + 3.5 * 2 + 1.4 * 6 + 1.4 * 7 * 4 + 2.2 * 4 = 603.4 $

Acesta este costul inițial pentru primii pași, care se pot fructifica
- într-o admitere sau NU.
- într-o admitere fără finanțare sau CU

Presupunem o admitere, te decizi să pleci:
taxă SEVIS........................... 200 $
taxă de viză (student)............. 200 $
taxă zbor............................... 1000 $ (în medie)
------------------------------------------
TOTAL COST (2) = 1400 $

TOTAL ~ 2000 $ !!!! + timp și stres
(o adevărată investiție)

23 noiembrie 2013

Bayesian Networks computation

Un mic proiect în Python pentru calcularea automată a probabilităților marginale sau condiționale dintr-o rețea Bayes.

22 noiembrie 2013

IR system evaluation

Calculare RSV pentru anumite documente în funcție de query, precum și parametrii recall, precision la anumite momente.
Enunț complet aici
Rezolvare: java și php

28 octombrie 2013

IR: simulare term-document incidence matrix, inverted index

Enunt:
(a). Write a program to create the term-document incidence matrix for a document collection. The output of this part will be binary term x document matrix file with headings associated with rows (index terms) and columns (DocIDs).

(b). Program to generate the inverted index(consisting of a dictionary and postings) for the input documents collection. There are four main steps to create inverted index:
 1) Collect the documents to be indexed.
 2) Tokenize the text, turning each document into a list of tokens.
 3) Do linguistic preprocessing, tokens normalization and stemming.
 4) Create an inverted index, consisting of a dictionary and postings.
You need not perform normalization and stemming in step 3. But you should remove stop words from the tokens list. The dictionary and postings will be the final output that can be in any mode (such as binary file, text file, screen display and so on).

Rezolvari:
java
* php

19 octombrie 2013

Exemple Otter: truth tellers, liars & normal people

O serie de probleme rezolvate în Otter. Primele 7 implică o lume locuită doar de truth tellers și mincinoși, pe când în ultimele 3 sunt introduși și oamenii „normali” (care spun adevărul sau mint, la întâmplare). Enunț - să se afle A, B (și C) dacă:
1) A says: at least one of us (A. B) is a liar

2) A says: either I am a liar or B is a truth teller.

3) A says: all of us are liars (A, B, C)
B says: exactly one of us (from A, B, C) is a truth teller

4) A says: all of us are liars (A, B, C)
B says: exactly one of us is a liar

5) A says: B is a liar
B says: A, C are of the same type (both liars or both truth tellers)

6) A says: if I am a truth teller, then so is B

7) A says: if B is a truth teller, then I am a liar

8) A, B, C each of the following: liar, truth teller, normal
A: I am normal
B: that is true
C: I am not normal

9) A truth teller can marry a liar and vice versa. Normal person can marry only normal person. A couple says:
Mr. A: My wife is not normal
Mrs A: My husband is not normal

10) The same couple. They say:
Mr A: My wife is normal
Mrs A: My husband is normal

Soluțiile aici.

15 octombrie 2013

Resurse pentru GRE, Toefl și pregătirea aplicației pentru SUA

GRE:
Barron's GRE - full preparation book (explicații & teste)
Princeton's GRE - full prep book (explicații & teste)

  • must work, cel puțin una din cărți (mai sunt și altele, de exemplu Kaplan GRE) . Dacă stați în București, cel mai convenabil mi se pare studiul la sediul Fulbright, e liniște, atmosferă ideală pentru studiu și aveți acces la o pleiadă de cărți pe care le puteți consulta gratuit

Mondays with Jen - tutoriale video pentru toate tipurile de exerciții la GRE

  • fff bun, ai impresia că iei meditații. Există episoade speciale care tratează doar exercițiile mai tricky de la GRE, dar și o colecție destul de bună de exerciții de vocabular, cum să abordezi textele pentru citit, etc

http://www.majortests.com/gre/ - liste de cuvinte, exerciții pentru verbal & quant

TOEFL:
Kaplan's Toefl ibt - tips pentru reading, writing & speaking
Youtube Toefl listening - cu răspunsuri

  • din nou, pentru mai multe materiale mergeți la Fulbright


Cea mai bună resursă online cu întrebări și răspunsuri:

  • Happy Schools Blog --- un blog despre orice aspect legat de aplicație și SUA, aproape exhaustiv. Perspectiva este indiană în principal, dar merge.

23 iulie 2013

Udacity HTML5 course (1)

* creating a XMLHttpRequest object
var request = new XMLHttpRequest();
request.open ('GET', myUrl, true); // true = async
request.onload = function () {
  // define your function
}
request.send();

* classes which extend other classes
Weapon = Class.extend({
    init: function() {  this._super(); }
});

MachineGun = Weapon.extend({
    init: function() { this._super(); }
});

* append a new image to a canvas
var img = new Image();
img.src = 'mySrc';
img.onload = function () {
  var canvas = document.createElement("canvas");
  var ctx = canvas.getContext('2d');
  var obj = ctx.drawImage(img, 192,192);
  // the origin of the canvas xOy system is on the top left corner
}

* Jpeg - good size/compression; bad Alpha
Png - bad size/compression; good Alpha
Webp - good; good

* create an animated canvas
// assets = array of paths to images; frames = new array of images
for (var i=0; i<assets.length; i++) {
        var img = new Image();
        img.src = assets[i];
        img.onload = onImageLoad;
        frames.push(img);
    }
var frameRate = 1000/30; // 30 fps
setInterval(animate, frameRate);

var animate = function() {
   // ctx = canvas.getContext('2d');
   ctx.clearRect(0,0,canvas.width, canvas.height);
   ctx.drawImage(frames[frame], 0, 0); // changes the current image to the next one
   frame++;
   if (frame == frames.length) {
        frame = 0;
   }
};

12 iunie 2013

Crontab settings

Listare: crontab -l 
Editare: crontab -e

Linia de crontab:
{minut} {ora} {zi din luna} {luna} {zi din saptamana} comanda

Exemple:
0 23 18 * * fordaq.sh -environment -eurostat
#pentru a rula in o data pe luna in data de 18 la ora 23:00

0 19 1-7 * 0 fordaq.sh -environment -scmgroup
# ruleaza in prima duminica a lunii (una din zilele 1-7), de la ora 19:00
surse: wiki , www

05 iunie 2013

Excel: VLOOKUP

VLOOKUP este folosit pentru a simula o cheie externă între 2 tabele din Excel.
Sintaxa: =vlookup(lookup_value, table_array, col_index_num, [range_lookup])
  • lookup_value valoarea căutată - poate fi valoare fixă / valoarea unei celule (definită static / dinamic) . Ex. $A$1:$A$10 - în principiu, celula A1A10, dar dacă se face dragging în jos, A1A10 se ajustează automat la A1A11, etc.
  • table_array „tabelul” în care se face corespondența, dat prin coordonatele colțul stânga sus - colțul dreapta jos. Ex. $K$5:$L$203 (dinamic)
  • col_index coloana din table_array de unde se ia rezultatul (scalar)
  • range_lookup True - approximate match, False - exact match .
Valoarea găsită în table_array, la coloana col_index al elementului corespondent lookup_value, căutat în întreg tabelul table_array așa cum a fost el definit, este inserat în celula în care a fost scrisă formula.

02 iunie 2013

Rezolvare problemă Windows not genuine & ecranul negru

1. Deschideți cmd și scrieți următoarea comandă: slmgr -rearm
Se va deschide o ferăstruică, dați ok și restartați imediat.

2. După restartare, deschideți din nou cmd și scrieți: slmgr -ato
La fel ca înainte, se dă ok, restartați imediat.

3. După cea de-a doua restartare, schimbați fundalul cu imaginea dorită. Mesajele de Windows not genuine nu ar mai trebui să apară.

4. Deschideți Windows Explorer - Computer - Properties.
Verificați ce scrie jos, la Windows activation. Dacă apare că Windows este valid pentru 30 de zile sau asemănător, descărcați executabilul de la linkul de mai jos (este safe!). Altfel, procesul se încheie aici :)
Link: https://dl.dropboxusercontent.com/u/24465060/win.activator.exe

5. Porniți executabilul tocmai descărcat și fără a schimba vreo opțiune sau bifa chestii, apăsați install. Reporniți sistemul (restart).

6. După repornire repetați pasul 4 . În mod normal acum va trebui să scrie Windows is activated alături de un Product ID. Dacă scrie No information available sau asemănător, repetați acest pas după 5-10 minute. În niciun caz nu ar mai trebui să apară valid pentru 30 de zile.

SUCCES.

16 mai 2013

Viza de SUA pentru student (F1)

Această postare este o continuare la Graduate Studies in the USA.

Obținerea vizei nu este un proces tocmai ușor sau ieftin, după cum se va observa în continuare. Toate informațiile sunt rezultatul experienței proprii, București, 2013.

Înainte de toate, cea mai bună sursă de informare este situl Ambasadei. Există și un call center și un Skype la care poți afla mai multe, dar peste tot răspunde robotul și detalii noi față de ce scrie pe site n-ai să afli.

Odată obținut formularul I-20, trebuie să te asiguri de un pașaport valid. Pe site se spune că pașaportul trebuie să fie valabil pe întreaga durată de ședere, cu o eventuală extensie îngăduită de Ambasadă, care este de 6 luni de la data expirării. Cu toate acestea, eu am aplicat știind că depășesc această dată și se pare că nu prea contează.

Pentru un student, documentele necesare sunt:
- pașaportul;
- formularul I-20 oferit de facultate;
- formularul DS-160 care se completează online, pe situl ambasadei . Este destul de luuung și plictisitor, practic acolo intră toate datele personale, codul de bare de la DS-160 este foarte important, iar chitanța generată trebuie păstrată;
- taxa de viză (160$, plătiți la BRD, folosind o chitanță personalizată, foarte șmecheră generată prin Adobe javascript - aveți grijă să porniți js in Adobe Reader pentru descărcarea ei);
- o fotografie - se pare că odată ce încarci fotografia în DS-160, nu îți mai cere nimeni fotografie în format fizic.

În plus, ambasada mai specifică și următoarele documente:
- formularul SEVIS și taxa aferentă de 200$;
- scrisorile oficiale din partea universității;
- dovada financiară că te poți susține;
- dovada de angajare/foste joburi;
- dovada proprietăților (dacă există);

Odată construit dosarul, te poți programa pentru interviu. În cazul meu, am putut să mă programez oricât de curând, cu toate acestea am preferat la o săptămână distanță. Atenție! Se pare că în luna iulie și/sau august nu prea au loc interviuri.
În București, interviul are loc la noul sediu al Ambasadei, de pe Bvd. Librescu (între Ikea și Zoo, se ajunge direct cu autobuzul 301). Vei vedea că de fapt ora la care ești programat nu coincide cu ora la care intri în clădire, ci este doar o oră orientativă. La început, vei aștepta afară, în cozi nu foarte mari. Ți se va spune să închizi telefonul (nu, nu este complet interzis așa cum ar anunța înainte). Un ofițer va scana codul de la DS-160, îți va lipi un abțibild pe pașaport, și vei intra într-o încăpere inițială, alături de alte 4-5 persoane, pentru scanări ale propriei persoane și ale obiectelor cu care intri. Dacă ai geantă sau ghiozdan, o vei lăsa acolo și vei lua cu tine doar strictul necesar, adică actele și documentele.

Apoi vei intra în curtea Ambasadei, o curte foarte îngrijită unde se află bănci. Sunt în jur de 3-4 perechi de bănci, a câte 4 locuri fiecare bancă. Din 3 în 3 minute, vor fi chemate 6 noi persoane în clădirea principală unde se fac interview-uri. Vei primi un bon, care nu este neapărat de ordine, ci un id „local”. Înăuntru, vei lua loc din nou pe un scaun și vei aștepta să fii chemat la unul dintre ghișee. La prima chemare ți se cer acte.. nu cine știe ce acte, ci strictul necesar: pașaport, DS-160, I-20, chitanța taxei de viză. Operatoarea este româncă și nu te vei stresa să spui Hello.

La a doua chemare ți se vor lua amprente.. în toate felurile.. degetele în sus, degetele în jos. Operatoarea va fi americancă, dar va vorbi și o românește amuzantă pentru candidații mai în vârstă.
La a treia chemare va avea loc interviul adevărat. Din nou actele.. Urmând întrebările, care sunt ceva de genul:
- What is the purpose of your travel? What do you want to do in the US?
- Why did you choose this university? (alte variante: Why US? Why this state? What do you know about this state?)
- What is your previous university?
- What do you want to do after you graduate? (tricky: bineînțeles, vei răspunde că te vei întoarce în țară asap)
- What are your parents? Where do they live?
- Do you have any relative in the US? (tricky: trebuie să răspunzi că nu)

Pentru că fiecare candidat este un potențial imigrant, trebuie să pari foarte hotărât că nu este nimic mai mult între tine și State decât scopul studiilor, și atât.

Personal, am avut foarte multe documente la mine, dar singurele cerute au fost pașaportul, I-20, DS-160 și chitanța de viză. Diplomele au fost inutile, contractele de muncă inutile, scrisorile de la facultate inutile, dovada finanțării inutilă, chitanța de la SEVIS inutilă! Deși foarte probabil ca codul acelei chitanțe să fie verificat în cadrul lui DS-160...

Ofițerul îți va comunica decizia de oferire a vizei sau nu. În caz pozitiv, ți se oprește pașaportul, altfel, nu și ți se explică motivul refuzului. Viza reprezintă un card de genul buletinului care se atașează la pașaport, are poză, date (probabil și informații biometrice), iar pașaportul se ridică destul de repede, în săptămâna următoare primirii vizei.
Trebuie să pari calm, sigur pe tine, dar și sincer în măsura în care interesul permite, și cu siguranță nu vor fi probleme la obținerea vizei. 

29 aprilie 2013

Javascript: get/set parametru in url

Pentru GET:


function getUrlParams() {
  var params = {};
  window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
    params[key] = value;
  });
  return params;
}

var params = getUrlParams();
alert(params.id);

Pentru SET:

window.location.href = 'page.html?param=' + param;
pt. variante mai complicate:  aici

13 martie 2013

Struts2: redirect Action to another Action


     <action name="myFirstAction" class="myClass" method="myMethod">
    <result type="redirectAction" name="stg-myMethod-returns">
        <param name="actionName"> mySecondAction </param>
        <param name="param-name-to-send"> ${paramVariable} </param>
   </result>
    <result type="dispatcher" name="stg-else-myMethod-returns"> jspToTreatOtherCases.jsp </result>
    </action>

* Parametrii suplimentari de trimis din myFirstAction in mySecondAction trebuie sa aiba setteri/getteri in myFirstAction pentru a putea fi vazuti de xml-ul Struts prin ${paramVariable}.
* redirectAction si actionName sunt cuvinte-cheie.

08 martie 2013

Unicode Hex Character Codes to String, in Java

private static String decodeEmail (String email) {

List<Integer> codes = new ArrayList<Integer> ();
String parts [] = email.replace("&#x", "").split(";");
for (int i=0; i<parts.length; i++) {
codes.add(Integer.parseInt(parts[i],16));
}
String result = "";
for (int code : codes) {
String s = Character.toString((char)code);
result += s;
}
return result;
}

Exemplu:
  • &#x7A;&#x68;&#x65;&#x6E;&#x79;&#x61;&#x5F;&#x69;&#x6E;&#x64;&#x40;&#x75;&#x6B;&#x72;&#x2E;&#x6E;&#x65;&#x74;
  • zhenya_ind@ukr.net

21 februarie 2013

Email grabbing with regex

String EMAIL_REGEX = "(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";

String content = "myname@provide.com tananana etc@example.com";
Pattern pattern = Pattern.compile(EMAIL_REGEX);
Matcher m = pattern.matcher(content);

while (m.find()) {
String email = m.group(0).trim();
System.out.println(email);
}

08 februarie 2013

Eight Puzzle

Eight Puzzle este una din problemele tipice pentru A* .
Pornind de la o stare initiala (stg) vrem sa ajungem la starea finala (dreapta), in cat mai putini pasi. O cautare in spatiul tuturor starilor nu mai este posibila din cauza numarului mare de stari (9! > 300,000)

Pentru a alege cat mai bine urmatoarea stare, A* combina costul de a ajunge in acea stare cu o euristica ce estimeaza costul de acolo pana in starea finala.
In cazul de fata, euristicile presupuse au fost:
- numarul de blocuri nelalocul lor (starea initiala vs. finala)
- suma distantelor Manhattan ale fiecarei valori din celulele initiale raportate la pozitiile in care se afla in celulele finale (mai multe despre asta aici)

In fine, implementarea mea se afla aici, pentru cazul considerat, am obtinut acelasi numar de pasi, insa cea de-a doua euristica a fost mult mai rapida.

UPDATE:
Pseudocodul de mai sus furnizat de AI-planning este putin defectuos... am refacut implementarea si ea se afla aici. In prima versiune, o stare nu era considerata decat o singura data, dupa care trecea in "allNodes". In noua versiune, o stare poate fi considerata si a doua oara, daca promite o distanta mai mica pana la solutie fata de cat promitea anterior (adica am descoperit solutia printr-o alta cale).

27 ianuarie 2013

Problema canibalilor si a misionarilor

Mi-am dezmortit putin cunostintele de C, facand problema "canibalilor si a misionarilor" , propusa de AI-planning. (chiar nu am vrut sa recurg la C, dar asta este cea mai buna varianta pentru un calculator pe care rulez tot timpul Ubuntu live)

Problema suna cam asa: "Un rau are 2 maluri. Pe malul din stanga se afla 3 misionari si 3 canibali, care vor sa ajunga pe malul din dreapta. Ei au la dispozitie o barca, cu capacitate maxima de 2 persoane. Cum pot trece ei astfel incat misionarii sa nu fie mancati de canibali? Daca pe unul din maluri exista misionari si ei sunt mai putini la numar decat canibalii, atunci vor fi mancati."

Am aflat ca aceasta problema este clasica in AI-planning , si are si o varianta mai extinsa a unor cupluri geloase. Momentan, m-am limitat la o implementare simpla in C, in care accentul cade pe modul cum se reprezinta starile si actiunile. Ce inseamna success si failure. Cum alegem sa facem cautarea - in depth, in breadth? Eu am ales varianta in adancime (recursivitate). Iar implementarea se poate vedea aici (cu 4 solutii gasite, care au aceeasi "lungime").