.htaccess – detect mobile devices and redirect to the propper page

in file .htaccess add next code to detect mobile device and redirect to the proper location:


RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} “(Android|iPod|iPhone|iPad)” [NC,OR]

RewriteCond %{HTTP_USER_AGENT} “sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera” [NC,OR]
RewriteCond %{HTTP_USER_AGENT} “mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox”[NC,OR]
RewriteCond %{HTTP_USER_AGENT} “blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-”[NC,OR]
RewriteCond %{HTTP_USER_AGENT} “portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc”[NC,OR]
RewriteCond %{HTTP_USER_AGENT} “smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|android”[NC]

RewriteRule .* http://www.google.com?q=%{HTTP_USER_AGENT} [L]

jQuery trigger custom event synchronously

To force anything to be synchronous using jQuery:


$.when($(this).trigger('custom-event')).done(function(){
window.location.href = 'url';
});

trigger event is sychronous it makes an effect running inside the triggered event, and the expected method was being called inside the callback.

Stackoverflow: jQuery trigger custom event synchronously

jQuery.when function

Conversie cod culori din Hexadecimal in RGB folosind PHP


function hex2rgb($hexCode) {
$hexCode = str_replace("#", "", $hexCode);

if(strlen($hexCode) == 3) {
$r = hexdec(substr($hexCode,0,1).substr($hexCode,0,1));
$g = hexdec(substr($hexCode,1,1).substr($hexCode,1,1));
$b = hexdec(substr($hexCode,2,1).substr($hexCode,2,1));
} else {
$r = hexdec(substr($hexCode,0,2));
$g = hexdec(substr($hexCode,2,2));
$b = hexdec(substr($hexCode,4,2));
}
$rgbCode = array($r, $g, $b);
return $rgbCode; // intoarce un array cu valorile [0]=R, [1]=G, [2]=B
}


$rgbArr = hex2rgb("#ffffff");
$rgb =implode(",", $rgbArr ); // intoarce valorile RGB separate prin virgula

Aplicabilitate
Setare culoare background dinamic cu opacitati diferite:

<style>

.fullOpacity{background:rgb(<?php echo($rgb); ?>)}
.halfOpacity{background:rgba(<?php echo($rgb); ?>, 0.5)}
.minOpacity{background:rgba(<?php echo($rgb); ?>, 0.1)}
.higherOpacity{background:rgba(<?php echo($rgb); ?>, 0.8)}
…..
</style>

Trimiterea de emailuri din PHP folosind autentificare SMTP

1. Creati fisierul emailtest.php
2. Copiati codul urmator in fisierul creat la 1)

