Sage 100 i7 – Error: Archivo en uso!

Este es un error que puede pasar luego de haber instalado Sage 100 i7, posiblemente tambien se aplique a Sage 100 v16, el problema es que no da demasiados detalles simplemente al abrir el programa sale un error que pone “Archivo en uso” y no deja hacer nada mas.

Este error significa simplemente que la base de datos que estas intentando utilizar esta bloqueada para nuevos usuarios que quieran acceder, en otras palabras el Sage esta configurado por defecto para trabajar en modo “Monousuario”. Esto hace que al conectarse el primer usuario al Sage bloquea las futuras conexiones.

Lo unico que hay que hacer es configurar el Sage para que funcione en modo “Multiusuario”  para esto hay que ir a:

Archivo > Configuracion del sistema y acceso

Bajo la pestaña Sistema se tiene que cambiar la opcion: “Tipo de acceso”  de Monousuario a Multiusuarios. Hacer eso en Fichier commercial y Fichier comptable.

Reiniciar el Sage y el error habra desaparecido.

2014-09-08_08h54_30

Embedding a Mailchimp form to ASP.NET webforms

A lot of people have problems when they need to include a Sign up form to an ASP.NET based page, you can add the form and it shows up but when you fill it in and click on the Subscribe button it just refreshes the page and nothing else happens.

This is because ASP.NET already defines a <form> tag on the page and it is being executed instead of the <form> tag that the mailchimp code uses.

The problem is that not even mailchimp tells you how to do it, instead they just say that for asp.net pages “some extra work is needed” and then they give you a link to a page that explains about multiple <form> tags in ASP.NET webforms.

You indeed can have multiple form tags with the runat server property but only one can be declared as visible at the time, but guess what, in order to make the mailchilp sign-up form to work you can even forget about using the form tag, it is as simple as this:

  1. Copy the code from mailchimp
  2. Save the url that you find into the “action” property of the form tag
  3. Delete the <form> tag (and the closing </form> tag of course) just leave the div “<div id=”mc_embed_signup”>”
  4. In the submit button code add onClick=this.form.action=’YourURL’;this.form.submit();

 

This way you are submiting the form without using the form tag and it works fine!.

This of course also applies to non-mailchimp forms, just apply the same method.

Proteger carpetas, accesso solo para administradores con web.config

Si trabajamos con un sitio dinamicon en ASP.NET normalmente existe una interfaz de administracion donde se pueden hacer cambios en el sitio.

Esta interfaz tiene que estar siempre protregida para que solo los usuarios que deban actualizar el sitio o los administradores del sitio puedan acceder a ella y no se debe permitir acceso como usuario anonimo o como cualquier otro tipo de usuario.

En ASP.NET existen los llamados Roles, que permiten clasificar los tipos de usuario, lo ideal seria crear al menos 2 tipos de usuario, un tipo “user” y un tipo “admin” (se pueden poner cualquier nombre pero a modo de ejemplo es mas explicativo asi).

Una vez que tenemos los roles creados y funcionando para proteger una carperta y solo dar acceso al Rol de “admin” lo unico que necesitamos hacer es crear un archivo web.config y agregar las lineas de codigo que tenemos abajo:

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<system.web>
<authorization>
<allow roles=”admin” />
<deny users=”*” />
</authorization>
</system.web>
</configuration>

No hace falta agregar nada mas, con esto es suficiente, si, es un web.config bastante pequeño y sencillo.

Si no se desea crear roles y solo se quiere dar acceso a ciertos usuarios, tambien se puede hacer, la unica diferencia seria que en vez de permitir el acceso a un Rol se permitira el acceso a un usuario, en vez de utilizar “allow roles” se utilizara “allow users” y se pondra el nombre del user que se desee dar acceso, la segunda linea queda igual simplemente deniega el acceso a todos los demas usuarios con deny users=”*”  donde “*” significa todos,  Ejemplo:

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<system.web>
<authorization>
<allow users=”george” />
<deny users=”*” />
</authorization>
</system.web>
</configuration>

Otra cosa que podemos hacer con este codigo es proteger una carpeta de usuarios anonimos (no autenticados), para esto podemos utilizar <deny users=”?” /> lo que significa eso, denegar acceso a todos los usuarios anonimos.

What is Web Performance Optimization (WPO) ?

What is WPO?

WPO Stands for: Web Performance Optimization

Google is getting more and more complex over time, its algorithm is changing on a daily basis in order to return better results and experience to the users.

Before it was only about SEO, but since a couple of years now, WPO also plays an important role, nobody likes a slow website that takes ages to finish loading, just remember the 5 seconds rule (if the user can’t see what is looking for in 5 or less seconds the user will just leave your website and go to the next search result).

Google will also give your site more importance if your website is optimized for speed, so make sure to work on the WPO (Web Performance Optimization) of your site to get better chances on google.

So what is Web Performance Optimization all about?

In one word “Speed”, users and google like a quick website, that also translates into happy users and more possible customres.

