Archive | enero, 2013

Tutoriales e informacion de programación

30 Ene

TUTORIALES Y PROGRAMACION

 

Revisar el Link          http://www.puntopeek.com/category/programacion/

Los mejores blogs de programación y diseño web

30 Ene

Hoy cuando me levante se me ocurrió hacer una lista con los mejores blogs  o webs sobre diseño web , programación , maquetación css, javascript  y frameworks, etc .  Como esto de “los mejores blogs” es muy amplio y según  el parecer de cada uno la lista va a ser totalmente diferente me parece mejor hacer directamente una lista abierta donde cada uno pueda agregar la web que le parezca. Así que si conoces alguna web interesante o querés presentar la tuya deja un comentario con el link .

Otra cosa que pensé es dividirlos en categorías pero como la mayoría  ocupan varias categorías es mejor que cada uno ponga al lado los principales temas  que se tratan y simplemente los dividimos en 2 grandes grupos. Páginas en Ingles y en Español

Español

Timersys <—- JQuery ,PHP , tutoriales , recursos y mucho más @Damian Logghe

Anieto2K <—- Desarollo web, wordpress, fotografía ,etc @Andres Nieto

CSSBlog Es <—- CSS 100% y monton de recursos @Pedro Corchero Murga

Foros del web <—- Impresionante comunidad con miles de miembros activos dispuestos a ayudarte @Forosdelweb

LibrosWeb <—- Manuales completamente gratis de programación y diseño web.

Todo Tutoriales Web <—- Recursos y trucos para foroactivo, diseño, etc @Carlos

Ingles

WoorkUp <—- Recursos , tutoriales y artículos muy buenos @Antonio Lupetti

Smashing Magazine <—- Excelente web con miles de recursos gráficos @Smashing Mag

Nettuts+ <—- Página super completa con tutoriales y ejemplos de todos @nettuts

Ahora por favor colaboren que entre todos podemos hacer una buena lista. Saludos!!

Guardar comentarios con api de facebook

30 Ene

La funcionalidad de guardar comentarios de uno de mis portales se desactivo
debido a actualizaciones en la api de facebook.

Aunque la funcionalidad
de escribir los comentarios se mantuvo intacta, la de guardarlos en mi base de
datos se perdió.

El código que tenia era algo como lo
siguiente:

<script
src=”http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php&#8221;
type=”text/javascript”></script>
<div id=”divfb_connect”></div>

<script
type=”text/javascript”>
var fbcDiv =
document.getElementById(‘divfb_connect’);
var fbcUrl = ‘http://www.mysite.com&#8217; +
location.pathname;

var fbcPath = location.pathname;
var fbcTitle = document.title;
var fbcXid =
‘asdfqwer’;

fbcDiv.innerHTML = ‘<fb:comments numposts=”10″
candelete=”true” canpost=”true” url=”‘ + fbcUrl + ‘” title=”‘ + fbcTitle + ‘”
xid=”‘ + fbcXid + ‘” quiet=”true”></fb:comments>’;
FB.init(’21asdf231asd23f1′,
“xd_receiver.html”);

FB_RequireFeatures([“Comments”], function() {

FB.CommentClient.add_onComment(function(comment) {

var
url = ‘mypage.aspx?id=’ + 279763 + ‘&comments=’ + comment.post +
‘&user=’ + comment.user;
$.get(url, “”, function handle_comments(data, status)
{
//code
here
});
});

});

</script>

Investigando encontré que
habia que realizar un cambio para usar la nueva versión. En esta se debia
usar:

<div
id=”fb-root”></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: ‘your app id’,
status: true, cookie: true,
xfbml: true});
};
(function() {
var e =
document.createElement(‘script’); e.async = true;
e.src =
document.location.protocol +
‘//connect.facebook.net/en_US/all.js’;

document.getElementById(‘fb-root’).appendChild(e);
}());
</script>

Y
para poder controlar el evento de cuando se agrega un comentario se usa la
función:

FB.Event.subscribe(‘comments.add’,
function(response) {
alert(‘Comment Added’)
});

