Archivo

Archivo para la categoría ‘internet’

De las críticas recurrentes al blog, los ‘trolls’ y otros menesteres

Sábado, 23 de marzo de 2013
Comentarios desactivados

Es curioso pero así como este blog tiene seguidores también tiene sus detractores; Curiosamente hay quienes lo visitan, se van y vuelven periódicamente como es el caso de ‘mi amigo’ Piccoro. No tengo ningún problema respondiendo a las críticas pero cuando lo hacen sin el menor contexto es entonces cuando me obligan a responder criticando su pobre estilo.

Asumo que este es el articulo del cual nuestro ilustre troll sacó información (un escrito de ya hace 3 años atrás):

he leido los entradas especificas de Venezuela, y noto que son mas criticas que soluciones..

es de apreciar cierta objetividad pero ejemplo en el caso de juegos volentos, notese que un entorno violento cria niños violentos, ademas de que auqnue dicha ley es una hipocresia total, prefiero nunca lleguen juegos violentos a que mi hijo por error toque estos y se relacione mejor (ya que este ya es bastante violento de por si, con claras ventajas sobre otros niños mas grandes)

otro interesante es el de brasil vs Venezuela en materia de fabricado de software.. dime tu, como haces tu , tu, en un pais donde TODAS las interfaces para comunicarse con un basnco desde un punto VPOS de ventas usan solo .NET en ambos lados, la solucion es unica, fabricar tanto modulo de comunicacion (pa ti el “driver” papa) asi como la interfaz servicio que recibe ne el banco.. claro, nadie te va apoyar, asi que vas solo..

acoto yo si lo hice , critico, pero no me limito a eso que tu haces.. y justo hoy estoy colocando la tarea en solognu para el sistema en asistencia…

pierdo sueño, pero criticar sin aportar es ser tan vacio como lo que criticas…

Y la cosa pica y se extiende:

nota: si un padre no fue orientado, no sabra prohibir un juego violento a su hijo (y tendra mas de uno saegurado), que a su vez criara dos a cuatro nijos mas, y este despues lo duplica, por varios factores socioeconomicos..

terminando en un mar llamado barrio, creo en brasil son muuuchos los barrios violentos, y en EEUU, decir que Venezuela es violenta es algo absurdo porque eso depende de la cantidad de gente vs la pelea por los recursos.. un problema que es global.. no solo de mi pais.. que en materiqa de recursos esta aun mejor que otros con todo y la corrupción…

Amigo Piccoro, realmente es difícil leer tu comentario ya que es una mezcla de arroz con mango. No sé realmente por donde empezar. Pero después de leer tus comentarios en mi blog y ver buscar tu escritos por Internet me he topado con algo que te describe a ti y a muchos otros a la perfección: ¿Creando Conflictos, o solo Aguantando…?.

No creo que haga falta argumentar algo más.

De verdad mucha suerte y gracias por visitar el blog.

–José

internet, kodegeek , , , ,

Hackeando mis datos en NikeRunning.com

Miércoles, 12 de octubre de 2011
Comentarios desactivados


Tipos de terreno para todas mis carreras, desde NikeRunning, mostrado con JavaFX

Desde que comencé a correr he utilizado a NikeRunning.com de una u otra manera; Primero comencé con mi Itouch y ahora lo utilizó con el NikeWatch.

Sin embargo, el sitio de Nike es un poco fastidioso; El sitio web está escrito en Flash (lo cual lo hace pesado), tiene gráficos limitados pero lo mas inconveniente es que mis datos están cautivos en el sitio web. Según ellos ya llevan tiempo trabajando en una migración que eliminará Flash:

Hello Everyone,

Thank you all for your feedback.

To let everyone know, we are in the process of revamping our website. We are in transition to move away from flash to HTML. The goal is to be faster and more efficient.

We thank you for your patience as we update our sites. There is not an estimated time of when the transition will be fixed, but I can assure you that I’ve seen parts of the site and it’s looks and feels amazing.

Stay tuned!

Buscando un poco en Google me conseguí conque se puede obtener toda la información de las carreras (siempre y cuando estas esten marcadas como públicas) usando el siguiente URL:

