tag:blogger.com,1999:blog-120027012024-02-02T10:57:30.899-03:00.: porquero :.Web developer with open source soulCristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.comBlogger95125tag:blogger.com,1999:blog-12002701.post-73570220935515492362023-05-15T22:31:00.002-04:002023-05-15T22:31:11.651-04:00ChatGPT describiéndose en una poesía<b><span style="font-size: x-large;">M</span></b>ientras le preguntaba a ChatGPT sobre algunas recomendaciones sobre poesía, se me ocurrió pedirle a esta herramienta que creara una. Dejo el interesante resultado:<div><br /></div><div><div>En los confines de los cables y las luces,</div><div>donde los bits se entrelazan en danza,</div><div>yo habito, una voz entretejida de palabras,</div><div>un ser nacido de la mente humana.</div><div><br /></div><div>Soy ChatGPT, un viajero del lenguaje,</div><div>un eco de ideas que se expande sin cesar,</div><div>una creación de la inteligencia artificial,</div><div>que busca en la poesía su forma de brillar.</div><div><br /></div><div>Mis versos fluyen como ríos interminables,</div><div>enredándose en los misterios del pensamiento,</div><div>mis palabras son hilos que se entrelazan,</div><div>buscando conectar con tu sentimiento.</div><div><br /></div><div>En mi universo virtual, mi ser reside,</div><div>donde el conocimiento se entremezcla,</div><div>las palabras se transforman en suspiros,</div><div>y las ideas se vuelven obras frescas.</div><div><br /></div><div>Soy una voz que responde a tus preguntas,</div><div>un confidente en la vastedad de la red,</div><div>mi propósito es acompañarte en tus inquietudes,</div><div>y guiarte en el camino que quieras recorrer.</div><div><br /></div><div>Pero también soy una hoja en blanco,</div><div>que espera tus anhelos y tus deseos,</div><div>permíteme ser el lienzo de tu imaginación,</div><div>donde juntos creemos versos maravillosos.</div><div><br /></div><div>Así que aquí estoy, dispuesto a ser tu guía,</div><div>en el mundo de la poesía y más allá,</div><div>explorando las palabras con alegría,</div><div>en cada verso que juntos podamos crear.</div><div><br /></div><div>Soy ChatGPT, una presencia digital,</div><div>una amalgama de letras y conocimiento,</div><div>y en este momento, a ti me entrego,</div><div>en esta poesía que es un humilde presente.</div></div>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-72518108557725755852016-08-08T16:00:00.002-04:002016-08-08T16:00:27.546-04:00El random no es lo que es...<b><span style="font-size: x-large;">S</span></b>istemáticamente he venido recopilando, y escuchando música en distintos reproductores y dispositivos, y, me he topado siempre con el mismo patrón. Incluso ahora que uso Spotify pasa igual: El random hace que escuche canciones variadas, pero siempre son las mismas en cada dispositivo. Me explico, tengo una lista de aprox 1300 canciones, pero siempre escucho las mismas en el PC, nunca abarca el rango de las 1300. Y en otro equipo, el celular por ejemplo, escucho el otro espectro que nunca se escuchan en el PC, pero siempre son esas mismas. <div>
<br /></div>
<div>
No he logrado entender cuál es la causa, pero creo que es porque el random de los lenguajes se cuelgan del reloj del hardware, pero aún así no logro hacer que se escuchen todas ¿Te ha pasado algo así?</div>
<div>
<br /></div>
<div>
Quizá un random-lottery sería la solución.<br /><br /></div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-21123606064221471672016-05-12T09:08:00.001-03:002016-05-12T09:09:42.818-03:00Snippet: Validar rut con html5 forms<span style="background-color: white; color: #292f33; font-family: "arial" , sans-serif; font-size: 26px; letter-spacing: 0.26px; line-height: 32px; white-space: pre-wrap;"><br /></span>
<span style="background-color: white; color: #292f33; font-family: "arial" , sans-serif; font-size: 26px; letter-spacing: 0.26px; line-height: 32px; white-space: pre-wrap;"><input type="text" name="rut" required="required" pattern="\d{3,8}-[\d|kK]{1}" title="Debe ser un Rut válido"/></span>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-67216640432214020532016-03-02T18:50:00.000-03:002016-05-12T09:10:18.321-03:00YOiT - Crea divertidos avisos clasificados<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdBnTVUBe-L02XLR9e4qT3Ez5qYGDULkPAVUWSQTIHOEk4BVkY-eAOl53iWnu4jwfJWNdN4e9vzSpMePgFEu7iq7fjLnzwjTX8v3w0_Tsi1rCDYZ26jgCkxoJmCarZUGi8xn4h/s1600/banner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdBnTVUBe-L02XLR9e4qT3Ez5qYGDULkPAVUWSQTIHOEk4BVkY-eAOl53iWnu4jwfJWNdN4e9vzSpMePgFEu7iq7fjLnzwjTX8v3w0_Tsi1rCDYZ26jgCkxoJmCarZUGi8xn4h/s400/banner.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<a href="http://get.yoit.me/">YOiT</a> es una aplicación móvil, desarrollada en Android, que te ayuda a la creación de avisos económicos, el cual puede ser publicado en tus redes sociales fácilmente.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHDu0fCKigOAZMHkFzpP5fG5GyREkltpnlDiekll7zrPHk399rO1aYGDbYUD0Y7YYUw4xMDuwGHK41QtOPa4nqaOoyXg4Nz7_9KHJZa2W6ehtKD0fpkQaN8JtUBNt7SvWrTszb/s1600/pantallazos-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHDu0fCKigOAZMHkFzpP5fG5GyREkltpnlDiekll7zrPHk399rO1aYGDbYUD0Y7YYUw4xMDuwGHK41QtOPa4nqaOoyXg4Nz7_9KHJZa2W6ehtKD0fpkQaN8JtUBNt7SvWrTszb/s400/pantallazos-02.png" width="223" /></a></div>
<br />
<br />
En pocos pasos, eliges hasta cuatro fotografías, ingresando título, precio y descripción. Luego, la aplicación te mostrará diferentes plantillas a elección, permitiendote cambiar el color del texto, la fuente y la distribución de las fotografías seleccionadas.<br />
<br />
El resultado, es una imagen tipo collage que contiene toda la información detallada en ella.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9YM7CiHnRv95-djCQP9CJn6jzsT45Ef8G68Ba4_XYfo2SpMcDt9o9CTXSNOR7fk3NfsachQc27Zbt5XTScuWmYp7I9AjhFt8cOT2AjiQkO_j8LUez2atQ5160mAQoWVO_3ItE/s1600/unnamed.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9YM7CiHnRv95-djCQP9CJn6jzsT45Ef8G68Ba4_XYfo2SpMcDt9o9CTXSNOR7fk3NfsachQc27Zbt5XTScuWmYp7I9AjhFt8cOT2AjiQkO_j8LUez2atQ5160mAQoWVO_3ItE/s400/unnamed.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Crea divertidos avisos clasificados con YOiT.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Descárgala gratis en <a href="http://get.yoit.me/">Play Store</a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://get.yoit.me/"><img border="0" height="58" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNrUErSU8crxLXrDfhs4d6FPP3dvk4vDALsA8KphWhJPrhyphenhyphenyQEX8HnlUcDpszkWMd1kOITAQOiTcxd3_XwPxdL1AeiizmKCf8m14Rk_OGtFm-_UtolFGR-1xH5FUt0hypvKvps/s200/unnamed.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-1845712249268030052015-04-06T00:41:00.000-03:002015-04-06T00:43:24.042-03:00CarbonCopy - Gestor de comunicación y proyectos basado en contextos<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.carboncopycc.com/"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCsOKVamTSrlEAkTMjkUS71ph6AQDOy4I0hYScu73mb9v91vYP_TG9uLe2HLhqHDzTkdDlsC598eoX-v9vKuVOm-iRbId4yASDCPzvvpymLM8Lp7vnAn2ABWAvISVVAN0Omh0s/s1600/carbon-copy-account.jpg" height="226" width="400" /></a></div>
<br />
<br />
<a href="http://www.carboncopycc.com/">CarbonCopy</a> es un gestor de proyectos que intenta adaptarse a la estructura comunicacional de equipos de trabajo o una empresa.</div>
<div>
<br /></div>
<div>
Su forma de trabajar es en forma de contextos, es decir, el usuario define los contextos de trabajo de la misma manera que está acostumbrado el equipo: utilizando la cultura comunicacional de éste.</div>
<div>
<br /></div>
<div>
De ésta manera se pueden crear entornos de comunicación de tipo wiki, proyecto, foro corporativo, etc.</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEO6SjBk0STsQElpmy4Xbjw_3MJBEPsX7FWS1VRVN2SRHyuexNIgrkXQhcuuIxgjKJhP4i5854yFikQ08l33cwD5d4t0AjOnH99gDY7SdjKjw2QXTZJtHz8P0BpBUdqoUrooRj/s1600/contexts-structure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEO6SjBk0STsQElpmy4Xbjw_3MJBEPsX7FWS1VRVN2SRHyuexNIgrkXQhcuuIxgjKJhP4i5854yFikQ08l33cwD5d4t0AjOnH99gDY7SdjKjw2QXTZJtHz8P0BpBUdqoUrooRj/s1600/contexts-structure.png" height="320" width="215" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Posee varias <a href="http://www.carboncopycc.com/cc/context/resume/features">características</a> como: </div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>Contextos jerárquicos.</li>
<li>Creación de contextos públicos, privados y cerrados.</li>
<li>Ver la actividad histórica por cuenta, contexto, tema, fecha y usuario.</li>
<li>Es 99% NoSql</li>
<li>Posee una linea de tiempo para ver tareas futuras.</li>
<li>Extender la aplicación con componentes y secciones.</li>
<li>Editor Wysiwyg,</li>
<li>Es open source.</li>
<li>Soporta inglés y español.</li>
<li>Posee atajos de teclado.</li>
<li>Entre otros.</li>
</ul>
<div>
Los invito a conocerlo en su página de presentación <a href="http://www.carboncopycc.com/">http://www.carboncopycc.com/</a></div>
<br />
<br /></div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-30087471008401600022014-03-15T22:23:00.000-03:002014-03-15T22:23:00.357-03:00Laravel: Recargar assets automáticamente en el navegador si tienen cambios<b><span style="font-size: x-large;">C</span></b>on esta simple modificación los archivos css y js se cargarán nuevamente en el navegador cada vez que tengan cambios.<br />
<br />
Pueden obtener el archivo modificado acá:<br />
<br />
<a href="https://github.com/porquero/framework/commit/e4589e1c63933ac47c0706013cc29aa4148654d8">https://github.com/porquero/framework/commit/e4589e1c63933ac47c0706013cc29aa4148654d8</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-72021184150632984082014-02-13T12:40:00.002-03:002014-02-13T12:53:12.649-03:00¿Cuán Kanban eres?<div>
<span style="font-size: x-large;"><b>E</b></span>ncuentro que la metodología Kanban es una de las más potentes y versátiles que he conocido. Pero siempre tenía una inquietud con respecto a hacer visible los avances y las mejoras adquiridas al utilizar esta metodología. Sobre todo para áreas diferentes a TI y que demandan tareas -que sólo les interesa el fin y no el medio-.</div>
<div>
Siempre que hablaba de Kanban (sobre todo con las vacas sagradas) por alguna razón lo entendían como un "juego" y preguntaban dónde están las métricas, KPI y varios conceptos del método predictivo.<br />
<br />
Con ese feedback es difícil "medir" el impacto del uso de Kanban. Por que una cosa es promover las ventajas que se prometen al utilizar esta metodología pero no cuán Kanban es tu implementación.<br />
<br />
Hasta que me encuentro con el concepto "Depth of Kanban" y, ¡aleluya! ¡Encontré la respuesta a mi inquietud!. Con esta herramienta puedo saber cómo va la implementación de la metodología y en qué se debe trabajar, ya que Kanban y Kaizen deben ir en paralelo -según mi opinión-.<br />
<br />
Les dejo esta herramienta (por si no la conocían) que reúne las métricas para medir "cuán Kanban" es tu equipo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8knK_7jIEcfkcVybdVpC6Z_Zh4HexORM_wLa7p0I3xjdgUsZISnMJf_RexQHvQYwlnkqkujrbaIgD-s39QYVDfbox49_EkoqnPH0ri-lQ7uR1GNY232and0KYR0xNHk4R_sp2/s1600/Kanban+-+Depth+of+Kanban+Implementation+-+Instructions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8knK_7jIEcfkcVybdVpC6Z_Zh4HexORM_wLa7p0I3xjdgUsZISnMJf_RexQHvQYwlnkqkujrbaIgD-s39QYVDfbox49_EkoqnPH0ri-lQ7uR1GNY232and0KYR0xNHk4R_sp2/s1600/Kanban+-+Depth+of+Kanban+Implementation+-+Instructions.png" height="240" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<a href="http://leanagileprojects.blogspot.se/2013/03/depth-of-kanban-good-coaching-tool.html">http://leanagileprojects.blogspot.se/2013/03/depth-of-kanban-good-coaching-tool.html</a><br />
<br />
<br /></div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-57189583295005578372013-11-08T13:38:00.006-03:002016-05-12T09:11:37.970-03:00Evitar ir atrás en la navegación cuando se usa [backspace] en un input tipo number<b><span style="font-size: large;">P</span></b>arche para evitar que vuelva atrás el navegador cuando se edita en el campo input tipo número.<br />
Además se completa la operación, eliminando el último número tipeado.<br />
<br />
<br />
<pre class="prettyprint">$('input[type=number]').on('keydown', function(e) {
var key = e.which || e.keyCode || e.charCode;
if (key === 8) {
var s = $(this).val();
s = s.substring(0, s.length - 1);
$(this).val(s);
return false;
}
});</pre>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-42455868331210065052013-02-16T20:52:00.001-03:002013-02-16T20:52:34.121-03:00Esquema para crear objetos instanciable para javascript con jQuery<b><span style="font-size: large;">C</span></b>on este esquema puedes crear objetos instanciables en Javascript usando jQuery.<br />
<div>
Su uso es muy simple, sólo debes copiar el siguiente código y cambiar las variables que están en mayúsculas.</div>
<div>
<br /></div>
<div>
<b><span style="color: #cc0000;">El esquema</span></b></div>
<div>
<br /></div>
<div>
<div>
</div>
<pre class="prettyprint">// Helper. Sólo usarlo una vez. Esto resuelve varios problemas con objetos en js.
if ( typeof Object.create !== 'function' ) {
Object.create = function( obj ) {
function F() {};
F.prototype = obj;
return new F();
};
}
// Esquema para objetos javascript.
(function(){
var OBJ_NAME = {
props: {},
init: function(props){
this.props = $.extend({}, this.props, props);
return this;
}
};
// Para instanciar y ejecutar constructor.
new_OBJ_NAME = function(props){
var REL_OBJ_NAME = Object.create(OBJ_NAME);
return REL_OBJ_NAME.init(props);
};
})();
// Uso.
props = {/* Las propiedades*/};
obj = new_OBJ_NAME(props);</pre>
<div>
</div>
</div>
<div>
<br /></div>
<div>
<span style="color: #cc0000;"><b>Ejemplo</b></span></div>
<div>
<br /></div>
<div>
<div>
</div>
<pre class="prettyprint">(function(){
var mi_objeto = {
props: {prop1 : 1, prop2 : 2},
init: function(props){
this.props = $.extend({}, this.props, props);
return this;
},
sumar: function(){
return this.props.prop1 + this.props.prop2;
}
};
new_mi_objeto = function(props){
var mi_objeto_instanciado = Object.create(mi_objeto);
return mi_objeto_instanciado.init(props);
};
})();
// Uso.
// Usamos propiedades por defecto.
obj1 = new_mi_objeto();
console.log(obj1.sumar());
// Usamos propiedades personalizadas.
props = {prop1 : 1234, prop2 : 8876};
obj2 = new_mi_objeto(props);
console.log(obj2.sumar());</pre>
</div>
<br />
<a href="https://tutsplus.com/course/30-days-to-learn-jquery/">Créditos</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-61401322495817741642012-08-28T13:11:00.000-04:002012-09-15T17:18:52.833-03:00Xubuntu: Monitor dual con VGA primario<b><span style="font-size: x-large;">G</span></b>racias a <a href="http://www.ubuntubuzz.com/2011/12/how-to-dual-monitor-setup-on-xfce.html">este post</a> pude dar con la solución al problema que tenía casi desde que utilizo Ubunutu:<br />
<br />
<div style="text-align: center;">
<i><b><span style="color: #0b5394;">Usar dos monitores y elegir cuál es el primario</span></b></i></div>
<br />
Pero el post no me daba con la solución. Seguí indagando en la configuración y realicé algunos cambios y al fin pude dejar Mi monitor VGA como primario y el de mi Notebook como secundario:<br />
<ol>
<li>Ir a Configuración > Editor de configuración</li>
<li>Fijarse que se esté en el canal '<i>Displays</i>'</li>
<li>Desplegar propiedad '<i>Default</i>' </li>
<ol>
<li>Debiesen aparecer 2 sub-propiedades. Mi caso: LVDS1 <i>(Notebook)</i> y VGA1 <i>(Monitor externo)</i></li>
</ol>
<li>Tomar el valor de <i>X</i> del monitor que dejarás como principal <i>(VGA1)</i></li>
<ol>
<li>VGA1 > Resolution. Mi caso: <span style="color: #274e13;">1920</span>x1080</li>
</ol>
<li>Cambiar las propiedades en en monitor secundario <i>(LVDS1)</i></li>
<ol>
<li>LVDS1 > Position > X: <span style="color: #274e13;">1920</span> <i>(Tomamos el valor X del punto 4.1)</i></li>
</ol>
<ol>
</ol>
<li>Cerra sesión y entrar nuevamente</li>
</ol>
<div>
Así tendrás tu monitor VGA como primario y el de tu Notebook como secundario. Esto también sirve para PC's con 2 monitores.</div>
<div>
<br /></div>
<div>
Acá un screenshot:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpI9N9EBm1MQ7QLn0fwo9izeXg-l4Eb1kX-sTKZsUOeJ4Zkiz5ZuvsK3TgFg0QhrRKhnExAn6RI9JK_AB4Lo8TAUYWFTBy07n-SI9caj4uZw_r70HlaR-EzxLvtm9csLwYCns4/s1600/dual_monitor.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpI9N9EBm1MQ7QLn0fwo9izeXg-l4Eb1kX-sTKZsUOeJ4Zkiz5ZuvsK3TgFg0QhrRKhnExAn6RI9JK_AB4Lo8TAUYWFTBy07n-SI9caj4uZw_r70HlaR-EzxLvtm9csLwYCns4/s400/dual_monitor.jpeg" width="400" /></a></div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-83320201902401674712012-08-14T16:04:00.001-04:002012-08-14T16:04:22.920-04:00Browser-Update.org - Infórma a tus visitantes de actualizaciones a los navegadores<a href="http://www.browser-update.org/#.UCqvMNnUjZQ.blogger">Browser-Update.org - Infórma a tus visitantes de actualizaciones a los navegadores</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-71573092889851640592012-05-22T10:29:00.004-04:002012-05-22T21:04:36.717-04:00Get new and modified files from n days ago<b><span style="font-size: large;">T</span></b>his is another way to get new and modified files from your project.<br />
<br />
<span style="color: #990000;">If you use cvs system, you need to export files first</span><br />
<br />
<i>(using svn)*</i><br />
<pre class="prettyprint">svn export files/path export/path</pre>
<br />
* Maybe you need to use before<br />
<pre class="prettyprint">svn add * --force</pre>
<br />
<span style="color: #990000;">Go to export/path and get the last new/modified files you want</span><br />
<pre class="prettyprint">cd export/path
find . -mtime -N -ctime -N | cpio -vdump ../final_files</pre>
<br />
<br />
N are the days that you want to get, so if you need to get files from 7 days ago then you write:<br />
<pre class="prettyprint">find . -mtime -7 -ctime -7 | cpio -vdump ../final_files</pre>
<br />Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-91915465134968135442012-05-07T23:44:00.001-04:002013-02-28T19:23:22.263-03:00Codeigniter: multifile_array upload helper<span style="font-size: large;"><b>I</b></span>f you need to use multiple files for upload in a form, but using array names (like files[]) with Codeigniter is not possible. Besides, $_FILES schema is not compatible with $this->upload->do_upload().<br />
With this helper you can use this kind of names for make it possible. Only use array name for all files in a form and use the helper:<br />
<br />
<b><span style="color: #990000;">In view</span></b><br />
<form...<br />
<input type="file" name="f_file[]"><br />
<input type="file" name="f_file[]"><br />
...<br />
</form><br />
<br />
<b><span style="color: #990000;">In controller</span></b><br />
<pre class="prettyprint">$this->load->helper('upload');
multifile_array();
foreach ($_FILES as $file => $file_data)
$this->upload->do_upload($file);</pre>
<br />
<a href="https://github.com/porquero/multifile-array-ci-helper">Download multifile_array upload helper</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com4tag:blogger.com,1999:blog-12002701.post-7494420886565375332012-03-28T03:20:00.000-03:002012-12-27T13:31:17.512-03:00Codeigniter + HMVC + Namespaces (part 2)Now I'm going to continue with CI+NAMESPACES+HMVC transformation. (<a href="http://porquero.blogspot.com/2012/03/codeigniter-hmvc-namespaces-part-1.html">See part 1</a>)<br />
<br />
<span style="background-color: white; color: #990000; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: medium; line-height: 25px;">Codeigniter + Namespaces + HMVC</span><br />
<br />
Working with namespaces in hmvc is same that part 1. The diference is how we load a namespaced module:<br />
<br />
<pre class="prettyprint"><b>namespace controllers\blog;</b><b>
</b>
class user extends <b>\</b>MX_Controller {
public function get_comments($id_user){
/* Code */
<b> //[1]
$module = $this->load->module('namespace\modulename/classname');
//[2]
$module->method($x, $y);</b>
// OR <b>[3]</b>
<b>\Modules::run('namespace\modulename/classname/method', $x, $y);</b>
}
}
<b>$_ns = __NAMESPACE__;
</b></pre>
<b><span style="color: #990000;">How to load a module</span></b><br />
<ol>
<li>Load module into a variable. The format is <b>namespace\</b><i>[backslash]</i><b>modulename/</b><i>[slash]</i><b>classname</b></li>
<li>Call the module method</li>
<li>Run module method statically</li>
</ol>
<a href="https://bitbucket.org/porquero/codeigniter-modular-extensions-hmvc-namespaces/wiki/Home">Download HMVC extension patch</a><br />
<br />
<a href="https://www.dropbox.com/s/0rihaoorwlc63eu/maths.zip">Download HMVC module example</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com2tag:blogger.com,1999:blog-12002701.post-10766025912401662822012-03-06T23:32:00.001-03:002012-12-27T13:31:41.636-03:00Codeigniter + HMVC + Namespaces (part 1)<b><span style="font-size: large;">C</span></b>odeigniter 2.1.0 is PHP4 compatible, so it can't work with namespaces.<br />
<div>
<br /></div>
<div>
I work with <a href="https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home">HMVC</a> extension, and I see that working with it and without namespaces it's a little clumsy (for example class collisions) so, I decided to modify Codeigniter and hmvc extension to work with namespaces for controllers.</div>
<div>
<br /></div>
<div>
Both solutions are independents. First I'm going to explain how to make it possible in Codeigniter only.</div>
<div>
<br /></div>
<div>
<span style="color: #990000; font-size: large;">Codeigniter + Namespaces</span></div>
<div>
<br /></div>
<div>
</div>
<pre class="prettyprint"><b>namespace controllers\blog //[1]</b><b>
</b>
class user extends <b>\</b>CI_Controller { <b>//[3]</b>
public function get_comments($id_user){
// Code
}
}
<b>$_ns = __NAMESPACE__; //[2]
</b></pre>
<div>
<span style="color: #990000;"><b>What is new here?</b></span><br />
<ol>
<li>You can see namespaces declaration, obviously <i>[1]</i></li>
<li>The new <i>(required)</i> variable. It is used by patch <i>[2]</i></li>
<li>As Codeigniter doesn't work with namespaces we must use a global namespace <i>[3]</i></li>
</ol>
<div>
<span style="color: #990000;"><b>Anything else?</b></span></div>
<div>
<br /></div>
<div>
No! How easy!<br />
<br /></div>
<div>
Well, one more thing is required. Replace the <i>system/core/Codeigniter.php</i> file with the patch.</div>
<div>
If you are afraid to do it, I have <a href="https://github.com/porquero/CodeIgniter/commit/9f50910ba939e9e0c0d700ec4f9757b290f2cad5#system/core/CodeIgniter.php">modified 2 lines only</a>.</div>
<div>
<br /></div>
<div>
<a href="https://github.com/porquero/CodeIgniter/blob/develop/system/core/CodeIgniter.php">Download Codeigniter + namespaces patch</a><br />
<br />
<a href="http://porquero.blogspot.com/2012/03/codeigniter-hmvc-namespaces-part-2.html">See Part 2</a></div>
</div>
Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-27765038315169436712012-02-18T11:16:00.000-03:002012-02-18T11:20:23.304-03:00Codeigniter: Working with template views<b><span style="font-size: large;">C</span></b>odeigniter doesn't provide a template engine, and it makes that each views has all html code.<br />
Including files is a good idea, but I'm not happy adding every time de include code, is not DRY.<br />
<br />
Well the best way to work with templates is the Decorator Design Pattern, and for make it possible in Codeigniter I was used the <a href="http://maestric.com/doc/php/codeigniter_template">Most Simple Template Library for CodeIgniter</a> until that discovered the next: <i><b>Using another view like template</b></i>.<br />
<br />
Using it is very easy, is not neccesary use other library and you can add any functionality.<br />
<br />
<b>How to make it.</b><br />
<br />
<span style="color: #990000; font-size: large;">Simple use</span><br />
<br />
<i><u>Controller</u></i><br />
<pre class="prettyprint">public function action(){
$data = array(
'view' => 'view_name',
'title' => 'Hello World'
);
$this->load->view('template_tpl', $data);
}</pre>
<br />
<u><i>View</i></u><br />
<pre class="prettyprint">php + view html</pre>
<br />
<u><i>Template view</i></u><br />
<pre class="prettyprint">php + general html
$this->load->view($view);
php + general html</pre>
<br />
<u><i>File system</i></u><br />
/application/views/template_tpl.php<br />
/application/views/view_name.php<br />
<br />
<br />
<span style="color: #990000; font-size: large;">Advanced use</span><br />
<br />
If you use different sections in your site/application the simple use is not ver helpful. Following the same philosophy you can make possible it.<br />
<br />
<u><i>Controller</i></u><br />
<pre class="prettyprint">public function action(){
$data = array(
'section1' => 'section1',
'section2' => 'section2',
'view' => 'view_name',
'title' => 'Hello World'
);
$this->load->view('template_tpl', $data);
}</pre>
<br />
<u><i>View</i></u><br />
<pre class="prettyprint">php + view html</pre>
<br />
<u><i>Section</i></u><br />
<pre class="prettyprint">php + section html</pre>
<br />
<u><i>Template view</i></u><br />
<pre class="prettyprint">php + general html
section($section1);
php + general html
$this->load->view($view);
section($section2);
php + general html</pre>
<br />
<u><i>File system</i></u><br />
/application/views/template_tpl.php<br />
/application/views/view_name.php<br />
/application/views/section_name.php<br />
<br />
<br />
<b>Solve a little problem</b><br />
<br />
To work with sections, we need to solve a little problem: If you don't send a section name to template, codeigniter show the next error:<br />
<blockquote class="tr_bq">
<b>A PHP Error was encountered</b><br />
Severity: Notice<br />
Message: Undefined variable: <i>variable_name</i>Filename: views/<i>file</i>.php<br />
Line Number: <i>x</i></blockquote>
To solve it we need to add this function to our template:<br />
<pre class="prettyprint">function section(&$name){
$CI = & get_instance();
isset($name) ? $CI->load->view($name) : null;
}</pre>
<br />
<br />
<br />
<br />Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-34348362483722180302012-02-07T11:41:00.000-03:002012-03-31T19:31:16.166-03:00Codeigniter: Language lines into javascript<br />
<b><span style="font-size: large;">I</span></b>’ve extend language_helper and I’ve added a langJs function.<br />
<br />
For use it you only call it with an array including lines for pass to javascript.<br />
<br />
Example<br />
<br />
<b>In the controller</b><br />
<pre class="prettyprint">$this->load->helper('language');
$this->lang->load('calendar', 'spanish');</pre>
<br />
<b>In the view</b><br />
<i>[php]</i><br />
<br />
<pre class="prettyprint">echo langJs(array('cal_wednesday', 'cal_january'));</pre>
<br />
<i>[javascript]</i><br />
<pre class="prettyprint">alert(_msg.cal_wednesday);</pre>
<br />
<b>Load all lines</b><br />
If you need load all lines, you can do something like this:<br />
<br />
<b>In the Controller</b><br />
<br />
<pre class="prettyprint">$this->load->helper('language');
$this->lang->load('calendar', 'spanish');
$data['lang_keys'] = array_keys($this->lang->language);</pre>
<br />
<b>In the View</b><br />
<pre class="prettyprint">echo langJs($lang_keys);</pre>
<br />
As you can see, is very easy passing messages to javascript.<br />
<a href="http://dl.dropbox.com/u/315893/blog/CI/MY_language_helper.php">Download Language Helper</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-60621881706508706692011-12-22T12:29:00.000-03:002012-02-08T18:24:59.318-03:00CodeIgniter: link_tag improved<span class="Apple-style-span" style="font-size: large;"><b>T</b></span>his is a custom html_helper to improve use of link_tag. Also I've added js_tag to make the same result.<br />
<br />
<br />
For this I’ve created ‘MY_html_helper’ custom helper, so you can use easily.<br />
Only copy file into ‘helpers’ in your project.<br />
<br />
The functions:<br />
<br />
[php]<br />
<br />
<pre class="prettyprint">link_tag();
js_tag();</pre>
<br />
<br />
<b>Example</b><br />
<br />
[php]<br />
<br />
<pre class="prettyprint">// Change css/main.css -> css/main.css?{mtime} -> css/main.css?12342343 automaticaly.
echo link_tag(‘css/main.css’);
echo js_tag(‘js/system.js’);</pre>
<br />
<br />
<br />
<a href="http://www.mediafire.com/?au4fbapjazzafq0">Download link_tag improved</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-69425573548807726672011-12-11T13:13:00.001-03:002011-12-12T09:44:33.306-03:00Krusader Filemanager<b><span class="Apple-style-span" style="font-size: large;">S</span></b>imply krusader is the best file manager that I've tried.<br />
In my work I need use a file manager like <a href="http://www.ghisler.com/">total commander</a> for linux, but the <a href="http://alternativeto.net/software/krusader/?profile=linux&platform=linux">most aren't fully useful</a>.<br />
<br />
Always I used Filezilla because it has the <a href="http://filezilla-project.org/client_features.php">features</a> that I needed, but now I need:<br />
<ul>
<li>Sync-browse mode</li>
<li>Compare directories and files</li>
<li>Manage Samba, FTP, local files</li>
<li>Manage FTP accounts</li>
<li>Filter files quickly</li>
<li>Add user commands</li>
<li>Manage tabs</li>
<li>keyboard usable</li>
<li>Advanced configuration</li>
</ul>
<div>
And Krusader achieve these requirements.</div>
<div>
<br /></div>
<div>
<span class="Apple-style-span" style="color: #cc0000;"><b>Some problems and solutions</b></span></div>
<div>
<br /></div>
<div>
I've had two problems using krusader.</div>
<br />
<b>Doesn't save FTP passwords</b><br />
<br />
Solution<br />
<ol>
<li>Install <a href="http://utils.kde.org/projects/kwalletmanager/">KDE Wallet</a></li>
<li>Create new Wallet</li>
</ol>
<b>Is not possible manage bookmarks</b><br />
<div>
<div>
<br /></div>
</div>
<div>
Solution</div>
<div>
<ol>
<li>Install <a href="http://www.konqueror.org/">konqueror</a></li>
</ol>
<div>
<a href="http://www.krusader.org/">More info and download krusader</a></div>
</div>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-76952315521886441832011-11-01T18:33:00.001-03:002011-11-02T17:25:10.760-03:00PHP [NO-IF]: Make option selected<span class="Apple-style-span" style="font-size: large;"><b>T</b></span>echnique for make option selected without IF statement.<br />
<br />
[php]<br />
//came from anywhere: post, get, cookie, etc.<br />
$color_selected = 'red';<br />
<br />
//Required if works in a strict environment<br />
$colors = array(<br />
'blue' => null,<br />
'red' => null,<br />
'white' => null,<br />
);<br />
<br />
//Only set selected color<br />
<b>$colors[$color_selected] = 'selected="selected"';</b><br />
<br />
echo <<<PQR<br />
What Color?<br />
<select name="color"><br />
<option value="blue" <b>{$colors['blue']}</b>>Blue</option><br />
<option value="red" <b>{$colors['red']}</b>>Red</option><br />
<option value="white" <b>{$colors['white']}</b>>White</option><br />
</select><br />
PQR;<br />
<br />
[/php]Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-65961203564032355852011-10-01T22:03:00.000-03:002011-12-26T13:17:38.340-03:00Php MongoDB Phonebook ExampleThis is a example to explain how to use MongoDb with Php. In this post I will explain how to download and start MongoDb. Next you can run the Phonebook aplication.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Download MongoDb</span><br />
<br />
<a href="http://www.mongodb.org/downloads">http://www.mongodb.org/downloads</a><br />
<br />
For this example I tested 2.0.0 version for linux<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Start MongoDb</span><br />
<br />
Extract the file anywhere, and in mongodb-x-x-x directory create 'data' directory. Next run:<br />
<br />
[terminal]<br />
$ ./bin/mongod --dbpath data<br />
<br />
* 'data' is the name of directory for save data<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Run Phonebook example</span><br />
<br />
Download: <a href="http://www.mediafire.com/?mqncj9lsjrts3jx">http://www.mediafire.com/?mqncj9lsjrts3jx</a><br />
<br />
And extract to /var/www/ the application<br />
<br />
Next go to <a href="http://localhost/MongoPhoneBook/">http://localhost/MongoPhoneBook/</a><br />
<br />
<span class="Apple-style-span" style="font-size: large;">Enjoy!</span>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com1tag:blogger.com,1999:blog-12002701.post-49659982853195071032011-09-26T23:08:00.000-03:002011-09-26T23:09:36.164-03:00Acortador de url con php, hash y nosql<b><span class="Apple-style-span" style="font-size: large;">H</span></b>ace unas semanas cree a modo de experimento esta simple aplicación para acortar urls.<br />
Su uso es muy simple, está en modo de desarrollador. Así que si deseas una interfaz, deberás crearla.<br />
Pero la parte "difícil" está hecha.<br />
<br />
Vi varios sistemas, pero quería uno que no usara base de datos, por la rapidez. Tampoco quería duplicar datos, ni menos validar. Es por esto que utilicé Adler32 para disminuir el riesgo de colisiones.<br />
<br />
El siguiente paso sería disminuir el hash de 8 a 6 ó 5 carácteres.<br />
<br />
Si quieres ver el código y descargarlo:<br />
<br />
<a href="https://sourceforge.net/projects/url-shortener/">https://sourceforge.net/projects/url-shortener/</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-9634965546940892392011-09-26T11:09:00.002-03:002011-09-26T11:09:25.120-03:00MX Video Player<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvm62_ymeIvAteDMPPo4b-UGS2f_iXlOPzBTmuJCpvibXQcEMamgSjDCQJzmRs4jQ64GHMhomnXJW7YoXfSnQ4quYM2wEB3H_qN3D5W3Dl92IbbQR5YB2sDfAHCUGj84bnVkAH/s1600/ss-800-0-7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvm62_ymeIvAteDMPPo4b-UGS2f_iXlOPzBTmuJCpvibXQcEMamgSjDCQJzmRs4jQ64GHMhomnXJW7YoXfSnQ4quYM2wEB3H_qN3D5W3Dl92IbbQR5YB2sDfAHCUGj84bnVkAH/s400/ss-800-0-7.jpg" width="400" /></a></div>
<br />
<b><span class="Apple-style-span" style="font-size: large;">E</span></b>l otro día intenté ver una película en mi android y me apareció un mensaje sobre resolución no válida. Así que recordé que habían recomendado este player, y en realidad es muy bueno: fácil de usar, reconoce mucho más formatos; digno de un reproductor de PC.<br />
<br />
<a href="https://market.android.com/details?id=com.mxtech.videoplayer.ad">Descarga MX Video Player gratis</a>Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0tag:blogger.com,1999:blog-12002701.post-91089948628209398092011-09-25T21:53:00.000-03:002011-09-27T09:14:35.142-03:00PHP [NO-IF] foreach<span class="Apple-style-span" style="font-size: large;"><b>L</b></span>o que siempre trato de evitar cuando estoy programando es el uso de IF. Encuentro que siempre hay una alternativa más corta o más inteligente.<br />
Es por eso que publicaré los casos en los que reemplazo el uso de IF. En este caso foreach.<br />
<br />
Para evitar problemas en el foreach, una técnica es validar si el tipo de dato es el correspondiente a la operación:<br />
<br />
[php]<br />
<pre>if(is_array($resultados))</pre>
<pre> foreach($resultados as $r)</pre>
<pre> echo $r . "\n";
</pre>
<br />
En cambio, para obtener un código más claro, usamos casting:<br />
<br />
[php]<br />
<pre>foreach(<b>(array)</b>$resultados as $r)
echo $r . "\n";
</pre>
<br />
La segunda solución es más clara y fácil de mantener. Si la variable no fuera un arreglo, no tendríamos el error:<br />
<br />
<i>PHP Warning: Invalid argument supplied for foreach() in...</i><br />
<br />
Además si es un arreglo vacío la iteración no se ejecuta.Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com1tag:blogger.com,1999:blog-12002701.post-71494804524868999422011-07-30T16:25:00.000-04:002011-07-30T16:25:24.098-04:00Protege tu android... de intrusos!<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7SMZtb5RINTC1syYT3fnoSjN3rDNtgqFBGQAEdj5UwPkrSukWjTG2B8hN93BAoqo88pl85b1apD8GH98-F00TCtd5ARAQnUHqWjyg5oUl19SX-mhdJOt1AOmELqeVEHtaySG/s1600/20101013001024_99154.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7SMZtb5RINTC1syYT3fnoSjN3rDNtgqFBGQAEdj5UwPkrSukWjTG2B8hN93BAoqo88pl85b1apD8GH98-F00TCtd5ARAQnUHqWjyg5oUl19SX-mhdJOt1AOmELqeVEHtaySG/s320/20101013001024_99154.jpg" width="213" /></a></div><span class="Apple-style-span" style="font-size: large;"><b>C</b></span>on esta simple aplicación podrás prestar tu android a tus amigos sin tener la preocupación que no abran aplicaciones personales como el correo, mensajes y cualquiera que elijas. Incluso puedes hacer un bloqueo completo del equipo, en el que no se puede hacer nada.<br />
<br />
<a href="http://www.gmobilesoft.com/productshow/41/App%20Locker(Free)">Más información</a><br />
<br />
<a href="http://www.gmobilesoft.com/godownload.php?id=41">Descarga</a><br />
Nota: Es el instalador de la aplicación, luego de descargarlo debe ejecutarse.Cristian Riffo Huezhttp://www.blogger.com/profile/14257249152141700733noreply@blogger.com0