Páginas

miércoles, 15 de abril de 2020

Cannot set property scrollHeight of [object Element] which has only a getter

Ok!, Ha pasado mucho tiempo desde el último posteo. Prometo en algún momento mejorar este blog y ponerme al día con un montón de cosas que estuve aprendiendo los últimos 2 años!!

Sin más, este post es específico por si en algún momento les pasa lo que dice el título:

Cannot set property scrollHeight of [object Element] which has only a getter

Me ocurrió intentando testear un componente que tenía en el código algo como:

let scrollHeight = this.$refs.content.scrollHeight

claro, en jdom scrollHeight de un elemento del DOM es 0, entonces lo lógico es setearlo en el test. De ahí que no se puede porque esa propiedad en jdom solo tiene un getter.

Lo que tenemos que hacer es guardar una variable local en el test para la referencia del objeto y redefinir la propiedad agregando un setter. Así:

let localHeight = 0
Object.defineProperty(wrapper.vm.$refs.content, 'scrollHeight', {
get: function () {
return localHeight;
},
set: function (value) {
localHeight = value;
}
});
wrapper.vm.$refs.content.scrollHeight = '200px'

Espero haberlos ayudado.

Chauuu

lunes, 26 de diciembre de 2016

[Drupal] Bloque adjuntos de todos los idiomas relacionados con el nodo actual

Hola amigos!

Hoy les voy a facilitar la configuración para una vista en Drupal 7 que les puede resultar útil.

El sitio es multilenguaje por parámetro de sesión, debido a que no todo el sitio permite traducción.
El boceto planteaba la inclusión de un bloque a la derecha que mostraba los adjuntos del contenido que se estaba viendo... hasta ahí todo fácil, pero decidieron que se muestren los adjuntos en los distintos idiomas en los que está permitida la traducción! Inglés, Español y Portugués.

Con el módulo Views solamente hay que configurar algunas cosas más de lo normal.
(la vista la cree para mostrar archivos y no contenido, pero creo que es indistinto ya que terminamos mostrando contenido).

En la parte de Avanzadas hay que incluir un filtro contextual:
Uso del Archivo: ID de la Entidad

y luego agregar 2 relaciones:
Uso del archivo: Contenido

y relacionado con este último (Contenido) Traducción del contenido: Traducciones

Finalmente en los campos podemos agregar los campos vinculados a la relación Traducciones
(Traducciones) Contenido: Adjuntos




Espero que les sirva!!

saludos!

lunes, 24 de octubre de 2016

MS SQL DateTime a formato Wordpress XML


Hola!!

Esta vez el trabajo era pasar un dump de 1GB de 5 años de laburo en formato MS SQL a un Wordpress en MySQL.

Encaré el problema con Python para traducirlo al formato de importación XML del Wordpress. En este post les pongo específicamente el conversor de fechas.

MS SQL el formato DateTime lo regresa en el dump como un hexadesimal. Me ayudó esta respuesta que lo traduce a MySQL http://stackoverflow.com/questions/4946292/how-to-cast-the-hexadecimal-to-varchardatetime.

Les dejo el código!


# necesito convertir las fechas de formato CAST(0x0000A5F000472C53 AS DateTime) = Viernes, 22 de Abril de 2016
import datetime
import re

# http://stackoverflow.com/questions/4946292/how-to-cast-the-hexadecimal-to-varchardatetime
# SELECT 
      # CAST(
          # '1900-01-01 00:00:00' + 
          # INTERVAL CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10)  AS SIGNED) DAY +
          # INTERVAL CAST(CONV(substr(HEX(BinaryData),9,8), 16, 10)  AS SIGNED)* 10000/3 MICROSECOND
      # AS DATETIME) AS converted_datetime
# FROM
# (
# SELECT 0x0000987C00000000 AS BinaryData
# UNION ALL
# SELECT 0x00009E85013711EE AS BinaryData
# ) d