1
http://nikerunning.nike.com/nikeplus/v1/services/widget/get_public_run_list.jsp?userID=IDENTIFICADOR_DE_USUARIO

El archivo resultante está en formato XML.

Pero, ¿y de donde obtenemos el identificador del usuario? Es sencillo, simplemente vaya a nikerunning.nike.com y una vez que entre con su usuario y clave al sitio web haga click sobre una de sus corridas. El URL resultante se verá como esto:

1
http://nikerunning.nike.com/nikeos/p/nikeplus/en_US/plus/#//runs/gps/IDENTIFICADOR_DE_USUARIO/299193444/

En donde IDENTIFICADOR_DE_USUARIO es el número mágico que queremos usar.

Se me ocurrió por ejemplo escribir un pequeño programa en Jython y JavaFX el cual muestra la distribución de tipos de terreno encontrados mientras corrí:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env jython
# Author: Jose Vicente Nunez Zuleta, josevnz@kodegeek.com
# This script parses the user run data and creates a simple distribtion by terrain types
# See: http://nikerunning.nike.com/nikeos/p/nikeplus/en_EMEA/plus/#//dashboard/
# Nike and Nikeplus/Nike+ are trademarks owned by Nike.
# License: BSD
import sys
from javafx.application import Application
from javafx.collections import FXCollections
from javafx.collections import ObservableList
from javafx.scene import Scene
from javafx.stage import Stage
from javafx.scene.chart import PieChart
from javafx.scene import Group
from com.kodegeek.fitness.nikerun.query import CannedQuery
from com.kodegeek.fitness.nikerun.public import PlusPublicService
 
class TerrainTypesChart(Application):
 
    def __getData__(self):
        args = self.getParameters().getRaw()
        pServ = PlusPublicService(args[0])
        data = pServ.getUserData()
        dp = CannedQuery('string', data)
        return dp.getTypesOfTerrain()
 
    def start(self, stage):
        scene = Scene(Group())
        stage.setTitle("Terrain types found in all races")
        stage.setWidth(500)
        stage.setHeight(500)
 
        count = self.__getData__()
        data = [PieChart.Data(key, value) for (key, value) in count.iteritems()]
        pieChartData = FXCollections.observableArrayList(data)
        chart = PieChart(pieChartData)
        chart.setTitle("Terrain types found")
 
        scene.getRoot().getChildren().add(chart)
        stage.setScene(scene)
        stage.show()
 
if __name__ == "__main__":
        Application.launch(TerrainTypesChart().class, sys.argv[1:])

La clase ‘PlusPublicService’ no es más que un simple cliente GET el cual se baja los datos del sitio de Nike:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
!/usr/bin/env jython
#
# Author: Jose Vicente Nunez Zuleta, josevnz@kodegeek.com
# See: http://nikerunning.nike.com/nikeos/p/nikeplus/en_EMEA/plus/#//dashboard/
# Nike and Nikeplus/Nike+ are trademarks owned by Nike.
# License: BSD
#
from httplib import HTTPConnection, HTTP_PORT
import sys
 
__URL__ = 'nikerunning.nike.com'
__SERVICE__ = '/nikeplus/v1/services/widget/get_public_run_list.jsp?userID='
 
class PlusPublicService:
 
        def __init__(self, userId, port = HTTP_PORT):
                self.service = __SERVICE__ + userId
                self.userId = userId
                self.port = port
 
        def getUserData(self, debug=0):
                data = None
                con = HTTPConnection(__URL__, self.port)
                con.set_debuglevel(debug)
                con.request('GET', self.service)
                response = con.getresponse()
                if response.status == 200:
                        data = response.read()
                else:
                        raise Exception("Error. Status = %s, reason = %s" % (response.status, response.reason))
                con.close()
                return data
 
if __name__ == "__main__":
        argv = sys.argv[1:]
        if len(argv) > 0:
                pServ = PlusPublicService(argv[0])
                print "%s" % pServ.getUserData(8)
        else:
                print "NikeRunning user id is required!"
                sys.exit(192)

