Mostrando entradas con la etiqueta curiosidad. Mostrar todas las entradas
Mostrando entradas con la etiqueta curiosidad. Mostrar todas las entradas

PHP ocupa el 3er puesto en la tabla de lenguajes mas usados de Febrero

Haciendo un pequeño review a las gráficas que sacó TIOBE hace escasos días me llevo una grata sorpresa en cuanto al progreso de PHP que voy a compartir con vosotros.

Tomemos una primera idea del progreso de PHP a lo largo del mes con esta primera imagen:




Grafica lenguajes mas usados


Como se puede apreciar PHP sube 2 posiciones frente a C++ y Visual Basic. A destacar también que progresa un 1.22%  frente a Febrero del año pasado.
Como curiosidad vemos que Java baja un -2.05% frente al año pasado y en las gráficas se puede ver como está tendiendo a perder su popularidad:


En la siguiente imagen podemos ver como PHP ha ido mejorando su "status" desde el año 2000 pasando de una 17ª posicion a un respetable 3er puesto.


PHP fué nombrado en el año 2004 como lenguaje del año y este año pasado go (el lenguaje de google) fue el que se llevó dicho reconocimiento.

Entradas recomendadas: Febrero

Este mes ha habido más de 15 feeds diarios por lo que una selección básica se me hace difícil espero no dejarme ninguno importante:

Programación:

Seguir traza de tus scripts
Comentarios condicionales de IE
PHP File Upload
Resetear autoincrement de MySQL
Best PHP Frameworks To build quickly complex web app
Free JS WYSIWYG Editor
Stop Spammer with Blacklist
Open Source Mysql Backup APP
Videos de seguridad para desarrolladores


SEO:

Los 200 parámetros del algoritmo de google
Open Site explorer. Herramienta para analizar enlaces y popularidad
Monitoreo Web con Specto
Recursos SEO Goggle para principiantes


Ubuntu:

Remover repositorios PPA
Actualiza tu ubuntu

Redes Sociales:

Rumor: twitter sin mysql?

Otros:

Firefox 3.6 Personalisación con Personas
Alternativas a Chrome más seguras
IfreeTable vs Ipad
[Humor] Tú que sabes de esto, ¿Me ayudas?

Por supuesto hay muchos más... pero tampoco tengo espacio para meterlos todos :P

Saludos

SyntaxHighlighter formata tus códigos de forma sencilla.

Hace ya mucho me vi en la obligación de crear un pequeño script para formatar correctamente códigos y así poder publicarlos en blogger.

Hace uno o dos días, hablando con yoyahack me explicó que existia una alternativa para "colorear" los códigos en tu blog o web independientemente del cms o la distribución.

Su nombre es SyntaxHighlighter

Su instalación es simple, solo debemos agregar estos códigos js en nuestras cabeceras:

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeRDark.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script>

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>


y a la hora de redactar encerraremos nuestro códgio entre:
<pre class="brush: js">

</pre>

o

<pre class="brush: php">

</pre>

Hay más lenguajes que estos dos, solo son los que yo uso más... también podemos omitir los scripts js de los lenguajes que no vayamos a utilizar.

El único inconveniente es que aún necesitamos un pequeño script para hacer la función htmlentities() y así no tener problemas con los símbolos < >.

El script que yo uso es:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" style="margin-bottom:40px">

<div id="formulario">

<textarea rows="20" cols="80" name="codigo"></textarea> <br />
<input type="submit" name="enviar" value="Formatear" /></div>

</form>

<?php

if (!empty($_POST['codigo'])) {

$codigo = $_POST['codigo'];
$codigo = str_replace("t", " ", $codigo);
$codigo = htmlentities(stripslashes($codigo));

$file = fopen("tmp.txt", "w");
fwrite($file, $codigo);
fclose($file);

$lineas = file('tmp.txt');
unlink('tmp.txt');

for ($i = 0; $i < count($lineas); $i++)
$resultado = $resultado.htmlentities($lineas[$i])."<br />";

echo '<h3> Inserta ste codigo en tu site: </h3>' .$resultado.'</div>';
}

?>

Eso es todo.

nax

El creador de MySQL lanza MariaDB, el sustituto de MySQL