So how do you optimize your website speed?

  1. Optimizing your code
  2. Optimizing your image sizes
  3. Optimizing the total requests your website does to load all the resources it needs to show up
  4. Hosting your website on a quick server
  5. Configuring your webserver to make proper use of cache
  6. Using css sprites for small images (allowing to make fewer requests to the webserver)
  7. Enabling GZip compression
  8. Minifying CSS, Javascript and HTML code
  9. And in many other ways…

You can use the google tool to check your website performance and get advice on how to improve it, the tool is  “Page Speed“. To analyze your website all you have to do is go to this url http://developers.google.com/speed/pagespeed/insights/

Then just type in your url and click on the ANALYZE button and you will get the suggestions for the Desktop and mobile versions of your website.

Yahoo’s tool for WPO is “YSLOW“  can also help you with more suggestions to keep improving your website speed.

You may need to learn how to configure your server, the configurations can change depending on what type of server you use and version, Apache, IIS6, IIS7, etc, so the way to make the configurations may vary.

Habilitar CACHE para sitios web en entorno Windows con IIS

Una forma de hacer que un sitio web cargue mas rapidamente a la ves y el servidor tenga menos carga es habilitando el control de Cache sobre recursos estaticos de la web que no cambiaran con frecuencia, como por ejemplo ciertas imagenes, archivos js o hojas de estilos (siempre y cuando la web no este en fase de desarrollo).

Para hacer esto en un entorno Windows con IIS solo necesitamos agregar unas cuantas lineas al archivo web.config

<system.webServer>

<staticContent>
<clientCache cacheControlCustom=”public”
cacheControlMaxAge=”8640:00:00″ cacheControlMode=”UseMaxAge” />
<remove fileExtension=”.js” />
<mimeMap fileExtension=”.js” mimeType=”text/javascript” />
<remove fileExtension=”.css” />
<mimeMap fileExtension=”.css” mimeType=”text/css” />
</staticContent>

</system.webServer>

Ahora solo hara falta agregar todos los mimeTypes que se deseen poner en Cache.

Una herramienta interesante y gratuita de Google para comprobar que archivos podriamos poner en Cache, ademas de dar muchas otras sugerencias es Page Speed Insights se puede acceder desde aqui:

https://developers.google.com/speed/pagespeed/insights

Solo tenemos que ingresar la URL de la Web a analizar y obtendremos todas las sugerencias necesarias para optimizarla y hacerla mas rapida.

Otra herramienta gratuita es la de Yahoo, esta da otras sugerencias un tanto distintas de la anterior se llama YSlow la podras acceder desde aqui:

http://yslow.org/

Por ultimo tenemos a GTmetrix.com que no hace otra cosa que analizar la web con PageSpeed Insights y YSlow y mostrar los resultados!, una manera aun mas rapida de ver las sugerencias y analizar el tiempo de carga de nuestra web!.

Como incluir Vary: Accept-Encoding en el Header de las paginas con ASP.NET y Apache

Es posible que algunos usuarios por algun motivo no tengan habilitado la compatibilidad con datos comprimidos como por ejemplo gzip, algunos bugs en ciertos  proxies públicos pueden llevar a las versiones comprimidas de los recursos de que se sirve a los usuarios que no son compatibles con la compresión. Especificación de la Vary: Accept-Encoding cabecera indica al proxy para almacenar una versión de comprimido y sin comprimir del recurso lo que garantiza que no abran problemas con la carga de la pagina, y tambien garantiza una carga mas rapida de la pagina si se utilizan los recursos comprimidos.

Si trabajamos en un entorno Windows con IIS podemos incluirlo facilmente a travez del archivo web.config solo es necesario agregar las siguientes lineas:

<system.webServer>
<httpProtocol>
<customHeaders>
<remove name=”Vary”></remove>
<add name=”Vary” value=”Accept-Encoding”></add>
</customHeaders>
</httpProtocol>
</system.webServer>

Si se trata de un entorno Linux con Apache entones lo haremos con el archivo .htaccess incluyendo las siguientes lineas:

<IfModule mod_headers.c>
  <FilesMatch “\.(js|css|xml|gz|html)$”>
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

Con  esto ya lo tendriamos funcionando!

Convert a custom type ArrayList to an Array in C#

If you ever tried to convert a custom type ArrayList to an Array you will most likely get an error:

This won’t work:

Job[] jobsArray = allJobs.ToArray();

Cannot implicitly convert type ‘object[]‘ to ‘JNetwork.Job[]‘. An explicit conversion exists (are you missing a cast?)

Neiter this:

Job[] jobsArray = allJobs.ToArray<Job>();

‘System.Collections.ArrayList’ does not contain a definition for ‘ToArray’ and the best extension method overload ‘System.Linq.Enumerable.ToArray<TSource>(System.Collections.Generic.IEnumerable<TSource>)’ has some invalid arguments

To solve the problem you will have to specify the custom type using the operator: “typeof”