Y para procesar mis datos utilizo un poco de XPATH en la clase ‘CannedQuery’ la cual tiene un método el cual se encarga de crear la distribución para los distintos tipos de terreno:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/usr/bin/env jython
# Author: Jose Vicente Nunez Zuleta, josevnz@kodegeek.com
# See: http://nikerunning.nike.com/nikeos/p/nikeplus/en_EMEA/plus/#//dashboard/
# Nike and Nikeplus/Nike+ are trademarks owned by Nike.
# License: BSD
 
from xml.dom.minidom import parse, parseString
from xml.etree import ElementTree
import sys
 
class DataParser(object):
 
        def __init__(self, type='string'):
                self.type = type
 
        def __parseDomFile__(self, file):
                return parse(open(file, 'r'))
 
        def __parseDomString__(self, string):
                return parseString(string)
 
        def __parseXpathFile__(self, file):
                return ElementTree.parse(file)
 
        def __parseXpathString__(self, string):
                return ElementTree.fromstring(string)
 
        def __getDom__(self, source):
                if self.type == 'string':
                        return self.__parseDomString__(source)
                else:
                        return self.__parseDomFile__(source)
 
        def __getTree__(self, source):
                if self.type == 'string':
                        return self.__parseXpathString__(source)
                else:
                        return self.__parseXpathFile__(source)
 
class CannedQuery(DataParser):
 
        def __init__(self, type, source):
                super(CannedQuery, self).__init__(type)
                self.source = source
                self.terrainMap = { '0': 'Not defined', '1': 'Road', '2': 'Trail', '3': 'Treadmill', '4': 'Track' }
 
        def getTypesOfTerrain(self):
                tree = self.__getTree__(self.source)
                count = {}
                for elem in tree.findall(".//terrain"):
                        key = 'Never collected'
                        if elem.text in self.terrainMap:
                                key = self.terrainMap[elem.text]
                        if key in count:
                                count[key] += 1
                        else:
                                count[key] = 1
                return count
 
if __name__ == "__main__":
        argv = sys.argv[1:]
        if len(argv) > 0:
                dp = CannedQuery('file', argv[0])
                count = dp.getTypesOfTerrain()
                print "%s" % count

Pienso abrir un proyecto con todas estas clases de Python (Jython) en unos pocos días. Quiero agregarle un par de cosas más antes de soltarlas al aire libre :-)

internet, java, javafx, kodegeek, vida sana

Te invito a usar Google Plus

Domingo, 14 de agosto de 2011
Comentarios desactivados

60 seconds Book review: Facebook marketing, by Dan Zarrella & Alison Zarrella

Domingo, 6 de febrero de 2011
Comentarios desactivados

The Facebook marketing book

Facebook, who is not talking something about the famous social website? With the population of a small country and even a movie with several nominations to the Oscar, you have to wonder if is not a good idea to at least to understand how deep is the interaction between their users and the marketers.

So, why I’m doing a review of a book obviously targeted to marketers and Facebook? There are several answers:

  • It pays off to understand how users interact with the site and how this information is being used by marketers to contact you. That way you can protect yourself and be more selective to what you publish on the side
  • You are writing a social application and you want it to be popular. Some times developers are disconnected with the user needs and this book, believe it or not, can help to fill some gaps

But let’s focus about the book and what you will find inside (follow this link for the full table of contents).

The good:

The book is well organized, easy to read and with self contained chapters (so it can be later used as a reference material, skipping to the topics you want to re-check). There is a intuitive progression of what is Facebook, what are the main features that can be used to promote your content and finally how you can track your effort progress, all without leaving Facebook. Worth mention is than the authors promote ‘non-spamming’ marketing, respecting the users and instead trusting on your skills to promote your brand on the site (Like Seth Goding on his famous book).

The bad:

The authors mention the FML (Facebook markup language), applications that use the Facebook graph API and yet they don’t provide a single link on how to code those features; Many marketers (believe it or not) are hands-on with coding, and even if they are not they want to know more before hiring a programmer to do the implementation for them.

Conclusion:

It is an easy to read and well organized book. Also its small size makes it ideal to keep around the office bookshelf. Be aware than it is not a developer book, but developers still can learn one thing or two by reading it.

Kodegeek stars: 3 of 5.

internet, movies , , ,

Book review: HTML5 up and running, by Mark Pilgrim

Jueves, 2 de septiembre de 2010