require_once "Mail.php";
$from = "Sender";
$to = "Receiver";
$subject = "Test";
$body = "Email sent";
$host = "webiste_domain.com";
$username = "no-reply@webiste_domain.com";
$password = "password of the no-reply email account";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("

" . $mail->getMessage() . "

");
} else {
echo("

Message successfully sent!

");
}
?>

3. Salvati fisierul si copiati-l in radacina site-ului
4. accesati fisierul in browser folosid calea directa. Ex: www.webiste.com/emailtest.php
5. In cazul in care nu au aparut erori se va afisa un mesaj de succes. Emailul va fi trimis catre adresa specificata
6. In cazul in care au aparut erori acestea vor fi afisate in pagina.
6.1 Daca eroarea este legata de serverul de smtp solicitati aceasta informatie de la provederul de hosting.

Ce vine nou în PHP 5.5

finally

Cuvântul cheie finally completează constructul try .. catch ... Acesta marchează instrucțiunile ce vor fi urmate indiferent dacă vor fi prinse excepții sau nu. Perfect pentru situații când vrei să manipulezi rezultatul constructului try .. catch, procesând codul neriscant in blocul finally. O altă utilizarea ar fi procesul de curățare a codului, spre exemplu, asigurând că nu încerci să închizi același stream de mai multe ori.

list în foreach

Construcția list există încă din PHP4, dar nu era posibil să fie folosită într-un foreach. În PHP5 poți folosi list în mod direct pentru a mapa variabile dintr-un array multidimensional

$agenda = array(
   array('Martinel', '0727000000'),
   array('Toto', '0727010101')
);

foreach($agenda as list($nume, $tel)) {
	echo "$nume :: $tel \n";
}

Generatori

Îți permite să creezi funcții ce își păstrează starea de la o rulare la alta. Se folosește de un nou construct, yield, ce poate fi folosit atât pentru input cât și pentru output.

Când ajunge la o linie ce conține yield, PHP va îngheța execuția funcției și va continua să ruleze fluxul principal al programului. Când îi spui să continue, PHP se va duce și va dezgheța funcția de unde a rămas, conservând valorile oricărei variabile locale definite până acolo.

Acest construct permite implementarea conceptului de Lazy Evaluation, ce îți permite să definești seturi infinite de date.

Spre exemplu, mulțimea numerelor Naturale poate fi definită astfel:


function numere() {
 $numar = 0;
 while(true) {
   $numar++;
   yield $numar;
 }
}


$num = numere();
$num->current(); // o sa fie 1

/*la next(), PHP dezgheata executia functiei unde a ramas, 
adica in blocul while, deci numar nu se redeclara 
ca fiind 0
*/
$num->next(); 
$num->current(); // o sa fie 2
?>

Celălalt mod în care se mai poate folosi yield este de a trimite data către funcție în timpul rulării.


function perfetsqr() {
	while(true) {
		$v = yield;
		echo ($v * $v) . "\n";
	}
}

$multi = perfectsqr();
for($i = 0; $i < 10; $i++) {
	$multi->send($i);
}

Acesta este un simplu generator de pătrate perfecte. Toți generatorii pornesc dintr-o stare de pauză, din care se dezgheață în momentul în care se trimite un send sau un current până când ajunge la un yield.
Toate aceste lucruri ar fi putut fi făcute în vechiul PHP, însă generatorii ne oferă un mod mai elegant, mai eficient și mai rapid. Plus, un generator poate fi folosit într-un foreach.

Scrierea instructiunilor pentru instalarea / utilizarea unei aplicatii.

O corvoada in general, nu-i asa? Ce poate fi atat de greu sa urmezi “aceste instructiuni simple” cand totul merge aproape de la sine?
Ei bine, privind din partea cealalta, a persoanei care trebuie sa le urmeze, am avut o revelatie.
Citind un set de instructiuni vagi esti pus is situatia fie de a recunoaste ca esti incapabil sa intelegi ceva “atat de simplu” fie sa consideri ca cel care le-a scris nu a facut o treaba deloc stralucita.
ADN-ul tau va prostesta vehement in fata primei optiuni drept pentru care nu iti mai ramane altceva de facut decat sa soliciti mai multe detalii, sa pui intrebari, sa ceri lamuriri.
Daca dupa ce primesti un document actualizat esti la fel de nedumerit ca prima data deja ti se creeaza un sentiment de frustare, capeti o atitudine ostila fata de autorul acelor texte fara noima si ceri refacerea lor pe un ton ceva mai artagos.
In cazul in care ajungi la a treia incercare cel mai probabil ai sa renunti la a utiliza ceva atat de prost facut, atat de incalcit si vei opta pentru ceva mai simplu.

Pentru a nu ajunge in situatia in care un proiect va este refuzat din motivele expuse mai sus am sa mentionez o lista de sfaturi pentru a preveni unele dintre problemele ce pot aparea:
1. Incepe cu o scurta descriere , 2-3 fraze in care sa expui ce face aplicatia in beneficiul utilizatorului, de ce ii este necesara;
2. Listeaza instructiunile de configurare, cerintele necesare functionarii aplicatiei incepand fiecare propozitie cu un verb;
3. Nu da optiuni acolo unde nu este cazul. Asta il va obliga pe utilizator sa gandeasca, sa aleaga, iar utilizatorul nu vrea asta, a platit pentru ceva ce trebuie sa mearga;
3.1. Denumeste valoarea implicita iar in cazul in care mai multe variante sunt posibile, enumerale la sfarsit.
4. Nu da detalii inutile pentru utilizatorul final. Nu are niciun interes in complexitatea procedurilor din spatele aplicatiei. Daca va avea astfel de curiozitati o sa le ceara ulterior;
5. Nu amesteca ideile. Daca ai considerat ca sunt necesare detalii suplimentare despre anumite functionalitati, scrie-le separat si fa trimitere la ele;
6. Fa o lista cu probleme cunoscute. Nimic nu este mai neplacut decat ca utilizatorul sa descopere disfunctionalitati. Arata-i ca le cunosti si va avea incredere ca le vei rezolva acolo unde este posibil.

Scopul tau nu este sa ii arati utilizatorului final ca este incapabil, scopul tau este sa ii oferi o unealta care sa il ajute, sa ii rezolve problemele si care sa ii arate cat esti tu de capabil. Cel mai probabil va apela la serviciile tale si pe viitor si asta este ceea ce iti doresti, nu-i asa?

front-end framework for faster and easier web development.

Un framework cu un set de utilitati pentru frontend, meniuri, butoane, popup-uri etc.

Foarte util si robust, merge pe toate browsere.

http://twitter.github.com/bootstrap/index.html

Modify and filter the HTTP request headers sent to web servers

Add, Replace and Filter HTTP request headers.
Modify Headers allows modification of the HTTP request headers sent to web servers.
This addon is particularly useful for Mobile web development, HTTP testing and privacy.

Exemplu de a maska adresa IP sursa youtube

Sursa Add-on aici

Add-on FireQuery – simpla integrarea si rularea lui jquery in pagina web in firefox

About this Add-on

FireQuery is a collection of Firebug enhancements for jQuery. Requires Firebug 1.3 or greater.

Features:

jQuery expressions are intelligently presented in Firebug Console and DOM inspector
attached jQuery data are first class citizens
elements in jQuery collections are highlighted on hover
jQuerify: enables you to inject jQuery into any page

Video cum putem sa-l folosim sursa youtube

Sursa Add-on gasiti aici

cum se pot trimite parametrii catre un javascript extern

Presupunem ca avem un fisier extern care executa niste functii de javascript, acesta este inclus in pagina noastra folosing tagurile corespunzatoare

< script type="text/javascript" language="JavaScript" src=".... < /script>

in acest script vrem sa trimitem niste parametrii

?page=general&id=123123

in tagul nostru de javascript extern scriem urmatoarele:

< script type="text/javascript" language="JavaScript" src="do_javascript.php?page=general&id=123123"/>

in fisierul do_javascript.php setam header-ul care seteaza fisierul ca fiind unul de javascript

Initializam parametrii primiti din URL in formatul lui javascript,


echo "var page = '{$_GET['page']}';";
echo "var id = '{$_GET['id']}';";
?>

In asa fel putem sa folosim parametrii trimisi prin request.

This theme is sponsored by Things to do in denver along with Adult hits radio, Corporation Offices and logo search