And using the Cast type: “as”  will make a strong typing cast on top of the array.

So the way to do it would be as follow:

Job[] jobsArray = allJobs.ToArray (typeof(Job)) as Job[];

Sitios web con y sin www ?, redireccionando con .htaccess

Todo sitio web que este colgado en internet tiene un URL, este url esta normalmente conformado de 3 partes [www.][nombreDelSitio][.com]  las ultimas 2 partes son obligatorias, sin embargo el www no siempre estara presente.

Muchos sitios funcionaran de ambas formas con o sin el www por ejemplo: www.nombreDelSitio.com y nombreDelSitio.com pueden abrir la misma pagina web indistintamente, sin embargo tambien puede ocurrir que una de ellas abra el sitio web y la otra muestre un mensaje de error, dependiendo de como haya sido configurado el servidor donde esta alojado.

En ambos caso es algo malo :) por que si da un error es bastante probable de que hayamos perdido un cliente, y si lo abre de ambas formas es un problema para SEO por que a los ojos de Google son 2 paginas completamente distintas! ya que son 2 URLs diferentes, pero a la vez con el contenido es identico!, lo que creara un conflicto de “Contenido Duplicado”, si bien dicen los grandes masters del SEO, incluyendo a Matt Cutts, que no es mucho problema para google, hemos podido comprobar que si puede afectar negativamente, y de todas maneras siempre es mejor ceñirse a las buenas practicas.

Entonces como podemos solucionar este problema?, pues existen varias maneras de solucionarlas, por citar algunas:

* Hacer un redireccionamento a travez de los controles del dominio con las configuraciones del DNS

* Gestionarlo a travez del servidor web, en caso de tener el sitio alojado en un servidor Linux podrias hacer uso del archivo .htaccess

La regla que hay que incluir se encuentra debado de la declaracion: RewriteEngine On

Y solo debe contener esto:

RewriteCond %{HTTP_HOST} !^www\.nombreDelSitio\.com$ [NC]
RewriteRule (.*) http://www.nombreDelSitio.com/$1 [R=301,L]

Esto simplemente dice que si el url del sitio no contiene www. que lo redireccione a mismo url, pero incluyendo www. de manera que asi esto lo hara en cualquier pagina del dominio, no solo en el homepage. Tambien especifica que es un redireccionamiento de tipo 301 que significa que es un redireccionamiento Permanente, dando a entender a google que es el URL definitivo y no una simple redireccion temporal.

SEO: Como evitar que un enlace de baja calidad afecte a tu sitio web.

El PageRank de una pagina web se ve afectado positiva o negativamente por la cantidad y calidad enlaces que recibe, si estamos recibiendo enlaces de sitios web de mala calidad esto puede afectar negativamente a al PageRank, y por lo tanto tambien puede afectar en cuanto a posicionamiento (podemos bajar posiciones en Google).

Si bien el PageRank es solo uno de los mas de 200 indicadores que actualmente utiliza Google para decidir en que posicion de los resultado estara situada tu pagina, los enlaces de mala calidad pueden hacer una gran diferencia.

Muchas veces sacar un enlace que apunta a nuestro sitio desde un sitio ajeno no es tarea facil ya que no tenemos acceso a dicho sitio para hacer los cambios necesarios por lo cual necesitamos contactar con el administrador del sitio y si tenemos suerte nos hara el favor de quitarlo. Existen sitios que te piden dinero para quitar los enlaces y otros simplemente no contestan o no lo hacen, otras veces ni existe una forma de contactarlos, no existe telefono, ni email de contacto ni formulario de contacto. Para este tipo de casos  existe una herramienta de Google llamda Disarow Links que la puedes encontrar aqui:

https://www.google.com/webmasters/tools/disavow-links-main

Lo unico que hace falta es ser usuario autorizado del sitio en Google Webmaster Tools para poder hacer uso y decir que enlaces entrantes queremos que Google ignore o no considere a la hora de calcular nuestra posicion en el buscador.

Una manera de detectar enlaces de baja calida es comparando las fechas en las que empezamos a bajar de posiciones y bajar la lista de links entrantes que proporcione Webmaster Tools (que incluye una columna donde pone la fecha que el link fue encontrado) de esta manera podemos ver si existe algun link de baja calidad que nos esta afectando.

Hay que tener especial cuidado de no quitar enlaces que nos esten ayudando ya que esto podria afecarnos negativamente.

En conclusion, google pone a nuestro alcanze una herramienta gratuita y muy util a la hora de lidiar con links de baja calidad llamada Disavow Links, o en castellano Desautorización de vínculos, sin embargo hay que utilizarla con cuidado para no desautorizar enlaces de buena calidad. De todas maneras es necesario limpiar todos los enclaces no naturales o de mala calidad que apunten a nuestros sitios ya que con solo Desautorizarlos puede no ser suficiente somo lo podemos leer en la imagen de la herramienta de google:

Disavow Links

Herramienta Desautorizar Vinculos de Google