La cual debe
ir dentro de la función de window.fbAsyncInit despues de la función init, y
dentro del fb:comment hay que agregar la propiedad notify en true.

Pero
ahí fue donde iniciaron los problemas. El objeto response no posee propiedades
que permitan acceder ni al id del usuario ni al texto que escribio como
comentario. Pero he aqui una solución ingeniosa… la idea es obtener el
comentario que se acabo de escribir. El código queda:

<div id=”aclfb_connect”></div>
<script
type=”text/javascript”>
var fbcDiv =
document.getElementById(‘aclfb_connect’);
var fbcUrl = ‘http://www.mysite.com&#8217; +
location.pathname;

var fbcPath = location.pathname;
var fbcTitle = document.title;
var fbcXid =
‘asdfqwer’;

fbcDiv.innerHTML = ‘<fb:comments numposts=”10″
candelete=”true” canpost=”true” url=”‘ + fbcUrl + ‘” title=”‘ + fbcTitle + ‘”
xid=”‘ + fbcXid + ‘” quiet=”true” notify=”true”></fb:comments><div
id=”fb-root”></div>’;

window.fbAsyncInit = function
() {
FB.init({
appId: ’21asdf231asd23f1′, status: true, cookie: true,
xfbml: true
});

FB.Event.subscribe(‘comments.add’, function (resp) {
FB.api({
method:
‘comments.get’,
xid: fbcXid
},
function (response)
{
var fb_commentData = {
xid:
response[0].xid,
fromid: response[0].fromid,
time:
response[0].time,
text: response[0].text,
id:
response[0].id,
username: response[0].username,
reply_xid:
response[0].reply_xid,
post_id: response[0].post_id,
app_id:
response[0].app_id,
object_id: response[0].object_id
};
var url =
‘mypage.aspx?id=’+ response[0].xid
+’&comments=’ + response[0].text + ‘&user=’ +
response[0].fromid + ‘&id=’ + response[0].id + ‘&username=’ +

response[0].username + ‘&reply_xid=’ + response[0].reply_xid +
‘&post_id=’ + response[0].post_id;
$.get(url, “”, function handle_comments(data,
status) {
//code here
});

});

});
};
(function () {
var e =
document.createElement(‘script’); e.async = true;
e.src =
document.location.protocol +
‘//connect.facebook.net/en_US/all.js’;

document.getElementById(‘fb-root’).appendChild(e);
} ());

</script>

Y
por fin! logré guardar los comentarios que los usuarios escribian en mi portal.

Publicación en Twitter con ASP.NET

30 Ene

En un post anterior habia descrito la forma de publicar post mediante programación, pero Twitter cambio la forma de hacerlo. Ahora vamos a hacerlo mediante la libreria TwitterVB.
Primero debemos descargar la dll llamada TwitterVB.dll desde TwitterVB y agregarla a nuestro proyecto en la carpeta bin.
Luego accedemos a Twitter y luego al link https://dev.twitter.com/apps para registrar nuestra nueva aplicación que se actualizará desde código. Una vez registremos la aplicación vamos a obtener dos datos que vamos a necesitar. El primero es el Customer key y el segundo es el Customer Secret.
Ya desde programación realizamos lo siguiente:

  1. TwitterVB2.TwitterAPI tw = new TwitterVB2.TwitterAPI();
  2. string url = tw.GetAuthorizationLink(sCustomerKey, sCustomerSecret);

La url que obtenemos desde programación la invocamos en nuestro navegador… esto nos mostrará una ventana de validación de permisos de Twitter. Hacemos clic en permitir acceso y esto nos mostrará un PIN de validación:

El numero de validación nos servirá para obtener el Token y el TokenSecret. Estos los necesitamos guardar ya que son los que nos permitiran publicar Twitts. Actualmente estos datos son persistentes por lo cual podemos almacenarlos, pero si Twitter llegara a cambiar la autenticación probablemente deberiamos actualizarlos. Yo llevo varios meses funcionando asi y todavia no han cambiado.
Para obtener el Token y el TokenSecret se debe ejecutar:

  1. bool isValidPIN = tw.ValidatePIN(“4444444”);
  2. if (isValidPIN) {
  3. string OAuthToken = tw.OAuth_Token();
  4. string OAuthTokenSecret = tw.OAuth_TokenSecret();
  5. }