HTML5 up and running

Thanks to O’Reilly I got the chance to review the book ‘HTML5 up and running‘, by Mark Pilgrim. Please read below to get an idea on what to expect about this new title from O’Reilly ($34.99).

Synopsis:

HTML5 is a set of technologies that came together as HTML, JavaScript and the Internet in general evolved. The author tries to explain how all the pieces fit together along with some important history lessons.

This is a practical and fun book, so keep your computer on all the times while you read it.

How is it organized:

  1. How did we get there?: History of some web standards, where they succeeded and where they failed because of being impractical. If you want to learn more about the history of software usability and common pitfalls then this is a must.
  2. Detecting HTML5 features: How to deal with different HTML5 compatibility levels (oh yeah, you thought the nightmares are over, think again!). Lots of boilerplate code, but still a foundation of things to come.
  3. What does it all mean?: Explains the structure of an HTML document, along changes that are mean to make it easier to maintain and create.
  4. Let’s call it a draw(ing surface): In my opinion the best chapter of the book. This is where HTML5 (with JavaScript) overlaps and competes with other technologies like JavaFx and Flash. There are examples, but I was left wanting more code to show how some features work. Also, I got the impression than mouse events are a pain in the neck to handle in HTML5, something than is easily accomplished in JavaFX or Flash.
  5. Video on the web: Very detailed explanation of most popular formats, how they ‘embedded’ video magic works, how royalties licenses can break your pocket. Pay attention to the upcoming WebM format
  6. You are here (and so everybody else): Describes the Geolocation API. This is a tricky subject and the author shows how the different browser API complexity can be handled with third party libraries and also how to deal with important issues like permissions (the user doesn’t want to tell where it is), precision, timeouts and others. Code is simple enough to understand the basics and move forward.
  7. The past, present, and future of local storage for web applications: The author tries to explain the new local storage API, which is a great improvement over cookies. Quickly explains several important limitations (storage size, everything is saved as strings) and suggest how to use Google Gears instead, which is not a bad thing.
  8. Let’s take this offline: Caching website contents for offline use. Can improve the user experience a lot, but as the author says the developer work here is a tough one as debugging is very primitive. Offline mode requires careful thinking of what server side and client side settings to change, plus not all the browsers support this feature (like IE8). Google Gears comes to the rescue
  9. A form of madness: New form elements and how to use them so even users of old browsers can have a ‘degraded’ experience. You will be probably changing ALL your form pages after reading this chapter, very useful :)
  10. “Distributed”, “Extensibility”, and other fancy words: This is all about how to use ‘microdata’ to decorate existing HTML and embed extra information without breaking your documents. Very interesting indeed as this information can easily end up displayed on the search engine or consumed by other applications that interact with your web application.
  11. Missing things:

    Sometimes I felt than there were too many mentions of Open Source frameworks to do repetitive tasks, one has to wonder if HTML5 is mature enough or if you just rather use tools like Modernize and Google Gears and forget about the browser madness (there is still plenty). Also more complex programming examples feel missing, specially for the canvas chapter (still the code shown is simple and good to the point so you can say this is a minor fault).

    Conclusion:

    The book is easy to read, well written and does a very good job explaining what is the set of technologies that made HTML5. It is not a book for beginners as it assumes you know how to code a little in JavaScript and at least you wrote an page in HTML4 before. It is not an advanced book either on the topics covered but will definitely will give you a good head start if you want to go deep on this new set of technologies.

    Kodegeek stars: 4 of 5.

internet, kodegeek, programación

¿Se acabó to2blogs.com?

Miércoles, 25 de agosto de 2010

Ayer me dí cuenta que el agregador de blogs to2blogs.com ya no está en el aire. Definitivamente. No es por una falla técnica sino que el dominio en DNS ya expiró:

Registration Service Provided By: Landis Holdings Inc.
Contact: sales@jaguarpc.com

Domain name: to2blogs.com

Name Servers:
dns1.name-services.com
dns2.name-services.com
dns3.name-services.com
dns4.name-services.com
dns5.name-services.com

Creation date: 22 Aug 2006 22:51:55
Expiration date: 22 Aug 2010 22:51:00

