. // // Alexey A.Znayev, znaeff@mail.ru, http://xbsoft.org, http://xbsoft.ru // /////////////////////////////////////////////////////////////////////////// // This file contains public class DNSBL // This class performs IP address check in spam blocking lists as described // on http://ru.wikipedia.org/wiki/RBL class DNSBL { private $_aCheckers = array( // list of checkers available for individual checking 'spamhaus' => array('.zen.spamhaus.org', true), //available for group checking with 'all' key 'spamcop' => array('.bl.spamcop.net', true), //available for group checking with 'all' key 'dsbl' => array('.list.dsbl.org', false), //not available for group checking with 'all' key 'ordb' => array('.relays.ordb.org', false), //not available for group checking with 'all' key 'sorbs' => array('.dnsbl.sorbs.net', false), //not available for group checking with 'all' key 'njabl' => array('.dnsbl.njabl.org', false) //not available for group checking with 'all' key ); // AZ - 1. Key 'all' is illegal // AZ - 2. Most of spammer IP addresses is covered by 'spamhaus' & 'spamcop' (and they are fast), // some of the rest may not work sometimes, you can make them group checking available after individual testing private $_sDefaultChecker = 'spamhaus'; /////////////////////////////////////////////////////////////////////////// // CheckSpamIP - check IP for spam in checkers : given, default or all available for group checking (may be slow) // parameters: // string $ip - ip address // string $checker - checker name or 'all' or nothing // returns: // true when IP exitsts in spam-lists of $checker or at least one of all checkers // false when not or when ip address is local or not correct public function CheckSpamIP($ip, $checker = ''){ if(empty($ip)) return false; if(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip) != 1) return false; $octets = explode('.', $ip); if($octets[0] == '127') return false; if($octets[0] == '10') return false; if($octets[0] == '192' && $octets[0] == '168') return false; if($octets[0] == '169' && $octets[0] == '254') return false; // ms windows if((int)$octets[0] > 255 || (int)$octets[1] > 255 || (int)$octets[2] > 255 || (int)$octets[3] > 255 ) return false; $ret_val = false; $PTR = implode(array_reverse($octets), '.'); if($checker === 'all'){ foreach(array_values($this->_aCheckers) as $c){ if($c[1]){ $ret_val = $ret_val || $this->_CheckDNSAnswer(dns_get_record($PTR . $c[0], DNS_A)); } if($ret_val) break; } }else if(array_key_exists($checker, $this->_aCheckers)){ $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$checker][0], DNS_A)); }else{ $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$this->_sDefaultChecker][0], DNS_A)); } return $ret_val; } /////////////////////////////////////////////////////////////////////////// // GetCheckers - gets list of available checker names // returns: // array of strings public function GetCheckers(){ return array_keys($this->_aCheckers); } /////////////////////////////////////////////////////////////////////////// // GetGroupCheckers - gets list of checker names available for group checking with 'all' key // returns: // array of strings public function GetGroupCheckers(){ $ret_val = array(); foreach(array_keys($this->_aCheckers) as $k) if($this->_aCheckers[$k][1]) array_push($ret_val, $k); return $ret_val; } /////////////////////////////////////////////////////////////////////////// // GetDefaultChecker - gets default checker name // returns: // string public function GetDefaultChecker(){ return $this->_sDefaultChecker; } /////////////////////////////////////////////////////////////////////////// // SetDefaultChecker - sets default checker name // parameters: // string $new_checker - new default checker name // returns: // true when success // false when failed ($new_checker is not in the list of available checker names) public function SetDefaultChecker($new_checker){ if(array_key_exists($new_checker, $this->_aCheckers)){ $this->_sDefaultChecker = $new_checker; return true; }else{ return false; } } /////////////////////////////////////////////////////////////////////////// // EnableGroupChecking - sets checker available for group checking // parameters: // string $checker - checker name // returns: // true when success ($checker is included) // false when failed ($checker is not in the list of available checker names) public function EnableGroupChecking($checker){ if(array_key_exists($checker, $this->_aCheckers)){ $this->_aCheckers[$checker][1] = true; return true; }else{ return false; } } /////////////////////////////////////////////////////////////////////////// // DisableGroupChecking - sets checker not available for group checking // parameters: // string $checker - checker name // returns: // true when success ($checker is excluded) // false when failed ($checker is not in the list of available checker names) public function DisableGroupChecking($checker){ if(array_key_exists($checker, $this->_aCheckers)){ $this->_aCheckers[$checker][1] = false; return true; }else{ return false; } } // private methods /////////////////////////////////////////////////////////////////////////// // _CheckDNSAnswer - checks DNS-server answer for 127.0.0.* values // returns: // true when success // false when failed private function _CheckDNSAnswer($dns_answer){ if(!is_array($dns_answer)) return false; $len = count($dns_answer); if($len <= 0) return false; for($i=0; $i<$len; $i++){ $obj = $dns_answer[$i]; if(!(is_object($obj) || is_array($obj))) return false; $ip_str = $obj['ip']; if(!is_string($ip_str)) return false; $pos = strpos($ip_str, '127.0.0.'); if($pos !== false) return true; } return false; } } // end of class DNSBL ?> Gamepad Bluetooth Ipega