Una vez ya tenga el token y el tokenSecret puede publicar los mensajes por medio de:

  1. tw.AuthenticateWith(ConsumerKey, ConsumerKeySecret, OAuthToken, OAuthTokenSecret);
  2. tw.Update(“Mi primer mensaje”);

Y ya… Como comentaba tanto el Token como el TokenSecret hasta el momento son persistentes por lo cual podria guardarlos en un archivo de configuración, base de datos o llamarlos directamente.

Reducción Dimensiones Usando Entropía

30 Ene

Para este algoritmo se utilizó el algoritmo de Distancia de Hamming y se realizaron todas las adecuaciones para ir buscando la mínima entropía eliminando columnas de datos hasta al final tener solamente 2 columnas. Tener en cuenta que como el desarrollo se realizo en c# las columnas inician en 0.
Para ayuda de vectores se usó la librería Math.Net Numerics

  1. public static string Entropy(ArrayList arrText)
  2. {
  3. string retorno = “”;
  4. //Total de columnas
  5. string sT = arrText[0].ToString();
  6. double F = (double)Tools.ContarEjemplos(sT, “,”);
  7. double E = 0;
  8. int i, j = 0;
  9. DenseMatrix S = new DenseMatrix(arrText.Count, arrText.Count, 0);
  10. for (i = 0; i < arrText.Count; i++)
  11. {
  12. for (j = i + 1; j < arrText.Count; j++)
  13. {
  14. S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(“,”, “”), arrText[j].ToString().Replace(“,”, “”)) / F;
  15. }
  16. }
  17. //A diferencia de la formula en c# la matrix inicia en 0, 0
  18. for (i = 0; i < arrText.Count – 1; i++)
  19. {
  20. for (j = i + 1; j < arrText.Count; j++)
  21. {
  22. if (S[i, j] > 0 && S[i, j] < 1)
  23. {
  24. E += (S[i, j] * Math.Log10(S[i, j]) + (1 – S[i, j]) * Math.Log10(1 – S[i, j]));
  25. }
  26. }
  27. }
  28. E = -1 * E;
  29. //Calcular las entropias eliminando una columna. Se guarda la minima.
  30. double MinE = E;
  31. double NewE = E;
  32. int indiceMinE = 0;
  33. double TempE = 0;
  34. int totalF = (int)F;
  35. for (int features = totalF; features >= 2; features–)
  36. {
  37. F = features;
  38. indiceMinE = 0;
  39. for (int f = 0; f < F; f++)
  40. {
  41. S.Clear();
  42. TempE = 0;
  43. for (i = 0; i < arrText.Count; i++)
  44. {
  45. for (j = i + 1; j < arrText.Count; j++)
  46. {
  47. S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(“,”, “”).Remove(f, 1), arrText[j].ToString().Replace(“,”, “”).Remove(f, 1)) / (F – 1);
  48. }
  49. }
  50. //A diferencia de la formula en c# la matrix inicia en 0, 0
  51. for (i = 0; i < arrText.Count – 1; i++)
  52. {
  53. for (j = i + 1; j < arrText.Count; j++)
  54. {
  55. if (S[i, j] > 0 && S[i, j] < 1)
  56. {
  57. TempE += (S[i, j] * Math.Log10(S[i, j]) + (1 – S[i, j]) * Math.Log10(1 – S[i, j]));
  58. }
  59. }
  60. }
  61. TempE = -1 * TempE;
  62. if (Math.Abs(E – TempE) < MinE)
  63. {
  64. MinE = Math.Abs(E – TempE);
  65. NewE = TempE;
  66. indiceMinE = f;
  67. }
  68. }
  69. //Se suma 1 al indice porque en c# los indices inician en 0
  70. retorno += “Columna con Entropia minima: ” + (indiceMinE + 1).ToString() + “\n”;
  71. //Eliminar la caracteristica del conjunto de datos
  72. for (i = 0; i < arrText.Count; i++)
  73. {
  74. arrText[i] = arrText[i].ToString().Replace(“,”, “”).Remove(indiceMinE, 1);
  75. }
  76. //Asignar el nuevo E
  77. E = NewE;
  78. MinE = E;
  79. }
  80. return retorno;
  81. }