def getFiletime(dt):
    # CAST(0x0000A5F000472C53 AS DateTime)
    # print dt.group(0)
    temphex = dt.group(0)
    # print 'temphex:' + temphex
    tempsub18 = temphex[7:15]
    # print 'tempsub18:' + tempsub18
    tempsub916 = temphex[15:23]
    # print 'tempsub916:' + tempsub916
    dias = int(tempsub18, 16)
    microsegundos = int(tempsub916, 16) * 10000/3
    return format(datetime.datetime(1900, 1, 1) + datetime.timedelta(dias, 0, microsegundos), '%a, %d %B %Y %H:%M:%S %Z')
    
    
fname = raw_input("Ingresa nombre de archivo: ")
if len(fname) < 1 : fname = "contenido-demo.sql"

fh = open(fname)
f = open('contenido-fechasbien.sql','w+')
 
for linea in fh:
    if linea.find("CAST(0x") != -1: 
        
        linea = re.sub('CAST\(0x([^\s]+) AS DateTime\)', getFiletime, linea)        
        f.write(linea)
    else:
        #guardar la linea en la tabla creada antes
        f.write(linea)

lunes, 3 de octubre de 2016

Separar una base de datos MS SQL por tablas - Python

Escenario:
  • No tengo (y no voy a instalar) el MS SQL
  • Me pasan un dump de muuuuchos megas
  • Existe un encabezado de tabla donde está el nombre de la tabla por ejemplo:
    /****** Object:  Table [dbo].[Tabla]
  • Necesito importar solo algunas tabla de toda la base a un Wordpress
Decidí dividir el mega archivo en archivos más chiquitos por tabla...

Una anotación importante, el archivo que me habían pasado tenía como codificación UCS-2 Little Endian.... necesitás convertirlo a UTF-8

Con Python son un par de lineas hacer esto... les dejo el código: 

fname = raw_input("Ingresa nombre de archivo: ")
if len(fname) < 1 : fname = "base-utf8.sql"

fh = open(fname)
 
for linea in fh:
    if linea.find("/******") != -1: 
        #fijarse como se llama la tabla
        inibus = linea.find('[dbo].[');
        tabla = linea[inibus+7:linea.find(']',inibus+7)]

        #crear un nuevo archivo, a+ lo crea o lo abre al final para agregar        
        f = open(tabla + '.sql','a+')
        print "Se creo el archivo: " + tabla + ".sql"
        
    else:
        #guardar la linea en la tabla creada antes
        f.write(linea)

viernes, 30 de septiembre de 2016

Accesos Apache 2.4+ por archivo

Cortito y al pie...

Creo que tengo como 4 posteos encolados en borrador próximos a salir pero este lo quería poner por acá rápido.

Me pidieron subir un sitio Wordpress para trabajarlo online, pero que el resto de la humanidad no lo vea todavía... si, hay miles de soluciones, pongo una.

En el .htacces podés restringir el acceso por archivo entonces...
Subís un index.html con el mensaje que quieras, ojo que si accedes al dominio te tiene que reconocer la extensión html en DirectoryIndex

DirectoryIndex index.php index.html index.htm
<Files "index.php">
   Require ip 131.111.111.111 
   Require ip 111.111.111.131 
   Require ip 111.111.111.11
   Require ip 111.111.115.111 
</Files>

Espero le sirva a alguien.

Alek

miércoles, 28 de octubre de 2015

Juego de los Descamisados - Construct2

Durante octubre lanzamos varios productos en el marco del 70 aniversario del 17 de octubre de 1945.

El Documental Transmedia 70 Octubres es un trabajo de 5 meses de: recopilación de archivo de distintas fuentes, entrevistas, fotografía, edición de video, producción y difusión desde principio de septiembre a fines de octubre.

El Documental cuenta con 3 cuentas de Twitter
@70octubres
@descamisado1945
@peron1945

Una cuenta en Facebook , un canal de Youtube, un sitio web, un video 360 de Berisso y un juego realizado con la herramienta Construct2 (versión gratuita)

El juego se puede ver en: Juego de los Descamisados

La herramienta es espectacular para quienes empiezan con la producción de Juegos y para enseñar en niveles básico e intermedio, permite hacer juegos 2D entre otros muchos.

El juego de los descamisados es un juego pensado para escritorio, pero teniendo algunos detalles en cuenta para que se pueda probar en el celu.
Sos un empleado de un frigorífico de Berisso y el objetivo es juntar la mayor cantidad de compañeros y llevarlos a plaza de mayo para que pongan los pies en la fuente.

A continuación les pongo algunas capturas de pantalla y eventos para replicarlo.

Fuego:


Agua:
Para la parte del puente levantado de Avellaneda, cambiamos todas las propiedades del personaje principal y de todos los descamisados que entran con él.



Ranking: Web service creado con Slim Framework, y NotORM. Acá podés ver detalles de la parte de Construct2: 


Luego terminaré de poner capturas... no puedo dejar de jugar!! :D 

Update: no puedo dejar de agradecer a Cata Laval y a Lu Módena por la enorme ayuda para hacer el juego.


miércoles, 21 de octubre de 2015

Debate chequeado - visualizaciones, d3, isotipe y fullpage


Esta semana estuvimos junto a Alvaro Liuzzi y Maxi Ponz creando unas visualizaciones para Chequeado.com.

Se pueden ver en http://chequeado.com/debatechequeado/

Algunas de las tecnologías que me ayudaron a crear la página:

  • Las secciones con altura de 100% y arrastre completa por sección, vínculos desde el menú y algunos detalles más gracias a FullPage.js 
  • Las visualizaciones de círculos con gravedad al centro y arrastre  realizado gracias a las librerías d3.js, geniales y llenas de documentación.
  • El filtro de Bloques de datos chequeables y el de videos fue realizado con Isotipe. En el de videos se sumó la posibilidad de un filtro exclusivo por temática pero con un OR por candidato para lograr el versus. Básicamente se va actualizando un array de filtros y luego se inicializa el isotipe con una función como filtro y el array como parámetro.
  • La nube de Tags trae por ajax los discursos completos y parciales de los candidatos, es cierto, fue una tentación filtrar las palabras y hacerlo estático... pero no. Los colores se toman de un array con d3.scale.ordinal().range. Me baso en esta nube de tags: https://www.jasondavies.com/wordcloud/
  • Los tags que aparecen flotando abajo de los círculos y las palabras fueron hechos utilizando Tipsy, sumando algún parche para que anduviera bien en firefox.
Espero que le sirva a alguno!

lunes, 18 de mayo de 2015

Validaciones avanzadas en Laravel 4.2

Quería compartirles este pedazo de código de ejemplo que tal vez salve a más de uno de un aprieto.

Imaginensé que tienen una tabla de viajes y una tabla de pasajes. Los asientos dentro de la tabla de pasajes se pueden repetir pero no para el mismo viaje. Las reglas de laravel nos quedan chicas y acá hay una posible solución, crear una función que modifique las reglas dinámicamente pasando parámetros desde el controlador. (valido solo el asiento)

<?php
public static $rules = [
            'create' => [
                'asiento_id' => 'required|unique:pasajes,asiento_id,null,asiento_id,viaje_id,:id'
            ],
            'update' => [
                'asiento_id' => 'required|unique:pasajes,asiento_id,:idasiento,asiento_id,viaje_id,:idviaje'
            ]
        ];
        

public static function rules( $action, $merge=[], $id=false, $search=':id')
        {
            $rules = static::$rules[$action];
            if ($id) {
                foreach ($rules as &$rule) {
                    $rule = str_replace($search, $id, $rule);
                }
            }
            return array_merge( $rules, $merge );
        }
?>

Entonces desde el controlador podemos validar


<?php
$validator = Validator::make($data, Pasajes::rules('create', [], $data['viaje_id']));
?>
Y la función reemplazará :idviaje por el código del viaje en el string de validación.
Lo mismo si queremos pasar más de un parámetro ya que str_replace admite remplazar arrays.


<?php
$validator = Validator::make($data, Pasajes::rules('update', [], array($data->pasajero_id, $data->viaje_id, $data->asiento_id), array(':idpasajero', ':idviaje', ':idasiento'))); 
?>
Solamente hay que tener cuidado con el orden en los array.

saludos!!

viernes, 30 de enero de 2015

#FuerzaVicente




Todos los años en la Secretaría hacemos una tarjeta animada para desearles a todos nuestros compañeros unas felices vacaciones y un mejor año, sin embargo la tarjeta 2014 la decidimos dedicar a un nene muy especial, Vicente Albarracín.

La idea de la tarjeta fue hacer que cada uno de sus familiares y amigos le dejaran un mensaje de fin de año a Vicente a través de una estrella fugaz. Cada persona hace click en una parte del cielo y se abre un pequeño formulario para dejar los datos, una vez que envía el mensaje queda su estrella en el cielo y se suma al resto de las estrellas, así cuando Vicente haga click en la estrella aparece el mensaje y la estrella se vuelve fugaz.

Técnicamente la tarjeta se realizó utilizando un servicio web con SLIM, NotORM para las consultas a una base MySQL, con jQuery se hace la llamada AJAX para guardar los datos, SemanticUI para los cuadros de texto flotantes.

El diseño estuvo a cargo de Anabel Garbet y de Catalina García Laval, zarpadas.

Podés ver la tarjeta animada en este link


martes, 4 de noviembre de 2014

No viajamos pero seguimos en cordova

Ya estuvimos viendo cómo instalar cordova en un anterior post, ahora vamos a probar correr nuestra aplicación.

Para hacer nuestro primer APK instalable para android hacemos
cordova build
que es lo mismo que hacer
cordova prepare android
cordova compile android
Vas a necesitar Apache Ant, para windows descargás el ZIP en http://ant.apache.org/bindownload.cgi , descomprimís en algún lugar y vas a tener que agregar
la variable ANT_HOME apuntando al directorio de instalación y %ANT_HOME%\bin al PATH de windows. Error: Failed to run "ant -version", make sure you have ant installed and added
to your PATH.

También es necesario que las herramientas del ADK (Android SDK Build Tools) sean por lo menos la versión 19.1.0 para esta fecha. The SDK Build Tools revision (19 .0.0) is too low for project 'Cordova App'. Minimum required is 19.1.0

.... bueno..... actualizando ...... :(

OK, terminó de actualizar!!

BUILD SUCCESSFUL
Total time: 1 minute 6 seconds

Ahora para probar la aplicación vamos a emular un teléfono android en nuestra PC. La instrucción en cordova es:
cordova emulate android
Esto intentará levantar el emulador que viene con el ADK, pero tal vez tengan primero que crear un AVD (Android Virtual Device), para esto podemos utilizar la linea de comandos o el manager de AVDs.


Cree un Samsung Nexus, casi todo por defecto, con la librería más baja en versionado.

y después de esperar un rato laaargo...



Ahí tenemos nuestra primer aplicación!

Acá un excelente tutorial por las cuestiones básicas de cordova, muy recomendable. Entre los temas tratados está el uso de geolocalización, contactos y la cámara.

http://ccoenraets.github.io/cordova-tutorial/index.html

domingo, 2 de noviembre de 2014

Coordova caapital

El viernes estuve presente en el 4to JS Meetup en Info UNLP, @elmasse habló de Apache Cordova y sobre Sencha Touch.

Algo había leído sobre PhoneGap hace un tiempo, pero esta vez nos vamos a meter un poquito más.

En pocas palabras cordova permitirá crear una aplicación nativa para Android, iOS, etc, desarrollando una aplicación HTML-JS-CSS.

Teniendo node.js instalado, instalamos cordova con 
npm install -g cordova
Para crear un nuevo proyecto:
cordova create holamundo com.ejemplos.holamundo HolaMundo
Esto creará una carpeta nueva holamundo y toda la estructura del proyecto, es recomendable agregarle el dominio inverso.

Para agregar la plataforma Android a nuestro proyecto
cordova platform add android
Vamos a necesitar tener instalado el ADT (Android Developer Tools), si estás en windows tal vez sea necesario agregar ANDROID_HOME al PATH cuando agreguemos la plataforma Android en nuestro proyecto cordova (Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.)

Agregar ANDROID_HOME apuntando a la carpeta sdk del ADT
Agregar al PATH %ANDROID_HOME%\tools
Agregar al PATH %ANDROID_HOME%\platform-tools

También vas a necesitar instalado el JDK (Error: Failed to run "javac -version", make sure you have a Java JDK (not just a  JRE) installed.
Poner la variable JAVA_HOME en el PATH (Error: Failed to run "java -version", make sure your java environment is set up including JDK and JRE. Your JAVA_HOME variable is: C:\Program Files\java\jdk1.8.0_25)
Agregar al PATH %JAVA_HOME%\bin

Tataaaaa  Project successfully created.

miércoles, 22 de octubre de 2014

Nuevo sitio de Periodismo - perio.unlp.edu.ar

Finalmente lanzamos el nuevo sitio de Perio!!

http://perio.unlp.edu.ar/


Vista en grandes resoluciones


Vista en Tablets
Vista para celulares



Hecho: Responsive, filtros, votaciones, nuevos actores, sección alumnos, más herramientas para la Secretaría de Prensa, herramientas para las otras secretarías y direcciones, sub menúes desplegables.

ToDo: Mejorar SEO, mejorar compartir en las redes, agregar herramientas de vinculación con otros sitios de Perio como la Web de Cátedras, fotocopiadora, y SeViT. Mejorar la forma en la que se crean los espacios nuevos. Agregar el seguimiento de novedades para cada sección.

Va bien!

Migrando de OJS 2.2.3 a 2.4.5

Por si alguno tiene problemas en la migración, acá algunos problemas que vamos resolviendo...

Problema:
pg_restore: [archiver (db)] Error from TOC entry 2403; 1259 166527 INDEX article_search_keyword_text ojs
pg_restore: [archiver (db)] could not execute query: ERROR: could not create unique index "article_search_keyword_text"
DETAIL: Table contains duplicated values.
Command was: CREATE UNIQUE INDEX article_search_keyword_text ON article_search_keyword_list USING btree (keyword_text);
Resolución: Eliminar los duplicados

DELETE FROM article_search_keyword_list WHERE keyword_id NOT IN (SELECT MIN(keyword_id) FROM article_search_keyword_list GROUP BY keyword_text);
Problema:
Message: WARNING: pg_query(): Query failed: ERROR: index row size 3040 exceeds maximum 2712 for index "article_supp_file_settings_name_value"
SUGERENCIA: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.

Resolución: Intentamos hacer un vacuum pero no va por ahí. El error viene dado por indexar strings, los cuales pueden superar el límite para los índices. Una alternativa es crear el índice recortando una parte del string, pero quedará para una futura ocasión, por ahora evitamos este índice. Acá una posible solución: http://dba.stackexchange.com/a/25140

Problema:
ERROR: duplicate key value violates unique constraint "c_v_e_s_pkey"
Resolución:
El problema viene dado porque en la actualización 2.3.3 del OJS se empiezan a tabular los intereses, y pasan de ser un campo de texto libre en user_settings a un par de tablas nuevas. Como los textos cargados como intereses están desnormalizados y además las revistas alojadas en nuestro gestor no utilizaban esta funcionalidad, le restamos importancia y solamente migramos el primer interés de cada uno de los que cargaron intereses.

Revistas ACTUALIZADAS! :D

pd.- Desde la versión 2.4.5 hay todo un cambio en como se manejarán los parches y el desarrollo, mucho mejor.

https://pkp.sfu.ca/introducing-the-developers-blog/

lunes, 13 de octubre de 2014

warning: Creating default object from empty value in /sites/default/modules/cck/theme/theme.inc on line 135

En un entorno con PHP 5.4 empiezan a aparecer errores que en versiones anteriores no aparecían.

En el módulo CCK en la linea  de la versión 2.x de Drupal 6 no subieron un fix que ya está en la versión 3.alpha.

Agregar en theme.inc en la linea 131,

if (empty($row->{$child})) $row->{$child} = new stdClass();

jueves, 15 de mayo de 2014

jquery Countdown - fix ie8

Hola!

Para los que estén utilizando este plugin para espectaculares countdowns

http://keith-wood.name/countdown.html

El código que se bajan contiene una versión diferente a la que usan en el sitio. La versión que se bajan produce un error en Internet Explorer 8 (ie8).

http://keith-wood.name/js/jquery.plugin.js

El cambio es en la linea 38 particularmente:
return base[name].apply(this, args);

Cambiar por
return base[name].apply(this, args || []);

o

return base[name].apply(this, [args]);

domingo, 23 de junio de 2013

Utilizando as3HTTPClient para comunicar flash con un Web Service RESTFul

En este post volcaré la experiencia de utilizar as3HTTPClient en un juego creado con AS3 (FlashDevelop) para comunicar el juego con un Web Service RESTFul creado con Slim.

Básicamente el servicio web utiliza los métodos GET, POST y PUT, y voy a tener que utilizar SSL puesto que estará en Facebook además de autenticación... vamos por la api key...

El primer problema
Al insertar el primer código para utilizar el GET necesitaremos esta librería que nos resolverá  los algorítmos criptográficos https://code.google.com/p/as3crypto/ (al momento de escribir esto)
  • Protocols: TLS 1.0 support (partial)
  • Certificates: X.509 Certificate parsing and validation, built-in Root CAs.
  • Public Key Encryption: RSA (encrypt/decrypt, sign/verify)
  • Secret Key Encryption: AES, DES, 3DES, BlowFish, XTEA, RC4
  • Confidentiality Modes: ECB, CBC, CFB, CFB8, OFB, CTR
  • Hashing Algorithms: MD2, MD5, SHA-1, SHA-224, SHA-256
  • Paddings available: PKCS#5, PKCS#1 type 1 and 2
  • Other Useful Stuff: HMAC, Random, TLS-PRF, some ASN-1/DER parsing


Continúo...

Entonces, necesitamos comunicar AS3 con PHP, por lo cual lo métodos de encriptación y desencriptación de los datos deberían funcionar en los 2 lugares. Vamos a utilizar algo simple.

Encontramos esto: http://cambiatablog.wordpress.com/2010/08/24/simple-encryptdecrypt-in-as3-and-php-base64-blues/

y esto: http://flashcodetips.blogspot.com.ar/2011/07/low-level-string-encryption-using-php.html

Pero al utilizar una llave en los AS3 tenemos que también pensar... ¿Qué pasa si decompilan nuestro SWF?
Hay varias herramientas, de encriptación y de ofuscación para los SWF http://bruce-lab.blogspot.com.ar/2012/04/free-swf-encryptor-obfuscator-and.html.

Vamos por ésta que funciona muy bien y es gratuita: http://wonderfl.net/c/6WDD/
La explicación acá: http://makc3d.wordpress.com/2013/01/27/free-swf-obfuscator-update/

(Continuará...)
                   



martes, 11 de diciembre de 2012

Actualizar Esquemas de PostgreSQL

Te puede pasar de muchas formas, puntualmente me ocurrió luego de subir un backup solamente de las tablas. En el sitio empezaron a aparecer errores del tipo:


duplicate key violates unique constraint


Buscando y buscando hay varios scripts dando vueltas. Utilizo PSQL 8.4.
El que me funcionó fue el siguiente:

Para ver las secuencias desactualizadas guardá este código en un archivo:

SELECT
  'SELECT ' ||quote_literal(S.relname)|| ' as seq_name' ||
  ', (select last_value from ' ||S.relname|| ') as seq_val' ||
  ', (select MAX('||quote_ident(C.attname)|| ') FROM ' ||T.relname|| ') as max_id;'

FROM
  pg_class AS S
  ,pg_depend AS D
  ,pg_class AS T
  ,pg_attribute AS C
WHERE
  S.relkind = 'S'
  AND S.oid = D.objid
  AND D.refobjid = T.oid
  AND D.refobjid = C.attrelid
  AND D.refobjsubid = C.attnum
ORDER BY S.relname;

Y ejecutá:

psql -Atq -f mostrar_secuencias.sql -o tmp.sql && psql -Atq -f tmp.sql

teniendo en cuenta de ejecutarlo con el usuario dueño de la base de datos que querés modificar con -U y si ese usuario es dueño de varias bases -d

Te va a aparecer una lista como por ejemplo:
users_user_id_seq|3|5

Para corregir todas las secuencias guardá el siguiente código en algún archivo:

SELECT
  'SELECT SETVAL(' ||quote_literal(S.relname)||
  ', MAX(' ||quote_ident(C.attname)||
  ') ) FROM ' ||quote_ident(T.relname)|| ';'
FROM
  pg_class AS S
  ,pg_depend AS D
  ,pg_class AS T
  ,pg_attribute AS C
WHERE
  S.relkind = 'S'
  AND S.oid = D.objid
  AND D.refobjid = T.oid
  AND D.refobjid = C.attrelid
  AND D.refobjsubid = C.attnum
ORDER BY S.relname;

y ejecutá:

psql -Atq -f arreglar_secuencias.sql -o tmp.sql && psql -Atq -f tmp.sql
Muchas gracias a: http://asynk.ch/blog/

jueves, 18 de octubre de 2012

Empezando con Sass - Responsive Design

Luego de leer varias comparaciones entre distintos pre procesadores de CSS, frameworks, pros, contras y muchos comentarios me decido por Sass para encarar el Responsive Design de un sitio que luego conocerán (bah algunos se lo deben imaginar jaja).

Para instalar Sass en Windows primero nos tenemos que descargar Ruby.
Durante la instalación nos conviene seleccionar la opción de agregar al PATH de Windows el directorio de ejecutables del Ruby.

Abris "Start Command Prompt With Ruby" y escribís:

gem install compass


Nada más!! no lo puedo creer, así de fácil arrancamos con Sass.


viernes, 18 de febrero de 2011

Drupal y la memoria del hosting

  • En caso de que tengan problemas con la memoria en su instalación de Drupal, en la página de Drupal escriben 4 consideraciones a tener en cuenta para agrandar la memoria del PHP (siempre y cuando te dejen).


  1. memory_limit = 128M
  2.  en tu php.ini (recomendado si tenés acceso)
    With root access, you can use the sed util in Linux/Unix based systems, in order to increase the memory for 64M. Don't forget to properly locate your php.ini file!
    sed -i 's/memory_limit = .*/memory_limit = 64M/' /etc/php5/apache2/php.ini
  3. ini_set('memory_limit', '128M'); en tu archivo sites/default/settings.php.
  4. php_value memory_limit 16M en tu archivo .htaccess en la carpeta raiz del drupal, dentro de los condicionales dependiendo del módulo disponible.
  5. O instalar: http://drupal.org/project/drupal_tweaks e incrementar la memoria PHP. Este módulo al momento de escribir esto estaba como no recomendado.


  • En caso de que el limite esté impuesto en el Apache, por más memoria que pongan utilizado los anteriores métodos les va a seguir saliendo el error. En drupal.org también se puede encontrar de una manera un poquito más dificil...

Agregar al principio del .htaccess:
RLimitMem 128000000


MemTest.php
ini_set('display_errors', 'On');$new_mem_limit = '128M';$old_mem_limit = ini_set('memory_limit', $new_mem_limit);
print
'Memory limit changed from '. $old_mem_limit .' to '. $new_mem_limit .'
'
;
$step = 1;
while(
TRUE) {
 
$chunk = str_repeat('0123456789', 1024*1024*$step++);
  print
'Memory usage: '. round(memory_get_usage()/(1024*1024)) . 'M
'
;
  unset(
$chunk);
}