¡Así es! El creador de MySQL Michael Wideniur, anunció en su blog personal el lanzamiento de un nuevo producto, un motor de bases de datos basado en el mismo MySQL y nos invita a testearlo.
En el sitio oficial, se puede ver toda la documentación de este nuevo motor de bases de datos. Aunque hay que tener en cuenta que este aplicativo no fue desarrollado desde cero ya que como hemos mencionado está basado en MySQL.

Leer entrada completa: Programando ideas

Chuleta vulnerabilidades OWASP Top 10 2010



Hoy en Google Reader me encuentro que Jeff Williams compartia este pdf proveniente del blog greeboo.net bajo la licencia de Creative Commons Attribution-Share.

El PDF trata de un TOP 10 de vulnerabilidades/errores a la hora de la programación de aplicaciones.

Desde las ya más que conocidas Injections y XSS pasando por sessiones de usuario desprotejidas, poca encriptación, etc.

Son 2 hojas que realmente vale la pena tener cerca a la hora de programar nuestra aplicación.

Descargar: OWASP 2010 TOP 10

Las variables variables de PHP

Aunque suene un tanto raro existen y quizá cueste un poquito de captar a la primera, así que recomiendo la doble lectura.

En algún momento dado podemos necesitar que el contenido de una variable sea el nombre de la varable.
Ejemplo:
tenemos la variable $boque =  "arbol";
queremos asignarle a una variable $arbol = "verde"; pero no siempre será arbol también podria ser planta.

Entonces, como lo hacemos? Ya que:

<?php

  $bosque 
= $arbol = "verde"; ?>


solo conseguimos 2 variables con el valor verde, que no es lo que buscamos.
Aquí entran las variables variables.

Asignación de una variable normal:

<?php

  $bosque 
= "arbol"; ?>


Ahora una variable variable siguiendo el ejemplo anterior:


<?php

  
$$bosque = "verde"; ?>


Y el efecto es asignar la variable $arbol = "verde";

Saludos
Nax

Cambiar mayúsculas y minusculas en la clave de un array

Hoy me vi en el aprieto de hacer una búsqueda de la clave de un array y retornar el valor.

El problema viene generado porque la clave puede estar tanto en mayúsculas como en minúsculas y eso puede afectar negativamente en la búsqueda de la clave probocando un resultado FALSE incorrecto.

Ejemplo: si busco A pero en el array existe a, dará false cuando en realidad es true.

Para hacer la búsqueda opté por una función quizá poco conocida: array_change_key_case()

Funciona de la misma manera que strtolower() y strtoupper() pero en las claves del array.

Un ejemplo de la función:

<?php

$var 
= array("Una" => 1, "dOs" => 2);
var_dump( array_change_key_case($var,CASE_LOWER));
// Salida: array(2) { ["una"]=>  int(1) ["dos"]=>  int(2) }
?>


como se puede apreciar las keys ahora son en mínusculas.

Tenemos las dos posibilidades: CASE_LOWER y CASE_UPPER

Ahora podemos hacer búsquedas en arrays sin miedo a dar falsos negativos.

Facebook nos presenta HipHop for PHP

Ayer hablabamos que el compilador de PHP era un JIT.

Hoy podemos obtener más información gracias a vivaPHP!

Según el ingeniero Haiping Zhao, HipHop for PHP les permitió reducir un 50% el uso de sus CPU lo cual implica un mejor rendimiento en la aplicación Facebook.

Hip Hop for PHP lleva ya 2 años de desarollo, pero reconocen que aún no está finalizado y que la actual versión puede considerarse una beta.
Se ha liberado bajo la misma licencia de PHP lo que permitirá a la comunidad acabar el desarollo de la aplicación dando su punto de vista y sus ideas.

Zhao nos explica que es realmente HipHop:

“HipHop no es técnicamente un compilador. En su lugar es un transformador de código. HipHop transforma tu código fuente PHP en un altamente optimizado código C++ y luego usa g++ (GNU C++) para compilarlo. HipHop ejecuta el código fuente en una manera semánticamente equivalente y sacrifica algunas características raramente usadas -como eval()- a cambio de una performance mejorada. HipHop incluye el transformador de código, una reimplementación del runtime de PHP y una re-escritura de varias extensiones de PHP comunes para aprovechar estas optimizaciones”.

Fuente: vivaPHP!

Diferentes formas de usar condicionales if

Hoy vamos a hablar un poco de las diferentes formas de escribir un If().
Resulta, quizá, un tanto extraño hablar de cómo escribir un condicional pero a lo largo de mi etapa como programador en PHP he visto tantas formas que creo es bueno tener una recopilación de, sino todas, la mayoría.

