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).