Algoritmo Distancia Hamming Levenshtein en C#

30 Ene

El algoritmo Distancia de Hamming compara uno por uno los caracteres para ver cambios de uno con respecto al otro.
El algoritmo de Distancia de Levenshtein calcula numero de operaciones para convertir una cadena a otra. Distancia de Hamming en C#

  1. public static int HammingDistance(String s1, String s2)
  2. {
  3. int counter = 0;
  4. for (int k = 0; k < s1.Length; k++)
  5. {
  6. if (s1.ElementAt(k) == s2.ElementAt(k)) counter++;
  7. }
  8. return counter;
  9. }

Distancia de Levenshtein en C#

  1. static int LevenshteinDistance(string s, string t, out double porcentaje)
  2. {
  3. porcentaje = 0;
  4. // d es una tabla con m+1 renglones y n+1 columnas
  5. int costo = 0;
  6. int m = s.Length;
  7. int n = t.Length;
  8. int[,] d = new int[m + 1, n + 1];
  9. // Verifica que exista algo que comparar
  10. if (n == 0) return m;
  11. if (m == 0) return n;
  12. // Llena la primera columna y la primera fila.
  13. for (int i = 0; i <= m; d[i, 0] = i++) ;
  14. for (int j = 0; j <= n; d[0, j] = j++) ;
  15. /// recorre la matriz llenando cada unos de los pesos.
  16. /// i columnas, j renglones
  17. for (int i = 1; i <= m; i++)
  18. {
  19. // recorre para j
  20. for (int j = 1; j <= n; j++)
  21. {
  22. /// si son iguales en posiciones equidistantes el peso es 0
  23. /// de lo contrario el peso suma a uno.
  24. costo = (s[i – 1] == t[j – 1]) ? 0 : 1;
  25. d[i, j] = System.Math.Min(System.Math.Min(d[i – 1, j] + 1, //Eliminacion
  26. d[i, j – 1] + 1), //Inserccion
  27. d[i – 1, j – 1] + costo); //Sustitucion
  28. }
  29. }
  30. /// Calculamos el porcentaje de cambios en la palabra.
  31. if (s.Length > t.Length)
  32. porcentaje = ((double)d[m, n] / (double)s.Length);
  33. else
  34. porcentaje = ((double)d[m, n] / (double)t.Length);
  35. return d[m, n];
  36. }

Ignorar Tiempo en Query Linq to Entities

30 Ene
  1. var RessSor = (from s in db.sorteoLoteria
  2. join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id
  3. where s.fecha.Date == dt.Date
  4. select new
  5. {
  6. NombreComercial = l.nombreComercial,
  7. NombreSEO = l.nombreSEO
  8. });
  1. using System.Data.Objects;
  1. var RessSor = (from s in db.sorteoLoteria
  2. join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id
  3. where EntityFunctions.TruncateTime(s.fecha) == dt.Date
  4. select new
  5. {
  6. NombreComercial = l.nombreComercial,
  7. NombreSEO = l.nombreSEO
Psyche's Circuitry

Thoughts on growing up and growing old in the digital age

digiphile

We're already living in the future. It's just not evenly distrbuted yet.

TED Blog

The TED Blog shares interesting news about TED, TED Talks video, the TED Prize and more.

Why? Because Science.

Combating Stupidity Since 2012

TechCrunch

Startup and Technology News

Skeptical Software Tools

Applying the power of the programmable web to the purposes of skepticism.

CNNEspañol.com

Ultimas Noticias de Estados Unidos, Latinoamérica y el Mundo, Opinión y Videos

Negocios, Mujer y Tecnología

Desde una perspectiva diferente

MSexcel

Un pequeño aporte para todos :)

Omar Barrera

whats are you doing?

Era 2.0

Mi rincón sobre marketing y nuevas tecnologías

Desarrollo e ingeniería

Desarrollo de soluciones en informática