viernes, 19 de agosto de 2016

OHH!!! El error Could not load file or assembly Microsoft.CodeDom.Providers.DotNetCompilerPlatform bla bla bla

Tengo mi aplicación ASP.NET MVC funcionando en mi servidor local, desarrollada en VS 2015, pero cuando lo subo al servidor me da este error:

Server Error in '/test' Application.

Could not load file or assembly 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Access is denied.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Access is denied.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.



...Después de dar vueltas por todos lados encuentro que el problema me lo está generando el paquete Roslyn, el problema es que el servidor donde estoy publicando todavía no tiene el soporte necesario para Roslyn C#6 todavía, por eso la solución puede ser deshabilitar esta funcionalidad, aunque esto nos va a impedir utilizar las más modernas características de C#6, pero al menos tendremos nuestra aplicación funcionando.
Para deshabilitar corremos estas dos líneas en la consola de administración de paquetes

uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
uninstall-package Microsoft.Net.Compilers

Luego de esto pide reiniciar el VS2015 y hay que recompilar. En mi caso funcionó sin tener que hacer ninguna otra modificación.
Más información en este blog http://blog.gldraphael.com/removing-roslyn-from-asp-net-4-5-2-project-template/



viernes, 8 de julio de 2016

Como saber si windows 10 se está iniciando en safe mode

Acá unas cositas útiles si tenemos que descubrir (por alguna extraña razón, y si llegaste a este post buscando esta información es porque alguna terrible maldición ha caído en tu destino, recemos, Jesús, Alá, Buda, los amo a todos!!!) si windows 10 se está ejecutando en modo a prueba de fallos (modo seguro, safe mode, o como corno quieran llamarlo) o no...

Bueno, la primer forma, es solo si sos muy groso y tenés el poder, abrí una Concha Poderosa y metele dedos sin miedo... (powershell y tipear)

gwmi win32_computersystem | select BootupState

Yo lo hice... :)

Bueno... eso da como resultado algo asi:

Normal boot
Fail-safe boot
Fail-safe with network boot

se entiende no??

Bueno, la otra forma, es si la maldición es más fuerte todavía y no tenes el powershell, en ese caso escribo "..." varias veces para que puedas maldecir tu destino tranquilamente antes de continuar con el post

...
...
......
...
......
...
...no es suficiente todavía???
...
......
...
...bueno, continuando, no todo está perdido... la otra forma es usando la línea de comandos (escribí cmd en ejecutar desde el inicio de windows) y después escribir:

wmic COMPUTERSYSTEM GET BootupState

bueno... y eso es todo.




miércoles, 2 de diciembre de 2015

Como bajar en un csv todos mis grupos de facebook

