Augusto Humire Martinez web blog

algo de web-in

MSProject

1.- Campo %Esperado, %Planificado

Crear campo personalizado “%Planificado” con la siguiente formula:

Format(IIf([Fecha actual]<[Comienzo];0;IIf([Fecha actual]>[Fin];1;ProjDateDiff([Comienzo];[Fecha actual];[Calendario del proyecto])/[Duración]));”0%”)

Agregar la columna, Listo.

 

 

noviembre 27, 2019 Posted by | Uncategorized | Deja un comentario

Regular Expressions utiles

Algunas Expresiones Utiles

Este no pretender ser un tutorial ni mucho menos un manual, solo pondre alguno de las expresiones que sirvieron en algun momento, y lo tendre como ayuda memoria, si ha alguien le sirve o quiere colaborar con algunos, go ahead.

Trim()
^[ \t]+|[ \t]+$

Formato de correo electronico
^[a-z0-9!#$%&’*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&’*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

IPv4
/b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b/

IPv6
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

DNI
^\d{8}(?:[-\s]\d{4})?$

RUC
^((?!(10-20))[0-9]{11})$

Contraseña (8 a 16 digitos, al menos un digito, una minuscula, una mayuscula, un caracter no alfanumerico)
^(?=.*\d)(?=.*[\u0021-\u002b\u003c-\u0040])(?=.*[A-Z])(?=.*[a-z])\S{8,16}$

Econtrar palabra excepto
Encontrar el caracter “:” excepto los que se parecen a “?:” (para hacer split de una cadena usando regex) https://dotnetfiddle.net/PeVuMM
(?<!\?):


string input = "AV Rocket 456:CONTACT?:JANE OR TARZAN:URL?:http?://www.jane.com:Time Delivered 18?:15:Product Description";
string pattern = @"(?<!\?):";

Resultado:

'AV Rocket 456'
'CONTACT?:JANE OR TARZAN'
'URL?:http?://www.jane.com'
'Time Delivered 18?:15'
'Product Description'
String s = "foobar barbar beachbar crowbar bar ";
string pattern = \w*(?<!foo)bar

Resultado

barbar
beachbar
crowbar
bar

https://dotnetfiddle.net/PeVuMM

 

http://w3.unpocodetodo.info/utiles/regex.php
https://dotnetfiddle.net/

 

octubre 24, 2019 Posted by | Uncategorized | Deja un comentario

Obtener identity de un insert masivo o por lotes con output

Alguna vez hemos necesitado registrar valores en la tabla masivamente o por lotes para hacer un registro mucho mas rapido, pero ocurre si la tabla destino tiene un identity definida en la llave primaria?

Se puede obtener los identity de forma masiva tambien?
La respuesta es si, esto se logra con OUTPUT este commando nos puede retornar los campos las filas insertadas, aicionalmente un pequeño artilugio y voila, tenemos todos los indentity generados de un solo golpe.

Este es un ejemplo de como funcionaria

Cree las siguientes tablas y llene tantos valores considere necesario a la tabla DailyEvent, la otra tabla Incident puede dejarla vacia (es la tabla destino, la que contiene los identity a capturar)

—————————————————————————-
CREATE TABLE [dbo].[DailyEvent](
[Location] [varchar](100) NULL,
[Type] INT DEFAULT 0,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Incident](
[IncidentId] [int] IDENTITY(1,1) PRIMARY KEY
[Location] [varchar](100) NULL,
[Type] [int] NULL,
[ClientId] [varchar](100) NULL,
[TimeEvent] [varchar](100) NULL,
[Guid] [varchar](100) NULL
)
GO
—————————————————————————-

Luego de llenar la tabla DailyEvent (la que contendria los datos origen en su proyecto)

ejecute el siguiente script y verá que la tabla #TEMPORAL_TABLE contiene todos Identity que se registraron en la tabla Incident, luego de ello haga los Ud desee con los datos que tiene en #TEMPORAL_TABLE, al fin y al cabo los tiene todos alli incluyendo los Id generados masivamente.

—————————————————————————-
IF object_id(‘tempdb..#TEMPORAL_TABLE’) IS NOT NULL
BEGIN
DROP TABLE #TEMPORAL_TABLE;
END

SELECT
0 AS IncidentId
,Location
,Type
,ClientId
,TimeEvent
,NEWID() AS Guid
INTO #TEMPORAL_TABLE
FROM DailyEvent DE
WHERE Type = 2 –CRASH CAR

DECLARE @pivotTable TABLE (IncidentId INT, Guid VARCHAR(100))

INSERT INTO Incident
(
Location
,Type
,ClientId
,TimeEvent
,Guid
)
OUTPUT inserted.IncidentId, inserted.Guid
INTO @pivotTable
SELECT
Location
,Type
,ClientId
,TimeEvent
,Guid
FROM #TEMPORAL_TABLE

UPDATE TT SET
TT.IncidentId = PP.IncidentId
FROM #TEMPORAL_TABLE AS TT
INNER JOIN @pivotTable AS PP ON PP.Guid = TT.Guid

SELECT * FROM #TEMPORAL_TABLE
—————————————————————————-

Voila.

mayo 10, 2018 Posted by | Uncategorized | 1 comentario

Como buscar un campo en la base de datos

SELECT TABLE_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ‘%campo_que_quiero_buscar%’

mayo 4, 2018 Posted by | Uncategorized | Deja un comentario

Como buscar texto en un procedimiento alamacenado

SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like ‘%texto_buscado%’;

diciembre 19, 2015 Posted by | Uncategorized | Deja un comentario

Split in Sql Server

Funcion que emula la funcion split del lenguaje C#, debera crear una funcion y lugo llamarla tal como se muestra a continuacion.

CREATE FUNCTION bsl_Split
(
   @cadena VARCHAR(MAX)
   ,@separator VARCHAR(MAX)
)
RETURNS @tabla TABLE
(
   value VARCHAR(MAX)
)
BEGIN

   DECLARE @individual varchar(max) = null

   WHILE LEN(@cadena) > 0
   BEGIN
      IF PATINDEX(‘%’ + @separator + ‘%’,@cadena) > 0
      BEGIN
         SET @individual = SUBSTRING(@cadena, 0, PATINDEX(‘%’ + @separator + ‘%’,@cadena))
         INSERT INTO @tabla values(@individual)

         SET @cadena = SUBSTRING(@cadena, LEN(@individual + @separator) + 1,       LEN(@cadena))
      END
      ELSE
      BEGIN
         SET @individual = @cadena
         SET @cadena = NULL
         INSERT INTO @tabla values(@individual)
      END
   END;

   RETURN;
END
go

SELECT * FROM dbo.bsl_Split(‘a,f,g,b,v,f,r’, ‘,’)

Resultado
===============
a
f
g
b
v
f
r

 

Imagen

agosto 22, 2013 Posted by | Uncategorized | | 1 comentario

RestFull con WCF y devolviendo JSON o XML

La idea principal contiene dos temas, el primero crear un servicio Rest creando un controlador que exponga los recursos del servicio utilizando RESTFull, el segundo tema es devolver los resultados en formato JSON o XML, dependiendo de la necesidad que Ud. tenga.

En principio la idea es mas sencilla de lo que parece, muchos tutores hablan de exponer JSON con REST pero no encontré mucho material al respecto y tampoco eran claros en la forma del como. y como no queria olvidar de como lo hice aqui una ayuda memoria que les puede servir tambien a Uds.

Este tutorial no contiene  teoria de REST, es preciso lea antes de usar este tutorial un poco de teoria sobre REST, para llevar este tutorial es preciso que tenga algunos conocimientos basicos de los que es un servicio web, algo de ASP.Net y un poco de WCF, si no los tiene no importa aventurese probablemente lo logre, sin embargo tambien les dejo las fuentes comprimidos en rar (cambiar la extension jpg por rar) para que lo puedan ver y revisar.

Para bajar la aplicacion completa de ejemplo haga click aqui y cambie la extension jpg por rar (wordpress no permite insertar archivos que no sean de imagenes).

Ensamblados Requeridos:

using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;

Paso 1:

Crear un nuevo proyecto “WCF Service Application”,

Imagen

Paso 2:

Borrar los archivos IService1 y Service1 desde el explorador de la soluciones y agregue una clase con nombre RestService.cs y una interface con el nombre IRestService.cs

Imagen

Paso 3: 

Crear una clase llamada Persona

Imagen

[DataContract]
public class Persona
{
[DataMember]
public string DNI;

[DataMember]
public string Nombres;

[DataMember]
public string ApellidoPaterno;

[DataMember]
public string ApellidoMaterno;
}

Adicionalmente se requiere agregar una referencia al namespace System.Runtime.Serialization 

Paso 4: 

Dentro de la interface IRestService  escribiremos el siguiente codigo

Imagen

[OperationContract]
[WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Json, UriTemplate = “”)]
List<Persona> GetAllPersona();

[OperationContract]
[WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Json, UriTemplate = “{dni}”)]
Persona GetPersonaByDNI(string dni);