Las cosas buenas van y vienen y este sitio web llegó en su momento a ser más popular que Veneblogs.com (el cual ya tiene años en declive). Pero después de 4 años se fué.

¿Es el fin de los blogs? Ahora todo el mundo tiene su página en Facebook, escribe y escriben en Twitter. ¿Alguien necesita un concentrador de Blogs Venezolanos?

Para mi la respuesta es si. Una de las razones que Facebook no es la Internet, sino una compañia que controla y vigila de cierta manera lo que usted escribe y publica en su sitio web. Twitter es más simple y no por ello menos controlador. Los Blogs aún tienen cabida como medio de expresión independiente y un agregador de Blogs Venezolanos es requerido.

¿Será que VeneBlogs repunta y se reinventa? Según DNS, su dominio aún esta pago hasta el año que viene:

Referral URL: http://registrar.godaddy.com
Name Server: NS1.DREAMHOST.COM
Name Server: NS2.DREAMHOST.COM
Status: clientDeleteProhibited
Status: clientRenewProhibited
Status: clientTransferProhibited
Status: clientUpdateProhibited
Updated Date: 19-may-2010
Creation Date: 18-may-2003
Expiration Date: 18-may-2011

Yo mientras tanto hoy yo voy a remover a to2blogs.com de mi lista de pings en WordPress.

internet, venezuela , , ,

You know you’re a trully dedicated geek when you…

Domingo, 20 de junio de 2010
Comentarios desactivados

I just got this email from the Tomcat mailing list and I though it was too good not to share with all of you:

XXXX, XXXX XX wrote:
(Sent from my iPhone on a ferry in the middle of Lake Michigan.)

Posters to this forum, observe the incredible dedication of some of the contributors here.
I’m willing to bet that if the ferry was sinking, Chuck would be the last one on board, making sure there wasn’t any unanswered message on this forum (or at least any wrong and uncorrected answer lingering).

We should have a competition about whom can post a message from the most unlikely location, or circumstances. The middle of lake Michigan isn’t bad for a start.
We would need some means of checking though.

So you know you’re a truly dedicated geek when you can answer emails from your Iphone from the middle of nowhere (or in this case in a ferry in the middle of Lake Michigan ;))

LOL :)

internet, kodegeek

Optimizaciones del lado del cliente en aplicaciones web

Sábado, 12 de junio de 2010

(Si señor, no todo es en el lado del servidor)

Hace poco me tocó tratar con una empresa Venezolana de desarrollo de páginas web, debido a un sitio web con el cual tengo el gusto de trabajar. En una de las discusiones técnicas uno de sus programadores este sostenía que el uso de técnicas como compresión de archivos no era necesaria y que en muchos casos podía afectar a los usuarios finales. El cache en todo caso se encargaba de mejorar la experiencia después de la primera carga.

Una verdad a medias debo decir; Si el archivo a entregar al usuario es muy pequeño (por el orden de 1KB) entonces la compresión puede afectar negativamente el rendimiento ya que el archivo comprimido resultante puede ser más grande o el esfuerzo por descomprimir en tiempo real es costoso en CPU comparado con el tiempo que toma en bajárselo.

¿Pero que pasa si tiene mucho archivos pequeños? (pista, póngalos juntos en un sólo archivo, más eficiente)
¿Qué pasa si los archivos si son grandes? (compresión estática, dinámica)

Primero que nada, no hay balas de plata, cada solución tiene cosas buenas y cosas malas. A continuación les enumero algunas, en particular las que apliqué (les dejo Google para que busquen la explicación de que hace cada una de ellas, me gusta más mostrar los pedazos de código):

  • Compresión en HTTP usando PHP gzip: Esto lo ponen en la cabecera de sus archivos de PHP.
    1
    
    < ?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>;

    Lo que hace esto es definir el mime-type de la página como un archivo comprimido y inicia la compresión en el lado del servidor.

  • Si usa Apache, entonces pídale que comprima sus archivos en HTTP con gzip o mod_deflate
  • Si tiene Javascript u hojas de estilo grandes quizas no necesita comprimir los archivos con gzip, quizas pueda optimizarlos con yui compressor (hay otras implementaciones):
    1
    2
    
    # Primero hacemos un respaldo de todos los archivos, copiandolos a .orig. Luego iniciamos la conversión
    auyan:yuicompressor-2.4.2 josevnz$ for file in `find /Users/josevnz/Documents/bocaproyectos/currentwebsite/ -name '*.css.orig' -follow|sed 's#.orig##'`; do java -jar /Users/josevnz/Downloads/yuicompressor-2.4.2/build/yuicompressor-2.4.2.jar --nomunge --type css -o $file --verbose ${file}.orig && echo $file; done

    El tamaño se redujo considerablemente, sin usar gzip:

    1
    2
    3
    
    auyan:yuicompressor-2.4.2 josevnz$ ls -l /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css.orig
    -rwx---r-x@ 1 josevnz  josevnz  2624 Jun 12 20:55 /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css
    -rwx---r-x@ 1 josevnz  josevnz  3893 May 31 15:37 /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css.orig

