TECNOLOGÍA | Mendoza Valley convocó a más de 200 personas en un evento donde los emprendedores web pudieron compartir experiencias y cerveza.
28 ago 2009
Salud y “Buen networking para todos” - Mendoza Valley
TECNOLOGÍA | Mendoza Valley convocó a más de 200 personas en un evento donde los emprendedores web pudieron compartir experiencias y cerveza.
22 ago 2009
Google Voice Phone number To Google Talk in Argentina
24 jun 2009
Util Barra de Marcadores Chrome
14 may 2009
google chrome toolbar - chrome extension - translate chrome 2.0 extension Ale Sfrede
- Download and run the Google Chrome Channel Changer (http://chromium.googlecode.com/files/chromechannel-2.0.exe).
- Click the circle next to the channel you want to get updates from.
- Click Update to save your choice.
- Click Close.
- In Google Chrome, click the wrench menu and choose About Google Chrome.
- Click Update Now to install the current channel's release.
- Restart Google Chrome.
chrome.exe --enable-extensions --load-extension="c:\myextension"
20 abr 2009
tips para que el proyecto de software "sea bien administrado", y no morir en el intento
Tips de Líder de Proyecto.
Gestión Inicial de Proyecto.
- · Análisis del Relevamiento de inicial del proyecto y contextos del cliente.
- · Relevar contactos, responsables y responsabilidades de las partes
- · Definir y documentar Canales de comunicación Cliente, Proveedores, grupo desarrollo, directivos.
- · Definiciones de informes y métricas de las partes involucradas.
- · Análisis de documentación de estimación.
- · Análisis de propuesta comercial y contratos
- · Relevamiento de documentación general y seguimiento de sistemas anteriores y lecciones aprendidas.
- · Relevamiento de estándares a utilizar o utilizados.
- · Plan de proyecto, recursos materiales y humanos.
- · Análisis de riegos basado en el cliente, proyectos anteriores, documentación, contratos y costos.
- · Plan de Trabajo diario, Priorizar tareas y dependencias. Entregables parciales, Entregables finales.
- · Documento de control de versiones y proceso definido.
- · Plan General de proyecto. Análisis de Contextos.
- · Coordinación de tareas de terceras partes, subcontratos, proveedores.
- · Procedimiento y Metodología de desarrollo
- · Herramientas de seguimiento de desarrollo interno y/o externo.
- · Herramientas de bug tracking interno y externo.
- · Herramientas de Control de Horarios
- · Herramienta de Control de costos.
- · Repositorios de documentación e Informes.
Gestión y Seguimiento
- · Reuniones diarias de avance interno
- · Analizar problemas detectados, priorizar y brindar soluciones al equipo.
- · Relevamiento de avance de personal externo dependiente.
- · Relevamiento de situación de terceras partes no dependientes directamente.
- · Detectar Riegos activados o nuevos y ponderarlos en criticidad y probabilidad y Costos- Detectar factores y Plan de mitigación de riegos.
- · Reporte Avance a directivos y/o superiores
- · Reporte de Avance al Cliente.
- · Reporte de Terceras Partes.
- · Reporte de Riegos.
- · Supervisión de responsabilidades y tareas de personal dependiente
- · Control de documentos definidos inicialmente.
- · Control de estados de tareas en herramientas de control
- · Control de estados de Bug y/o Mejoras
- · Control de Cambios contra especificaciones e informe a represéntate comercial.
- · Análisis y reporte de Costos actuales y proyecciones
- · Análisis y Reporte de Motivación del Equipo.
- · Análisis y Medición de satisfacción del cliente
- · Sugerencias de cambios y mejoras de metodologías u otros.
- · Demostrar ser representarte del proyecto ante cliente
- · Análisis de tiempos estimado, real, proyectado.
- · Seguimiento de reuniones con clientes y proveedores. Actas de Reuniones.
- · Detectar no conformidades del equipo e informar a la dirección / represéntate.
- · Seguimiento de documentos con requerimientos de aprobaciones de los mismos.
- · Indicadores de Desarrollo y Testing.
- · Controlar canales de comunicación definidos.
- · Controlar documentos entregables.
- · Cierre de etapa, control de documentos, costos y configuración de herramientas para el cierre parcial.
- · Evaluación y Reporte de fin de proyecto.
- · Análisis, relevamiento y Evaluación de lecciones aprendidas.
Liderazgo y Exito.
En su conferencia, el Dr. Maxwell, además de presentar su último libro, "Líder de 360°" hizo recordar algunos de los puntos que sobresalen en sus libros anteriores:
Actitudes y prácticas para el éxito:
- Entender mi propósito en la vida, tener una pasión por lo que hago.
- Crecer a mi máximo potencial, cuando estoy hablando no estoy aprendiendo.
- Sembrar semillas para el éxito de otros. Todos los días añade intencionalmente algo de valor a las vidas de las personas que estás influenciando. "Mis mejores amigos son los que me animan."
- El éxito es algo que lo determina mi agenda diaria.
- La persona de éxito se lleva muy bien con otras personas.
- La persona de éxito entrena y desarrolla a otras personas. Se pregunta, ¿Qué estoy aprendiendo? ¿Qué estoy enseñando?
- Se somete a la ley del "círculo-interno":
• yo lo hago
• yo lo hago y tú observas
• tú lo haces y yo te observo
• tú lo haces
• tú lo haces y tú observas a otro - La persona de éxito es efectiva aprendiendo destrezas para liderar cada vez desde un nivel superior. Sabe que para que la empresa mejore debe mejorar sus líderes
8 nov 2008
Re: [wwwDotAle] Viejo y Querido JS hasta http://extjs.es/
Despues de unos 12 años usando Js, ha vuelto y con mas ganas.Para recordar OO en js !!!!!! y usar EXT JS - http://extjs.es/
// clasic class
Persona =
function(){ // private field var nombre = null; // public field this.Nombre ; this.Sexo; this.TipoDocumento; //public metodos this.Ver = ver; this.Show = ver2; //private function ver(){alert(
this.Nombre);}
//private function ver2(obj){alert(obj);
}
}
// run
var
p = new Persona();p.Nombre =
"juan";p.Ver();
// generic object dinamic
var
TSexo = new Object();TSexo.Nombre =
"M";// run
p.Sexo = TSexo;
p.Show(p.Sexo.Nombre);
// generic object inline
var
TDoc = {"Nombre":'' , "ID":0};TDoc.Nombre =
"DNI";TDoc.ID = 0;
//run
p.TipoDocumento = TDoc;
p.Show(p.TipoDocumento.Nombre);
// function inline
var
ver2fn = function(texto){alert(texto);
}
// clase inline
var
Domicilio = { "Calle":'',
"Nro":0,
"Ver" :function(){ // inlinealert(
"" + this.Calle);}
,
"Ver2" : ver2fn //puntero};
// run
Domicilio.Calle =
"ACA";Domicilio.Ver();
Domicilio.Ver2(
"El numero es:" +Domicilio.Nro);//Adding methods
Persona.prototype.changeName =
function(name) { this.Nombre = name;}
Persona.prototype.toString =
function(){
return "(Nombre:" + this.Nombre + ",Sexo=" + this.Sexo.Nombre + ")";}
// runp.changeName(
"Otro-nombre");p.Ver();
alert(p.toString());
//
function
superTest() { return "superTest";}
function
subTest() { return "subTest";}
// clase tipo funcion
function
superClass() { this.supertest = superTest; //attach method superTest}
// run
var
sClass = new superClass();alert(sClass.supertest());
// ******** pseudo-herencia
function
superClass() { this.supertest = superTest; //attach method superTest}
function
subClass() { this.inheritFrom = superClass; this.inheritFrom(); this.subtest = subTest; //attach method subTest this.Tipo ;}
//run inherit
var newClass = new subClass();newClass.Tipo =
"1";alert(newClass.subtest());
// yields "subTest"alert(newClass.supertest());
// yields "superTest"//view class
// for(x in p) alert(""+ x + "\n\r " + typeof(p[x]) + "\n\r\n\r " + p[ x ] )
alert(
"extender funciones prototype")// extender funciones
Function.prototype.inheritsFrom =
function( parentClassOrObject ){ if ( parentClassOrObject.constructor == Function ){
//Normal Inheritance this.prototype = new parentClassOrObject; this.prototype.constructor = this; this.prototype.parent = parentClassOrObject.prototype;}
else{
//Pure Virtual Inheritance this.prototype = parentClassOrObject; this.prototype.constructor = this; this.prototype.parent = parentClassOrObject;}
return this;}
function DomicilioComercial(tel){ this.tel=tel; this.emails=[];}
DomicilioComercial.inheritsFrom( Domicilio );
//run
var
f = new DomicilioComercial( "4878844" );f.Calle =
"San MArtin";f.Ver();
// override
DomicilioComercial.prototype.Ver=
function(){ // alert("this.parent:" + this.parent); //this.parent.Ver.call(this); // var tt = this.parent.Ver.call(this);alert(
this.Calle + "-"+ this.tel); // return tt;}
//runvar
f2 = new DomicilioComercial( "444444444" );f2.Calle =
"Las Heras";f2.Ver();
</
script></
body>15 oct 2008
Share data between multiple threads - Lock & mutate
If you have been using the Parallel Extension CTP or simply writing multi-threaded code yourself, you probably have run into situations where you needed to share data between multiple threads. So long as the data is read-only, this isn’t a problem, but what about mutating data?
The easy answer is to use a lock. There are a lot of blog entries and white papers talking about how to use locks correctly, how to avoid deadlocks, or what are the best locks for the particular scenario, or even how to correctly write lock-free code. You could read all of these and still run into trouble using locks. You see, the problem isn’t sharing one piece of data; it’s when you are sharing multiple pieces of data – for instance data that has a complex schema involving multiple complex objects such as trees or lists.
So, locks are a basic tool in your arsenal. From the simple lock, you can build synchronization mechanisms that hopefully protect your data, correctly, and don’t impact your scalability.
Ah, I hear you sigh. Yes, hope is eternal, software has bugs and multithreaded software has race conditions, deadlocks, and scalability problems. Why? Well, because many find it is hard and fraught with peril to correctly use anything more than a single lock or at most some really small set of course-grained locks. As code matures, locking hierarchies to provide fine-grained-locking often morph from elegant to clumsy. You may also find that as your project grows, lock depth blossoms, unnecessarily, or alternatively race conditions are introduced simply because programmers were unaware that it necessary to lock a specific resource. The end result is code that simply doesn’t scale or your application’s reliability plummets without some of your best and brightest spending time tuning, fixing, “right-sizing” and eliminating locks. Even after all that work, are you confident that your code is bug-free? Do race conditions exist in it? How can you even inspect the code and reason about its correctness?
So, I suspect you are living with some rather course-grained locks or with fear.
Many of my coworkers argue quite persuasively that you should get rid of locks by decomposing the data such that there is no sharing. They point to the use of “agents” and “messaging” as a good programming paradigm to ensure that data accessed by a specific thread is logically isolated from other threads. This is a great method but can you re-architect your code to do this? Can you use it over multiple data structures? Can you compose them together?
The jury is still out, but I suspect that not all programming patterns in traditional object-oriented languages can be decomposed to a point where there is no sharing. I find that advocates of the agent model still have concurrency problems! They have shared data within their agents and they are hampered by either requiring one thread per agent or to use locks or interlocked operations to manage this shared state.
What would you say if I told you that you could reason about your code in a sequential fashion and be relieved of worrying about other code interacting with its data? Oh, let’s say it’s in a way that scales? Would that help you?
Well, that is what transactional memory (TM) promises to provide.
Transactional memory is not about “removing locks” but is about abstracting away the requirement to specify a particular lock. Instead, you can structure your code in well defined sequential blocks of code, what in the database world we call “units of work”, and then let the underlying runtime system, compiler, or hardware provide you the guarantees you desire. Further, you want this work to scale. To do that, the underlying system provides concurrency control optimistically. Instead of always locking a resource, the transactional memory system assumes that there is no contention. Instead, it detects when these assumptions are incorrect and rolls back changes that were made in the block. Depending on the implementation, the transactional memory system may then re-execute your block of code.
In this way, transactional memory provides an execution pattern of multithreaded code that can be reasoned about sequentially and when there is very little contention, scales well. What about when there is contention? Well, “it depends” will likely be the answer. How big the transaction is and how often it re-executes (due to contention) changes the performance curves significantly. Transactional Memory systems usually include some code to manage contention. That contention manager will significantly impact how code scales under contention. We would hope that the resulting performance is not worse than fully serialized execution.
So what does this look like? Various experimental TM systems have been produced. Some integrate with the compiler, others, like SXM, provide library support. When I talk about TM and show examples I prefer to use a simple syntax which delineates a block of code as “atomic”. For instance:
Atomic {
myBigCollection.insert(someStuff);
if (condition)
otherCollection.mutate (myBigCollection);
}
So, in this example I have two collections and some operation that may optionally work on one depending on the other. Obviously, my code is demonstrating composability over these two collections. What might not be so obvious is that I didn’t have to catch any errors here – my code completed successfully or an exception was thrown and nothing was done. How would I do that with locks now?
Lock (myCollectionLock) {
Bool a = false;
Bool b = false;
try {
myBigCollection.insert(someStuff);
a = true;
if (condition) {
otherCollection.mutate (myBigCollection);
b = true;
}
Catch (exception e) {
If (a) myBigCollection.remove(someStuff);
If (b) myStaticStuff.unmutate(otherCollection, myBigCollection);
// I probably had to write my own unmutate
Throw e;
}
} // lock
Which one do you want to maintain or test? Oh, did you catch that I had to write my own ‘unmutate’? Ugh, I hope that is possible. Also, did you note that I had to keep the lock through the catch? If I didn’t, there would be a race condition when a failure occurred and the work undone. Heck, just setting the flags is error prone. Consider what would have happened if I set “b = true” but forgot to correctly enclose the “if (condition)” clause.
Could your test team find this bug?
…
if (condition)
otherCollection.mutate (myBigCollection);
b = true;
…
This blog is about transactional memory with entries written by the team at Microsoft that is implementing an experimental transactional memory system in .NET. While we work in the Developer Division’s Parallel Computing Platformproduct group, we are not working on a product release at this time. Instead we have been incubating, researching, and experimenting with transactional memory.
Our goal is to create a TM system that lives up to its promise. This work has lead us to what we think is some industry-leading work – but we have been so busy doing it that we haven’t had a chance to talk about it; share what we have found; and more importantly hear what the community thinks of this effort.
This blog is our first step to remedy that.
fuente
Gracias a Mauricio Salatino por su colaboracón al blog.
Alejandro A Sfrede
Arquitecto de Software
Microsoft Certified Professional
.
11 oct 2008
Administracion de Proyectos de SW - ¿ Iterativo porqué ? EL CLIENTE.
El primer punto. EL CLIENTE su Cashflow y no solo tener Fé en el proyecto hasta que termine. Midamos el éxito, la satisfacción con "entregales de valor" : "Solo el producto" o "parte del mismo".
En una sola entrega de valor "la version beta", es el peor momento de cashflow del cliente. Todavia no tiene lo que necesita y casi lo termina de pagar... ( Cliente... lo puedo ver? ) ( Siii, pero es beta, probalo y nos avisas ) . No tiene sentido desde la perspectiva del cliente.
Si es progresivo , iterativo, con poca inversion inicial puede (o no) ya usarlo y tomar valor que compense su inversion. y nos bajamos los riegos del proyecto y la insertidumbre .
26 sept 2008
analytics
Etiquetas
- .NET 2.0 (15)
- ADM PROYECTOS (3)
- AJAX (2)
- Ale Sfrede (1)
- alesfrede (27)
- Arch (3)
- chrome 2.0 (1)
- chrome extension (1)
- CSS XML HTC (2)
- extension (1)
- google (1)
- google chrome toolbar (1)
- init (1)
- News (3)
- realtime (1)
- Scripting (4)
- sfrede (1)
- SQL Server (3)
- translate (1)