[OperationContract]
[WebInvoke(Method = “POST”, UriTemplate = “”)]
Persona AddPersona(Persona persona);

[OperationContract]
[WebInvoke(Method = “PUT”, UriTemplate = “set?dni={dni}”)]
Persona SetPersona(string dni, Persona newPersona);

[OperationContract]
[WebInvoke(Method = “DELETE”, UriTemplate = “del?dni={dni}”)]
int DelPersona(string dni);

Paso 6: 

En la clase RestService inserte el siguiente codigo

List<Persona> _personaList = new List<Persona>();

private List<Persona> GetList()
{
return new List<Persona>()
{
new Persona(){ DNI = “98765412”, Nombres = “Debora”, ApellidoPaterno = “Meltrozo”, ApellidoMaterno = “Rosado” },
new Persona(){ DNI = “45678945”, Nombres = “Rosa”, ApellidoPaterno = “Meltrozo”, ApellidoMaterno = “Duro” },
new Persona(){ DNI = “32178945”, Nombres = “Rosa”, ApellidoPaterno = “Melano”, ApellidoMaterno = “Rosado” },
new Persona(){ DNI = “14785236”, Nombres = “Juana”, ApellidoPaterno = “Lajo”, ApellidoMaterno = “Diaz” },
new Persona(){ DNI = “12345678”, Nombres = “Augusto”, ApellidoPaterno = “Supo”, ApellidoMaterno = “Tito” },
};
}

