Vale lo reconozco tengo portátil personal nuevo. Total solo han pasado 10 años desde el ultimo.
Las cosas que he aprendido con mi nuevo portátil :
1 Se me ocurrió la feliz idea de instalar una maquina virtual. Pero por supuesto mi portátil lo impedía por la BIOS. Vale no pasa nada, total solo tengo que darle a la tecla en el momento del inicio. Eso seria fácil si no fuera porque tiene Windows 10 y un arranque tan rápido que es imposible hacerlo así.
Por supuesto mire en Internet y lo encontré . Windows trae la posibilitad de acceder a la BIOS desde Windows. Esta oculto pero funciona
https://www.xataka.com/basics/como-acceder-bios-tu-pc-windows-10
Esto por puesto te vale también si quieres arrancar desde USB o cualquier cosa que quieras hacer con arranque. Ojo: no usar sino tienes claro lo que quieres cambiar
2. Por supuesto mi nuevo portátil lo único que contenía la caja era el cargado y el portátil. Relax hay una forma sencilla de hacer un "discos" de recuperación. Como hacerlo
3. Que el nuevo Windows te permite hacer shanshot. Que fuerte. Esta es la típica cosas que siempre hacen los de sistemas y piensa que útil una pena que en casa esto no sea posible. Seamos sinceros el desinstalar aplicaciones nunca funciona bien (ni en Windows, ni en móviles )
viernes, 30 de noviembre de 2018
viernes, 27 de abril de 2018
Llamadas REST al TFS
El TFS se puede consultar por llamadas REST, puedes usar las librerías para tal efecto o puedes hacerlas tú las llamadas
Obtener una lista de proyectos seria
public ListofProjectsResponse.Projects GetAllProjects()
{
ListofProjectsResponse.Projects viewModel = null;
using (HttpClient confClient = new HttpClient(GetCredential()))
{
confClient.BaseAddress = @”http://nametfs:8080/tfs/DefaultCollection/”;
confClient.DefaultRequestHeaders.Accept.Clear();
confClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage message = confClient.GetAsync("_apis/projects?stateFilter=All&api-version=1.1").Result;
if (message.IsSuccessStatusCode)
{
viewModel = message.Content.ReadAsAsync<ListofProjectsResponse.Projects>().Result;
}
}
return viewModel;
}
La seguridad puede ser por un tokent del TFS o puede que no lo tengas así configurado y sea una configuración de Windows. Si ese es tu caso en USUARIO y PASSWORD tienes que poner un usuario con permisos sobre el TFS
private WebRequestHandler GetCredential()
{
WebRequestHandler authtHandler = new WebRequestHandler()
{
Credentials = new NetworkCredential(USUARIO, PASSWORD)
};
return authtHandler;
}
Si está configurado con autentificación Basic
public ListofProjectsResponse.Projects GetAllProjects()
{
ListofProjectsResponse.Projects viewModel = null;
using (HttpClient confClient = new HttpClient())
{
confClient.BaseAddress = @”http:// nametfs:8080/tfs/DefaultCollection/”;
confClient.DefaultRequestHeaders.Accept.Clear();
confClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
confClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials);
HttpResponseMessage message = confClient.GetAsync("_apis/projects?stateFilter=All&api-version=1.1").Result;
if (message.IsSuccessStatusCode)
{
viewModel = message.Content.ReadAsAsync<ListofProjectsResponse.Projects>().Result;
}
}
return viewModel;
}
Donde: _credentials= Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", PersonalAccessToken)))
PersonalAccessToken à este es un valor que tienes en el TFS
viernes, 20 de abril de 2018
Compartir ficheros entre proyectos
Tengo una proyecto asp webform .net del que tengo que hacer otro sitio con parte del código.
Necesito una web nueva, pero que comparta controles de usuario, paginas aspx de la 1 aplicación. No quiero copiar y pegar el código y tenerlo duplicado.
Solución
Pasos
1. Me creo un proyecto vacío
2. Añado todo lo que necesito (aspx, ascx, ccs, js ) pero lo añado como link (nuevo elemento existente , y añadir como enlace)
Al añadir como link el código realmente no está en mi directorio, y eso hace que falle al ejecutar sobre el
La solución es añadir esto al final del fichero del proyecto:
<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
<Copy SourceFiles="%(Content.Identity)" DestinationFiles="%(Content.Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Content.Link)' != ''" />
</Target>
Hace es una copia de todos los ficheros que son link a nuestro directorio y ya funciona todo.
Mil gracias a : http://mattperdeck.com/post/ Copying-linked-content-files- at-each-build-using-MSBuild. aspx
viernes, 12 de enero de 2018
Doble-click en controles ListBox
Los controles ListBox no tiene un evento de servidor para el dobleclick
La solución que más consiste en capturar el doble click por JavaScript e invocar un sumit de un botón oculto.
No me gustaba mucho la idea.
Desde la base de
Hice el mío propio,
{
#region IHttpHandler Members
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
//Escriba aquí la implementación del controlador.
}
#endregion
public event EventHandler DblClick;
private const string _DOUBLE_CLICK = "dbl";
protected virtual void OnDblClick(EventArgs e)
{
if (DblClick != null)
{
DblClick(this, e);
}
}
protected override void OnInit(EventArgs e)
{
if (this.Page != null)
{
this.Page.RegisterRequiresControlState(this);
}
base.OnInit(e);
}
protected override void OnPreRender( EventArgs e)
{
string script = this.Page.ClientScript.GetPostBackEventReference(this, _DOUBLE_CLICK);
this.Attributes.Add("ondblclick", script);
base.OnPreRender(e);
}
public void RaisePostBackEvent(string eventArgument)
{
if (eventArgument == _DOUBLE_CLICK)
{
this.OnDblClick(EventArgs.Empty);
}
}
}
Yo no necesitaba datos, ni da por el estilo por eso hereda de IPostBackEventHandler e implementar la función RaisePostBackEvent
Si hubiera necesitado datos tendrá que haber heredado de IPostBackDataHandler e RaisePostBackData
viernes, 20 de octubre de 2017
Borrar registros duplicados en sqlserver
Según microsoft
Otra solución
-- tabla temporal
SELECT DISTINCT
col1, col2, col3
INTO
#tablaTemporal
FROM
mitabla;
select *
from
#tablaTemporal
-- Borrar todos los
datos de la tabla original
DELETE FROM mitabla;
-- Volcar los datos no
duplicados desde la tabla temporal a la original
INSERT INTO mitabla
SELECT * FROM #tablaTemporal;
drop table
#tablaTemporal;
viernes, 18 de agosto de 2017
Multi-idioma
Tengo una web asp .net webForm el multi-idioma lo tenia resuelto con resources.
Llega el cliente y exige que una página web del sitio los textos estén en ficheros po 😥😥.
Llega el cliente y exige que una página web del sitio los textos estén en ficheros po 😥😥.
Que es un fichero po : portable object
Es un fichero donde están las etiquetas. Más información
http://www.xperimentos.com/2009/02/21/ficheros-de-traduccin-pot-po-y-mo/
Si se puede editar con el poedit y con un block de notas. Esto me parece super interesante con respecto al resources. Pero claro estamos es el último sprint, ahora tengo que usar algo diferente 😥😥😥
Bueno todo tiene solución y está vez la solución está en
https://github.com/turquoiseowl/i18n
A mi personalmente no me funciona las opciones de otras rutas u otro nombre del fichero, pero el resto me fue de lujo.
La próxima vez además de asegurarme si la aplicación tiene que ser multi-idioma, preguntaré donde tienen que ir los textos traducidos.
Tengo una “manía” y es que los formatos de fecha los almaceno
en fichero de recursos, para evitarme problema
de separadores y diferente formatos de fechas.
Para que el idioma del PO me funcionará en servidor
1.
Establecemos el idioma
Thread.CurrentThread.CurrentCulture
= new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentCulture
= Thread.CurrentThread.CurrentUICulture
= new System.Globalization.CultureInfo(culture);
i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(culture);
HttpContext.Current.SetPrincipalAppLanguageForRequest(lt);
2.
Leer etiquetas del po en servidor
public string GetTraduccionPO(string name)
{
i18n.TranslateSvc_HttpContext auixc = new i18n.TranslateSvc_HttpContext(this.Context);
string cad = auixc.ParseAndTranslate("[[[" + name + "]]]");
return cad;
}
3. Para el caso de las fechas
lbFecha.Text
= string.Format(CultureInfo.InvariantCulture,
GetTraduccionPO("fecha"), dato.FechaInicio);
jueves, 1 de junio de 2017
Grid & Update panel y un error raro
Tengo un el tipo grid en un upate panel , cuando se pulsa el botón de consultar te lleva al detalle de la línea.
Unas veces me funciona bien y otras daba el error:
Uncaught Error: Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500
El problema estaba en número de datos, mi grid tenía 28.000 registros .
La solución en mi caso:
<system.web>
<httpRuntime maxRequestLength="2097151" />
</system.web>
Suscribirse a:
Entradas (Atom)