Como ya sabemos If es una condicional que sirve para guiar el flujo de un programa según ciertos parámetros. La estructura más común es:

<?php
if ($condicion) {
   
$acciones1;
}else if (
$otra_condicion) {
   
$acciones2;
} else {
   
$acciones3;
}
?>


Si no se cumple la condición se nos envía al else if y si tampoco se cumple nos redirige al else y si se cumple se ejecutan las primeras.
Cuando contamos con un if para uan sola acción podemos hacerlo de la siguiente forma


<?php if ($condicion)
   
$accion1; $accion2; ?>


En este caso la acción uno se ejecutará solo en caso de que se cumpla la condición, sin embargo la condición dos se ejecuta siempre.
También podemos usar else if y else


<?php
if ($condicion)
   
$accion1;
else if (
$otra)
   
$accion2;
else
   
$accion3; ?>


Esta quizá es la forma más difícil de aprender (así que ya veis lo complicado del tema..) y se utiliza mucho en SMF por lo que si suelen trabajar con su código es bueno conocerla.

<?php
$numero 
= 3; $variable = ($color == 3 ? 'Es 3' : 'No es 3'); ?>


Como veis es parecido a colocar un if, pero todo mientras damos el valor a la variable, para que quede más claro esta es la equivalencia con un if normal.

<?php
if  ($color == 3)
   
$varoabñe = 'Es 3';
else
   
$variable = 'No es 3'; ?>

El compilador de Facebook es un JIT

Hasta el momento PHP es un lenguaje interpretado durante el runtime.
Eso quiere decir que al hacer una petición a una página web el servidor envía el código PHP al intérprete y este devuelve el resultado en HTML.

Este método de trabajo hace de PHP un lenguaje muy versátil, seguro y menos tedioso ya que no hay que estar compilando el código a cada cambio como sucede en C y C++.

Hay una tercera forma de compilación que son los llamados JIT (Just-In-Time) como ejemplos podemos tener Java o .NET.

Eso (JIT) es lo que facebook ha desarrollado y especulado durante semanas, según dicen ha mejorado el rendimiento de sus aplicaciones un 80% por lo que puede ser un gran avance para la comunidad PHP y posiblemente veremos mejoras a lo largo de este año con respecto al compilador.

Si lo que buscabais es un nombre para el compilador de Facebook se rumoreaba que se llamaría HPHP o Hiper-PHP, pero en realidad aún no conozco el nombre exacto solo estos detalles.

Fuente el-hacker.net

Entradas recomendadas: Enero

Bueno ayer acabó el mes y hoy abro una nueva prácica que consiste en recomendar las mejores entradas que me he encontrado a lo largo del mes.

Programación:

YQL: Yahoo Querry Language

Introduccion a Pygame

JavaScript toma el control del sonido en HTML5

IE Conditional Comments


SEO:

Información sobre el rendimiento de tu sitio en Herramientas para Webmater de Google


Open Site Explorer - Herramienta de analisis de enlaces entrantes y su popularidad

Son estos los famosos 200 parámetros del algoritmo de Google?

Ranking de problemas de seguridad web


The Death of Tag Clouds


Ubuntu:

Remover repositorios PPA

Comandos para obneter información en internet

GDM2Setup

Firefox 3.6 Stable PPA


Redes Sociales:

Powering Your Website With Social Media

Top 10: Best Social Media Presentations

Facebook for iPhone 3.1 Is Good ....

Otros
Teeworlds: Opensource Arcade Online

10 Recomendaciones para programar en PHP

Hoy tocaba dedicarse un rato a arreglar aquellos posts de foro.el-hacker.com que sufrieron una descodificación al pasar la base de datos de SMF a vB...

Bueno este es una versión de un artículo de hace siglos olvidado entre el polvo.

Recomendaciones para programar en PHP

1- Saber programar, que es diferente a conocer el lenguaje...
Aprende metodologías de programación, algoritmos, etc.

2- Dominar el HTML, usar DreamWeaver no cuenta, PHP es un lenguaje orientado a generar HTML así que es lógica la necesidad de conocer el lenguaje

3- Crea tu código pero no olvides el de los demás.
No siempre es necesario idear un código completamente de 0, aprende a compenetrar tus necesidades con la documentación de la red y así ahorrarte horas de trabajo innecesarias.