public List<Persona> GetAllPersona()
{
return this.GetList();
}

public Persona GetPersonaByDNI(string dni)
{
return this.GetList().FirstOrDefault(x => x.DNI.Equals(dni));
}

public Persona AddPersona(Persona persona)
{
_personaList.Add(persona);
return persona;
}

public Persona SetPersona(string dni, Persona newPersona)
{
Persona persona = new Persona();
persona = _personaList.FirstOrDefault(x => x.DNI.Equals(dni));
if (persona != null)
{
persona.DNI = newPersona.DNI;
persona.ApellidoPaterno = newPersona.ApellidoPaterno;
persona.ApellidoMaterno = newPersona.ApellidoMaterno;
}
return persona;
}

public int DelPersona(string dni)
{
return _personaList.RemoveAll(x => x.DNI.Equals(dni));
}

Paso 7: 

Debemos agregar compatibilidad con ASP.NET para ello decoramos la clase RestService con

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

entonces la clase RestService debera de quedar asi

Imagen

Paso 8:

Agregue un archivo Global.asax y en el evento Application_Start rutearemos el servicio entonces el evento quedaria asi

Imagen

protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute(“restServicePersona”, new WebServiceHostFactory(), typeof(RestService)));
}

Donde restServicePersona sera la direccion del controlador y RestService es el nombre del Tipo a rutear

La configuración de
En el web.config borre todo lo que esta dentro de <system.serviceModel> e inserte la siguiente configuracion

Imagen

<serviceHostingEnvironment aspNetCompatibilityEnabled=”true”>
</serviceHostingEnvironment>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name=””
helpEnabled=”true”
automaticFormatSelectionEnabled=”false”
defaultOutgoingResponseFormat =”Json”>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>

Paso 9:

Ejecute la aplicacion y habra un browser y haga la llamada a Rest atraves de http usando la direccion http://localhost:XXXXX/restServicePersona/ donde el resultado será

[{"ApellidoMaterno":"Rosado","ApellidoPaterno":"Meltrozo","DNI":"98765412","Nombres":"Debora"},{"ApellidoMaterno":"Duro","ApellidoPaterno":"Meltrozo","DNI":"45678945","Nombres":"Rosa"},{"ApellidoMaterno":"Rosado","ApellidoPaterno":"Melano","DNI":"32178945","Nombres":"Rosa"},{"ApellidoMaterno":"Diaz","ApellidoPaterno":"Lajo","DNI":"14785236","Nombres":"Juana"},{"ApellidoMaterno":"Tito","ApellidoPaterno":"Supo","DNI":"12345678","Nombres":"Augusto"}]