Bueno, algo de automatización... Hace unos días quería sacar una lista de todos mis grupos de facebook y esto me llevo a descubrir una linda herramienta que permite sacar información y automatizar actividades repetitivas que hacemos por internet.
La herramienta de la que hablo es iMacros (http://imacros.net/) que tiene un lindo plugin para firefox.
Se instala el plugin en firefox y despues de loguearme en mi face corro el siguiente iMacro me deja un listado de todas urls de mis grupos en un archivo csv

VERSION BUILD=8940826 RECORDER=FX
TAB T=1

URL GOTO=https://www.facebook.com/PanchoGuevara/groups

TAG POS={{!LOOP}} TYPE=A ATTR=HREF:*/groups/* EXTRACT=HREF

SAVEAS TYPE=EXTRACT FOLDER=* FILE=misGrupos.csv

jueves, 9 de enero de 2014

El eclipse instala Pydev pero no lo muestra...

Un problema bastante común al instalar el Pydev en Eclipse (lo instale entrando por Help->Install new software y agregando "PyDev - http://pydev.org/updates"), aparentemente se había instalado todo bien, pero sin embargo después de reiniciado el Eclipse no se veía el Pydev...
Luego de romperme la cabeza buscando por internet veo que el problema es porque Pydev necesita tener java en version 7 para funcionar. 
Verifico mi Debian Wheezy y por defecto trae java 6, por suerte se puede instalar java 7 desde el gestor Synaptic, buscamos algo como java-7-openjdk-amd64 o algo y lo instalamos) después hacemos desde una terminal con root:

update-alternatives --config java

y ahí aparece un menú que permite elegir la versión de java por defecto y seteamos la 7.

Reiniciamos Eclipse y ¡eureca! apareció el pydev. 

lunes, 11 de noviembre de 2013

Cambiar timeout en php

Un programa en php que tiene que hacer muchas operaciones con la base de datos (lo cual tarda un tiempo considerable ya que hace un merge de una base grande casi completa) me tiraba el error...

Fatal error: Maximum execution time of 30 seconds exceeded in xxxx

Para arreglar el problema desde PHP le defino mas time_limit al script usando la función

set_time_limit(600);


... que limita el tiempo máximo de ejecución del script... acá más info: http://php.net/manual/es/function.set-time-limit.php

Cómo setear variables globales en MySQL

Desde línea de comandos (consola linux)...




#>mysql -uroot -e "show variables like '%timeout';" -p
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 28800 |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 28800 |
+----------------------------+-------+ 
10 rows in set (0.00 sec)
#>mysql -uroot -e "SET GLOBAL net_read_timeout=600;" -p 
#>mysql -uroot -e "show variables like '%timeout';" -p
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 28800 |
| net_read_timeout           | 600   |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 28800 |
+----------------------------+-------+ 
10 rows in set (0.00 sec)

Listo!
:-P

miércoles, 25 de septiembre de 2013

Borrar muchos registros en CouchDB

Bueno, acá les dejo un script en Perl para borrar todos los registros obtenidos de una vista de CouchDB.


use strict;
use Store::CouchDB;

# database
my $couch_db = Store::CouchDB->new({ user => '<mi_user>', pass => '<mi_clave>' });
$couch_db->config({db => '<nombre_de_la_base>'});


my $mis_docs = $couch_db->get_view({  view => '<documento_de_diseño>/<nombre_de_la_vista>' });


while ( my ($key, $value) = each($mis_docs) ) {
    print "borrando registro id: $key\n";
    $couch_db->del_doc({id => $key}) or warn "err\n";
}

Espero que les sea útil.

martes, 10 de septiembre de 2013

CouchDB - Manejo de usuarios

Bueno, acá como crear usuarios, darles permisos y roles, etc...
Primeros, para el administrador, ni bien entramos deberíamos ponerle clave al administrador, eso de hace desde el futon (por defecto en http://localhost:5984/_utils/) y haciendo click en la parte inferior derecha, donde dice  " Welcome to Admin Party! Everyone is admin. Fix this" (en el Fix this :-). Y ahí nos pedirá Usuario y Clave.

Después deberíamos entrar en las bases de datos que tengamos y setearle miembros y administradores, ya que las bases que no tienen ningún miembro son públicas.
También si queremos deshabilitar el acceso anónimo a la base debemos entrar en Tools->Configuration (en la parte derecha del futon) y setear en true la variable require_valid_user.

Tipos de usuarios

En CouchDB se pueden setear tres tipos de usuario:

  • Adminsitradores: como vimos arriba, los usuarios admin del servidor tienen todos los privilegios.
  • Administradores de la base de datos: tienen todos los privilegios dentro de la base de datos de la que son administrador, pero no pueden acceder a otras bases ni crear o borrar otras bases ni la propia.
  • Y por último los miembros de la base de datos: pueden ver, crear y editar documentos en la base, excepto los de diseño.
Los Server Admin ya vimos como se setean. Los Database Administrators se setean en el objeto de seguridad de la base de datos, que se configura desde futon, entrando en la base y luego, en el botón "Security", en la parte superior, ahí me deja  ingresar los admins y los members de la base.
Hay que tener en cuenta que para que no permita acceso a cualquier usuario hay que ingresar al menos un valor en estos campos, ya que si dejamos por ejemplo los Roles vacíos va a dejar entrar a cualquiera, porque la base no tiene ningún rol asignado (lo mismo para miembros); entonces cualquiera podrá modificar documentos, aunque los documentos de diseño solo podrán ser modificados por administradores del servidor.

Usuarios

Para crear usuarios en nuestra base es muy facil, se crean como documentos en la base _users (si quisiéramos usar otro nombre se setea en la propiedad authentication_db de configuración). Con lo cual para crear el usuario pepe haríamos:

{
   "_id": "org.couchdb.user:pepe",
   "name": "pepe",
   "password": "password_de_pepe",
   "roles": ["DataEntry"
   ],
   "type": "user"
}
Para los usuarios, el _id debe comenzar con "org.couchdb.user:nombre de usuario" y nombre de usuario debe coincidir con name. En "roles" ponemos los roles a los que el usuario pertenece.

Roles


En nuestro servidor de base de datos podemos crear diferentes roles para los usuario. Como vimos en la creación de usuarios, le podemos dar al mismo usuario uno o más roles. Bueno, ahora entrando en nuestra base y yendo a "Security" (en el menú superior de Futon) podemos darle a esos roles permisos de administrador o miembro de la base; lo que hace que todos los usuarios que tengan el rol adquieran sobre nuestra base los permisos que le demos al rol.