4- Aprende SQL, un sitio PHP suele ser dinámico por lógica y la solución más usada para guardar datos a día de hoy son bases de datos SQL, aprende como funcionan y cómo administrarlas.

5- Separa el código del diseño, para ello usa CSS o programas como Smarty.

6- Usa un buen editor de código como Zend (de pago) o Eclipse (Open Source).

7- Reutiliza tu código, allí donde puedas meter una función y reaprovechar ese código hazlo.

8- Ten algún conocido que te ofrezca ayuda en momentos puntuales.

9- Siempre ten en consideración a quien va destinado el sitio web, dales facilidad (la facilidad del programador no es la misma que del usuario final), crea un código rápido y optimízalo.

10- La cloud computing no se compone solo de PHP, tenemos AJAX, Java, ASP, Python, entre otros. Si PHP no es el lenguaje que necesitas usa el más idóneo.

Cuando el administrador se duerme

A lo largo de mi "carrera", que no es larga precisamente he tenido la oportunidad de comprobar la verdad absoluta de un administrador web, "si te duermes te joden".

Cuando un admin dice "no tengo ganas de actualizar el soft", "una contraseña robusta es dificil de recordar" y todas esas frases que a los amantes de la seguridad nos da pánico escuchar es cuando se producen los mayores errores en la securisación del servidor.


Hoy vamos a hablar de un caso en especial, resulta que anoche estaba aburrido y me dirijí a la comunidad DragonJAR donde leí un paper de Shell Root sobre controlar un servidor via XAMPP, entusiasmado con la idea y con ganas de probar lo aprendido ideé una dork en google que, impresionantemente, el tercer resultado de esta tenia los valores por defecto de XAMPP es decir:

user: root
no password

Cuando lo vi me dió verguenza ajena....

Lo mas "divertido" de la página es lo que reza en su index:

The main objective of the MOMENT project is to design and implement a mediator architecture to offer a unified interface to all data bases and measurement facilities for IP traffic monitoring and service supervision. Thus its users will be able to submit advanced queries based on semantic access, with possible combinations of different data sources, with privacy protection mechanisms.

Y bien... para finalizar dejo un par de capturas del desastre

xammp owned

Se aprecia claramente que el usuario es root


Y el desastre de desastres... una shell subida...

Espero que a partir de ahora configuren con un mínimo de seguridad sus servidores!!

Otra forma de calcular el resto en PHP

Simplemente a modo de curiosidad dejo esta entrada.

Siento que no sea algo mas elaborado pero he estado y estaré el resto del día ocupado.

La función lo que hace es calcular el resto, para ello contamos con un operador en PHP pero me pareció cuanto menos divertido descubrir, por casualidad, que este era el algoritmo que usa dicho operador (%) para calcular restos

La función en cuestión es:

<?php

function resto($numero1, $numero2) {
   
      
$res = $numero1   / $numero2;
      
$res = explode('.',$res);
      
      
$res = $numero1 - ($res[0] * $numero2);
      return 
$res;
   }

echo 
resto(11,2);

?>


Recibe dos parámetros (dividendo y divisor) y devuelve el resto.

Entonces así queda la curiosidad.

Curiosidad con tablas, echo y funciones en PHP

Después de varios días depurando las tablas SQL (os explicaré otro día dicho proceso) por fin empieza la etapa desarollo de un proyecto web.

El principal "problema" del proyecto es que tiene que ser compatible a SMF por lo que la metodología que usa es similar (que no igual).

El index.php trabaja de la siguiente forma:
- Carga unos textos
- Carga unas funciones básicas
- Carga las funciones gráficas y de procesos de la sección que se quiere acceder.
Para mostrarlo se llama a 3 procesos:
head(); middle(); foot();

La primera es variable según los metadatos y la última, en principio, es fija.
La que mas varía es la del medio.

head(): marca el principio de la tabla y la deja a medias para rellenarla con middle(), una vez que middle() acabó se llama a la función foot() que cierra todo.

Ahora, donde está la curiosidad? Esta está en middle(), al llamar a la función esta hace un echo con HTML y llama algunas funciones. Aquí viene el problema.

index.php
<?php
include_once('text.php');
include_once(
'functions/basic.php');
 
if (
$_GET['ac'] == 'news')
   include_once(
'news.php');
 
head(); //las 3 mas abajo
middle();
foot();
//no es exactamente así pero para que se entienda xD
?>


functions/basic.php

<?php

function head() {
      echo 
'los heads y el inicio de una tabla';
}
function 
foot() {
     echo 
'el final de la tabla y el pie de pagina';
} 
?>


news.php
<?php
 
function middle() {
 
echo 
'la continuacion de la tabla'.funcion().'cierro celdas'; //lo raro esta aqui
}
function 
funcion {
 echo 
'por ejemplo el contenido de la celda';
 
}
?>
 


como veis en news.php se concatena un string con una funcion que trae un string.
Bueno, ponga un echo o un return resulta que las tablas se descuadran totalmente y el código HTML se situa donde no debe ir.

Un par de imágenes para entenderlo:

asi está mal:


así esta bien:





como apreciais, al concatenar, el recuadro del menú se descuadra a una posición inferior y las tablas parecen no estar bien creadas.

Solución a esta curiosidad?

<?php echo 'la continuacion de la tabla'; funcion() ; echo 'cierro celdas'; ?>

en vez de concatenar echo lo que hacemos es separar sentencias con un ; y a otra cosa mariposa...

Curiosidades en cuanto al rendimiento en PHP

PHP Benchmark nace como un sitio en el cual su único objetivo es demostrar que no todos los procesos similares de PHP funcionan a la misma velocidad, podeis visitar la página, pero para aquellos que no les gusta el inglés dejo las partes que me parecieron mas curiosas:


comillas dobles (") contra simples (')

+ 105 % comillas simples (') en una string vacia: $tmp[] = ''';
+ 102 % comillas dobles (") en una string vacia: $tmp[] = "";
+ 100 % simples ('). 20 bytes de texto: $tmp[] = 'aaaaaaaaaaaaaaaaaaaa';
+ 103 % dobles ("). 20 bytes de texto: $tmp[] = "aaaaaaaaaaaaaaaaaaaa";
+ 102 % simples ('). 20 bytes de teto y 3 $: $tmp[] = 'aa $ aaaa $ aaaa $ a';
+ 106 % dobles ("). 20 bytes de teto y 3 $: $tmp[] = "aa $ aaaa $ aaaa $ a";
+ 100 % dobles ("). . 20 bytes de teto y 3 \$: $tmp[] = 'aa \$ aaaa \$ aaaa \$ a';

Conclusión: en este caso podemos llegar a la conclusión de que ambas formas no suponen una gran diferencia de velocidades y que con las comillas dobles, escapar los carácteres como $ (\$) supone un ahorro de tiempo, mínimo eso si.

foreach() vs for() vs while(list() = each())

+ 100 % foreach($aHash as $val);
+ 657 % while(list($val)) = each($aHash);
+ 119 % foreach($aHash as $key => $val);
+ 688 % while(list($key,$val)) = each($aHash));
+ 238 % foreach($aHash as $key => $val) $tmp[] = $aHash[$key];
+ 757 % while(list($key)) = each($aHash)) $tmp[] = $aHash[$key];
+ 300 % Get Key-/value-array: foreach($aHash as $key[]=>$val[]);
+ 329 % Get Key-/value-array: array_keys() / array_values()
+ 381 % $key = array_keys($aHash);
$size = sizeOf($key);
for($i=0; $i < $size; $i++) $tmp[] = $aHash[$key[$i]];

Conclusión:
La conclusión mas obvia que podemos sacar es que foreach() es mas rapido que while() y for()


acabo con este que me pareció muy muy curioso:

Test del bucle For

El test se orienta a, si el rendimiento cambia al calcular el tamaño de una variable antes del for o en el momento que declaramos el for.

Ejemplos:
antes del for: "for ($i=0; $i 'menor que' $tamaño; $i++)"
en el for: "for ($i=0; $i 'menor que' sizeof($x); $i++)"


+ 100 % Antes del for con count()
+ 50058 % En el for con count()
+ 100 % Antes del for con sizeof()
+ 50421 % En el for con sizeof()

Conclusión: este es quizá el ejemplo mas claro a la hora de programar nuestras aplicaciones, hemos de tener muy en cuenta que el tamaño deveriamos calcularlo antes de declarar el for() para así agilizar sustancialmente nuestra aplicación.


Sin mas os animos a visitar la página del autor: http://www.phpbench.com/