Gamepad Bluetooth Ipega

El abanico de juegos disponibles para los móviles de hoy en día (ya sean del androide o de la manzanita) es inmenso, y más aún si echamos la vista atrás y jugamos a los juegos de antaño gracias a los emuladores. Todo está muy bien, pero existe el inconveniente de que para jugar tenemos que pulsar una serie de botones virtuales que aparecen en la pantalla, y esto conlleva que nuestros dátiles (llámense también dedos) tapan gran parte de la misma. Si te ves identificado con este problema, quizás te interese este artículo.

Mando Ipega

Los chicos de la compañía china iPega han diseñado un Gamepad que hará las delicias de cualquier aficionado al mundo de los videojuegos, ya sea para los más adictos como para los casuales. Esto es gracias a su versatilidad en cuanto a los dispositivos a los que se puede conectar y a su facilidad de instalación y uso.

Veamos a fondo este dispositivo

El equipo viene presentado en una caja de plástico donde se incluye, además del mando, un cable USB – microUSB y un pequeño manual de instrucciones.

IMG_20140418_135515~2

IMG_20140418_135916~2

El mando en sí, a pesar de ser ligero, no es nada frágil, y se adapta muy bien a las manos. La pulsación en todos los botones es bastante buena y sólida, pero quizás los sticks analógicos no son del todo manejables, y más si los comparamos con mandos como los de la PS3, aunque la comparación quizás esté fuera de lugar.

En total posee 4 botones principales (X, Y, A, B), 2 botones traseros (L, R), 4 botones de dirección (cruceta), 2 sticks analógicos, SELECT, START y un botón de encendido HOME. Ah, también incorpora un botón en la parte trasera de Reset en el caso de que el mando se quede «pillado», cosa que aún no me ha pasado.

Incorpora 2 LEDs, uno que parpadea cuando está esperando a ser enlazado y se queda fijo cuando ya lo está, y otro LED que se enciende mientras está en carga mediante la conexión micro USB que posee.

Para sujetar el móvil utiliza un brazo telescópico que sube de la parte trasera y permite que se quede bien firme y sujeto al mando.

Conexión al móvil o tablet

El mando se conecta al móvil vía Bluetooth, lo que elimina cualquier cable y hace más fácil su uso. Para conectarlo tenemos que encender el mando en modo Joystick (dejar pulsado el botón X mientras se presiona HOME) y hacer una búsqueda de dispositivos Bluetooth con nuestro terminal. Encontraremos un dispositivo que se llama «ipega gamepad controller» y ahora tan sólo hay que conectarse a él seleccionándolo. El LED de SEARCH que estaba parpadeando en el mando se quedará fijo, indicando que está perfectamente enlazado al móvil. Y ya está listo para su uso.

Uso

La mayoría de los juegos nuevos están pensados para ser utilizados mediante la pantalla táctil. A pesar de que alguno que otro se podría utilizar con el mando, ya sea de manera nativa o mediante mapeadores, personalmente pienso que el gran potencial de este mando se encuentra en los emuladores. Como ejemplo de emuladores tenemos «RetroArch«, que reúne un gran número de emuladores en una sola aplicación, «My Boy! Free» un potente emulador de Game boy Advance o el famoso «MAME4droid» donde podrás jugar a prácticamente todos los juegos de recreativas de la historia. Todos ellos son gratis, pero has de buscar las ROMs de los juegos por la red. La aplicación CoolRom te ayudará a encontrar los que busques.

Y como se suele decir, un vídeo vale más que mil palabras, aquí tengo una demostración de su uso, en la que se aprecia que el tiempo de respuesta desde que se pulsa un botón hasta que realiza esa acción es prácticamente nulo.

Donde conseguirlo

Si quieres conseguir uno de estos fantásticos mandos inalámbricos pásate por la tienda de MobileFun.

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Connect with Facebook