2 sept 2009

Compare y analice su Salario - benchmark your salary

Invitation to join activeTechPros and benchmark your salary
 

This note has been sent to you by activeTechPros on behalf of Alejandro Sfrede,

Alejandro Sfrede thinks you may be interested to benchmark your salary and know your tech worth. To begin, submit your professional profile online by clicking on the link below, or copy and paste it into your web browser. 

http://www.activetechpros.com/index.htm  

In return for your time, you will have access to the IT salary benchmark wizard where you can compare your salary against an international audience of tech professionals.

Your information is completely confidential, only aggregated results will be used.

-----------------------------------------------------------------------------------------------------------
Please accept our apologies if you are getting this in error. Your e-mail address has not been stored and will not be used for any purpose whatsoever.

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.

Mendoza Valley 2, en Antartes.

El miércoles por la noche en un reconocido bar de la calle Arístides, se realizó en Mendoza la segunda edición el Mendoza Valley, evento que reúne a los emprendedores web de Mendoza. Con una gran concurrencia y nuevos proyectos, el MV2 se consolidó como el lugar predilecto para los emprendedores de todo Cuyo. 

ref:





22 ago 2009

Google Voice Phone number To Google Talk in Argentina


Alejandro Sfrede  

Google Voice Phone number: 001 (609) 616-2470


Welcome to Google Voice! Google Voice gives you a single phone number that rings all your phones, saves your voicemail online, andtranscribes your voicemail to text. Other cool features include the ability to listen in on messages while they are being left and theability to make low cost international calls. To start enjoying Google Voice, just give out your Google Voice number. You can recordcustom greetings for your favorite callers or block annoying callers by marking them as SPAM. Just click on the settings link at the topof your inbox. We hope you enjoy Google Voice.




24 jun 2009

Util Barra de Marcadores Chrome


Util Barra de Marcadores Chrome

Google Bookmark

javascript:(function(){var a=window,b=document,c=encodeURIComponent,d=a.open("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+c(b.location)+"&title="+c(b.title),"bkmk_popup","left="+((a.screenX||a.screenLeft)+10)+",top="+((a.screenY||a.screenTop)+10)+",height=420px,width=550px,resizable=1,alwaysRaised=1");a.setTimeout(function(){d.focus()},300)})();


Google Translate

javascript:q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt("Search words", ""); if (q!=null) location="http://translate.google.com/translate_t#auto|es|" + escape(q).replace(/ /g, "+"); void 0

Traslate URL

javascript:q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text)  ; if (!q) q =  window.location.href ; if (q!=null) location="http://translate.google.com/translate_t#auto|es|" + escape(q).replace(/ /g, "+"); void 0






14 may 2009

google chrome toolbar - chrome extension - translate chrome 2.0 extension Ale Sfrede

google chrome toolbar - chrome extension - translate chrome 2.0 extension Ale Sfrede

http://wwwdotale.blogspot.com/

Google Translate en-es





bajar demo

Subscribing to a Channel
  1. Download and run the Google Chrome Channel Changer (http://chromium.googlecode.com/files/chromechannel-2.0.exe).
  2. Click the circle next to the channel you want to get updates from.
  3. Click Update to save your choice.
  4. Click Close.
  5. In Google Chrome, click the wrench menu and choose About Google Chrome.

  6. Click Update Now to install the current channel's release.
  7. Restart Google Chrome.
Activate Extensions

Find your chrome shortcut (for example, right-click the Chrome icon on your desktop and choose Properties) and add the --enable-extensions and --load-extension flags to it:

chrome.exe --enable-extensions --load-extension="c:\myextension"

Download Extension - Translate
crear carpeta c:\myextension



Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. This site contains design documents, architecture overviews, testing information, and more to help you learn to build and work with the Chromium source code.




20 abr 2009

tips para que el proyecto de software "sea bien administrado", y no morir en el intento

Analizando y pensando basado en la experiencia continua en los menesteres del LP, he armado unos tips para que el proyecto de software "sea bien administrado", y no morir en el intento. 

También es importante que un proyecto bien administrado no solo depende del LP,
 sino del contexto, de los gerentes operativos y comerciales y del bill metal $.

Alejandro Sfrede

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.

Liderazgo y Éxito.

Encontré un interesante articulo y me siento muy identificado con varios puntos y creo que son Necesarios para triunfar en lo que hago, por mi parte como Líder de proyectos.

Alejandro Sfrede
...

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:

  1. Entender mi propósito en la vida, tener una pasión por lo que hago.
  2. Crecer a mi máximo potencial, cuando estoy hablando no estoy aprendiendo.
  3. 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."
  4. El éxito es algo que lo determina mi agenda diaria.
  5. La persona de éxito se lleva muy bien con otras personas.
  6. La persona de éxito entrena y desarrolla a otras personas. Se pregunta, ¿Qué estoy aprendiendo? ¿Qué estoy enseñando?
  7. 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
  8. 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/ 
 

<html>         
<head><title>viejo y querido JS</title></head><body>
<script type="text/javascript" language="javascript">

// 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(){ // inline

alert(

"" + 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 + ")";

}

// run

p.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;

}

//run

var

f2 = new DomicilioComercial( "444444444" );

f2.Calle =

"Las Heras";

f2.Ver();

</

script>

</

body>
</
html>
 
 
 
 

 

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

  http://blogs.msdn.com/stmteam/archive/2008/10/08/welcome-to-the-transactional-memory-team-s-blog.aspx

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.

Luego de hacer un curso de administracion de proyectos de software y analizando con el trabajo de coordinar proyectos de software factory . voy a añadir al blogs tips interesantes de la Administracion de Proyectos de SW e estimacion de software y planning.

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 .

FeedCount

analytics

 
sfrede