para ver un usario en especifico podemos usar la direccion

http://localhost:XXXXX/restServicePersona/45678945

y nos devuelve la persona con dni = 45678945    y el resultado será

{"ApellidoMaterno":"Duro","ApellidoPaterno":"Meltrozo","DNI":"45678945","Nombres":"Rosa"}

si desea ver los recursos disponibles escriba http://localhost:XXXX/restServicePersona/help y obtendrá

Imagen

Esta aplicacion devuelve resultados en formato JSON si desea devolver XML solo requiere configurar el archivo web.config y cambiar la linea

automaticFormatSelectionEnabled=”false”

y debera quedar como

automaticFormatSelectionEnabled=”true”

sin embargo solo en caso de querer obtener XML

y obtendria el siguiente resultado

<ArrayOfPersona xmlns=”http://schemas.datacontract.org/2004/07/RestFull&#8221; xmlns:i=”http://www.w3.org/2001/XMLSchema-instance”><Persona><ApellidoMaterno>Rosado</ApellidoMaterno><ApellidoPaterno>Meltrozo</ApellidoPaterno><DNI>98765412</DNI><Nombres>Debora</Nombres></Persona><Persona><ApellidoMaterno>Duro</ApellidoMaterno><ApellidoPaterno>Meltrozo</ApellidoPaterno><DNI>45678945</DNI><Nombres>Rosa</Nombres></Persona><Persona><ApellidoMaterno>Rosado</ApellidoMaterno><ApellidoPaterno>Melano</ApellidoPaterno><DNI>32178945</DNI><Nombres>Rosa</Nombres></Persona><Persona><ApellidoMaterno>Diaz</ApellidoMaterno><ApellidoPaterno>Lajo</ApellidoPaterno><DNI>14785236</DNI><Nombres>Juana</Nombres></Persona><Persona><ApellidoMaterno>Tito</ApellidoMaterno><ApellidoPaterno>Supo</ApellidoPaterno><DNI>12345678</DNI><Nombres>Augusto</Nombres></Persona></ArrayOfPersona&gt;

Todas las tildes fueron omitidas a discrescion.

mayo 11, 2013 Posted by | Uncategorized | 4 comentarios

Algunas expresiones utiles expresiones Lambda

Algunas expresiones utiles utilizando expresiones Lambda, para ello primero tenemos que declara el using
using System.Linq;

1.- Filtrar aquellos que no estan repetidos en una coleccion similar a la clausula Distinct

products = products.GroupBy(x => x.Codigo).Select(y => y.First()).ToList();

2.-  Convertir un List en una cadena con comas

List<Guid> guidList = new List<Guid> ();

string cadena = string.Join(“,”, guidList.ToArray())

abril 3, 2013 Posted by | Uncategorized | 1 comentario

18 Consejos para simplificar su vida (e incrementar su productividad)

Alguien dijo una vez “Se necesita ser un genio para vivir una vida simple” y yo estoy de acuerdo.
En este mundo de “distracción dramática” y la sobrecarga de información nos es muy fácil sentirse abrumado, perdemos el objetivo y somos arrastrados lejos de las cosas que más importan.
Aquí hay 18 consejos que estoy aprendido de otros líderes, blogs y libros, y he estado tratando de aplicar en mi vida para no tener desorden, no complicarme y ser más intencional de cómo paso mi tiempo …
1. Apague todo tipo de tecnología por 60 minutos al día y concentrese en hacer su trabajo más importante.
2. No vea su correo electrónico a primera hora por la mañana.
3. No revise su Facebook a cada instante (se estaba convertiendo en un vicio para mi) hagalo solo una vez al dia, haga esto al medio dia o al final de este.
4. No revise su periodico en linea a cada instante, haga esto al medio dia o al final de este.
5. Comience su día con ejercicio. (o mejor aún, aprender a hacer surf – no hay mejor manera de empezar el día!)
6. Ser fiel obediente del domingo! (Esto significa aprender a descansar y realmente reabastecerse  -. Teniendo un día completo a la semana como un día de recuperación completa)
7. Aprender a decir NO.
8. Planifique su semana con anticipación. (usar 10 minutos cada domingo por la noche y buscar la agenda de la próxima semana para ver la planificación de espacios de trabajo, descanso, ejercicio, reuniones con amigos, etc. Me ayuda a mantenerse enfocado en lo que es importante y me ayuda a decir no a aquello que no lo es.)
9. No conteste el teléfono cada vez que suene.
10. Levantese temprano.
11. Vaya temprano a la cama.
12. Coma un gran desayuno saludable.
13. Limpie su armario. Deshagase de las cosas que nunca usa o no usará más.
14. Deje de ver televisión. O al menos reduzcala a no más de 1 hora por día.
15. Asegúrese de planificar un descanso de vacaciones decente una vez al año. (Me parece que debe ser por lo menos 10 días para que se convierta en algo verdaderamente regenerativo.)
16. Aprenda a proteger su tiempo. Los datos dicen que los trabajadores se ven interrumpidos cada 11 minutos. Las distracciones destruyen la productividad y complican la vida.
17. Use su banca en línea.
18. El uso de Evernote. En serio, es una increíble pieza de software.

Al final, se trata de priorizar. Acerca de decidir lo que realmente importa y, como dice Stephen Covey, “primero lo primero”! Y así, como Ud. simplifica su vida, puede aumentar su productividad y darle un mayor sentido y propósito, y podría brindarle una gran sensación de libertad y paz.

Texto original por Tom.basson

octubre 15, 2011 Posted by | Uncategorized | Deja un comentario

Convertir iText pdf a MemoryStream a Stream a byte[]

El escenario requiere crear un archivo pdf en forma de Stream para poder enviarlo a un Servicio Web, asi que lo se hace es Se crea un MemoryStream conteniendo el stream a escribir usando PdfWriter,

PdfWriter writer = PdfWriter.GetInstance(documentoPdf, memoryStream);

 aperturamos el documento y luego agregamos un parrafo sencillo con Paragraph

y asi a partir del MemoryStream creamos un Stream con

Stream stream = newMemoryStream(memoryStream.ToArray());

para verificar que contiene la misma informacion probamos creando un archivo a partir de un array de bytes provenientes del Stream

byte[] array2 = ToArray(stream);
File.WriteAllBytes(string.Format(@”{0}\Requisito2.pdf”, “C:\temp\”), array2);

Atencion que la clase Stream no contiene el Metodo ToArray entonces emularemos un Stream.ToArray() con la funcion ToArray

 codigo Completo:

private void CreatePdfFile()

{
MemoryStream memoryStream = newMemoryStream();
Document documentoPdf = newDocument();
PdfWriter writer = PdfWriter.GetInstance(documentoPdf, memoryStream);
documentoPdf.Open();

Paragraph
tituloParagraph = newParagraph(newChunk(“Texto Aqui”, FontFactory.GetFont(“Arial”, 10, iTextSharp.text.Font.BOLD)));
tituloParagraph.Alignment =Element.ALIGN_CENTER;
tituloParagraph.Add(“\n\n”);
documentoPdf.Add(tituloParagraph);
documentoPdf.Close();
writer.Flush();

Stream
stream = newMemoryStream(memoryStream.ToArray());
byte[] array2 = ToArray(stream);
File.WriteAllBytes(string.Format(@”{0}\Requisito2.pdf”, Application.StartupPath), array2);

}

private byte[] ToArray(Stream stream)
{
byte[] byteArray = newbyte[stream.Length];
int numBytesToRead = (int)stream.Length;
int numBytesRead = 0;
while(numBytesToRead > 0)
{
// Lectura que nos podria devolver entre cero y byteArray.Length
int n = stream.Read(byteArray, numBytesRead, byteArray.Length);
// Cuando llega al final
if (n == 0)
break;

numBytesRead += n;
numBytesToRead -= n;

}
return byteArray;

}

Nota: Cuando se se ejecuta la linea documento.Close(), el objeto memoryStream se cierra y eso hace no posible la lectura posterior de sus miembros como por ejemplo memoryStream.Length y el error se describe como “Cannot access a closed Stream” que es lo mismo que “no se puede tener acceso al Stream cerrado”, por esa razon se realiza una casi copia del stream usando la liena
Stream stream = newMemoryStream(memoryStream.ToArray());
para poder tener el stream abierto y manipularlo.

Dudas,aportes y/o comentarios,  escribir aqui mismo.

octubre 10, 2011 Posted by | Uncategorized | 3 comentarios