De nuevo no tiene que tomar mi palabra en serio. ¿Pero que tal la gente de Google? También hágase amigo de herramientas como FireBug.

¿Qué otros consejos tiene sobre la optimización de contenido en el lado del cliente que quiera compartir? (*hay un montón y este pequeño escrito no pretende ser una guía sobre todo lo que puede hacer*)

–José

internet, java, programación

Veneblogs, To2Blog: ¿Existe alguna alternativa seria?

Domingo, 21 de febrero de 2010

Aún recuerdo con algo de nostalgia como VeneBlogs y To2Blogs eran los titanes de la Blogosfera venezolana. El desastre del pago de divisas (y la economía en general) han tenido un impacto en estos sitios web los cuales no han cambiado mucho es sus ya (¿5 años al menos?) de existencia. Veneblogs es clasificado como un sitio de Phishing según Firefox y To2Blogs está caído desde el viernes 19 de Febrero de este año (volverá al aire).

¿Existe alguna alternativa seria a estos portales? Me niego a creer que este sea un signo de la muerte de los blogs como los conocemos hoy en día, aunque sitios como FaceBook y Twitter ya se han llevado su buena tajada, dejando una mayoría de sitios los cuales sólo reproducen artículos de otros sitios web (como los odiados sitios de gadgets).

Prefiero pensar que tanto Veneblogs como to2blogs pueden ser mejorados. Después de todo la blogosfera se trata de cambio y estos dos sitios web han sido un reflejo sin manipulaciones de las cosas que pasan en el país.

internet, venezuela ,

Se acabó Zembly: ¿A nadie le interesó hacer combinaciones sin programar?

Martes, 10 de noviembre de 2009
Comentarios desactivados

Bueno, nada sorprendente aquí. El servicio de ‘Mash-up’ de Sun por lo visto no es el interés principal de Oracle y por lo visto nunca tuvo mucha tracción (siempre me dio la impresión de que era algo más orientado a desarrolladores casuales).

Me llegó esto por correo electrónico el día de hoy:

We regret to inform you that on November 30th, 2009 we will be suspending the zembly service.

More than three years ago, we started this project with the goal of making it easy to create next-generation Web apps. Our original tagline was “Build the web, using the web,” and the ideas we were incubating around platform-mediated Web applications, Web API mashups, and social programming were brand new.

We learned a lot along the way. Your confidence and enthusiasm helped us improve the project and do amazing things that we never imagined when we began this journey.

Thank you to everyone who’s been with us through the ups and downs. It’s heartening to see that many of the best ideas pioneered in zembly have started to appear elsewhere. With your support, we’re proud to have contributed to the DNA of the Web.

For more information about the zembly suspension, please refer to the FAQ section at http://zembly.com

Finally, if you have questions, please contact us at zembly-support@sun.com

All the best,

— The zembly team

Sun Microsystems, Inc.
4150 Network Circle
Santa Clara, CA 95054
Click here to unsubscribe

Siempre es una lastima ver que compañías con productos interesantes desaparezcan. Sin embargo no me extraña para nada en las circunstancias actuales. Me pregunto que otras cosas irán desapareciendo mientras la adquisición de Sun por parte de Oracle se termina de consolidar. Al paso que va la unión Europea quien sabe, amanecerá y veremos…

internet, programación

%d personas les gusta esto: