Te encuentras en la páginas de Blogsperu, los resultados son los ultimos contenidos del blog. Este es un archivo temporal y puede no representar el contenido actual del mismo.
Este es un vídeo de
Sharon Wright que vi en la página de microsiervos y no pude resistirme a hacer el repost me parece adecuado para esta época ya que a pesar de no tener ningún símbolo navideño no deja de recordarme a santa claus. Para poner algo de contexto en ingles se dice change a las monedas menores que un dolar pero esta palabra también significa cambio, se hace un juego de palabras entre usar monedas y cambiar las cosas, además de que no he podido evitar pensar que el personaje principal es una especie de santa claus que con sus regalos nos da ese "cambio" que a veces tanto necesitamos
Si no eres nuevo en
integración continua debes haber oido hablar de
hudson y
Jenkins este último es un fork del primero tras la compra de Sun por Oracle. Pues bien
John Ferguson ha redactado para la editorial O'reilly el libro
Jenkins: The Definitive Guide el cual tambien sirve si usamos Hudson, entre otras cosas el libro indica como automatizar los procesos de compilación, integración del release y despliegue.
Lo mejor de esto es que el libro es un libro open source publicado bajo la licencia creative commons lo que hace que pueda ser descargado gratis desde la página de la consultora de John:
Wakaleo ConsultingPues bien no hay excusa para no descargarlo y echarle una mirada, su equipo de desarrollo lo agradecerá.
Encontre este video de una charla que dio 'Uncle Bob' Robert C Martin en el 2008 sobre craftmanship, mucho de lo dicho esta en su libro Vlean Code, y lo recomiendo para todo aquel que quiera seguir este camino de mejorar el codigo un poquito a la vez, el video esta en ingles sin subtitulos y dura aproximadamente una hora
Esta entrada es para poner algo de ciencia todos saben lo que es pi para los que no en corto: es el resultado de dividir una circunferencia entre su diametro, para algo mas preciso revisen
la entrada en wikipedia a que viene todo esto? a que todas las constantes de la naturaleza ( aun una indeterminada como pi) siempre llevan armonia y belleza en ellas, esta vez encontre un video de
michael blake donde hace una interpretacion muy personal del numero pi
InfoQ: Continuous Delivery
Jez Humble es co autor del libro Continuous delivery en esta presentacion nos muestra las ventajas de un efoque de entrega continua y el entorno en el que encajaria mejor, muy recomendable : (58 minutos, ingles sin subtitulos)
Bueno me ha tomado por sorpresa, todos conocemos MegaUpload uno de los tantos servicios existentes para subir y compartir archivos, pues sucede que ahora tiene 6 nuevos hermanos, asi de golpe:
MegaUpload(Compartir archivos)
MegaLive (para emitir Streaming en vivo),
MegaPix (compartir fotos al estilo de flicker o picassa),
MegaBox (para poder llevar nuestra musica donde queramos)
MegaClick(Para difusion de publicidad en linea)
MegaFund(una web de asesoria en inversiones)
MegaKey(un plugin que sustituira la publicidad en la web por la publicidad que mega controle, y da acceso gratuito a los servicios)
MegaPay(Para poder hacer pagos via dispositivos moviles)
Todo lo ha agrupado en un nuevo site llamado
MegaWorldy si ya contabas con una cuenta esta estara activa y sera valida en MegaUpload, MegaLive, MegaPix, MegaBox y MegaVideo
Me ha sorprendido gratamente puesto que yo ya contaba con una cuenta de pago y me he encontrado con muchos servicios de golpe que no tardare en consumir (y mas si me caen sin tener que pagar ni un centavo extra por ello!!) no puedo ocultar la satisfaccion que me genera que una empresa en la que habia confiado extienda sus servicios es una gran apuesta debido a que son muchos mas de aquellos con los que contaba esperemos que todo vaya bien y mantengan la calidad de siempre
InfoQ: Bad Code, Craftsmanship, Engineering, and CertificationEl autor de Clean Code, nos da una excelente presentacion sobre mal codigo, buenas practicas, craftmanship y certificaciones, con su acostumbrado buen humor, video de una hora aproximadamente con las diapositivas empleadas en ingles sin subtitulos mas que recomendable
Hola a todos este es un post corto que copio de un resumen que hice en la lista Spring Peru sobre una interesante discusion a raiz de una consulta sobre como configurar el acceso a los permisos (normalmente en un archivo de configuracion) desde una base de datos aqui el resumen en forma de pregunta - respuesta:
Pregunta 1: puedes crear Los usuarios y roles en una base de datos propia o usar un esquema que ya exista? : SI, de esta forma:
ref="dataSource"
users-by-username-query="SELECT
U.USERNAME, U.PASSWORD, 'true' enabled FROM USUARIO U WHERE
U.USERNAME=?"
authorities-by-username-query="SELECT
U.USERNAME, R.ROL FROM USUARIO U, ROL R WHERE U.USERNAME=R.USERNAME
AND U.USERNAME=?" />
solo una pequeña observacion: spring security define 3 datos para identificar a alguien: usuario, password y habilitado. el query empleado sirve en un entorno en que no tienes el concepto de habilitado, esto equivale a que un usuario siempre esta habilitado para acceder al sistema como puede verse en el query:users-by-username-query="SELECT
U.USERNAME, U.PASSWORD, 'true' enabled FROM USUARIO U WHERE
U.USERNAME=?"
el tercer elemento que devuelve el query esta colocado como una constante que siempre devuelve "true" si tu aplicacion si maneja el concepto de habilitado deberias reemplazar la constante por la columna correspondiente a dicho estado
Pregunta 2: puedes hacer el match entre las urls y los roles en una base de datos y obviar el archivo de configuracion? : SI
algunos puntos importantes del enlace: un cambio en la seguridad debería ser siempre auditado, probado y autorizado si tomas eso en cuenta como creo que se hace ante cualquier cambio planificado y controlado en la seguridad, tendras que implementar la interface FilterInvocationSecurityMetadataSource a fin de poder cargar estas relaciones desde una fuente diferente al archivo de configuracion.
Pregunta 3 : pueden modificarse los permisos de manera dinamica, entendiendo por dinamico que los cambios se hagan efectivos inmediatamente sin reiniciar la aplicacion?: aparentemente NO
al menos de la lectura del enlace anterior se puede entender eso, el comportamiento por defecto es cargar los permisos en un mapa en memoria por lo que para cambiarlo es necesario reiniciar la aplicacion.
Ha salido el día de ayer publicado en la web de Spring Source el anuncio de la nueva versión del ide SpringSource Toolsuite 2.5.0 RC1 (Release Candidate 1) recordar que este es un mod de eclipse con varios plugins para el desarrollo con este framework entre las principales novedades tenemos:
- Es un Bundle sobre el nuevo Eclipse 3.6.1 Helios
- Soporte para Spring Roo 1.1.0 M3
- Soporte para test de integración de Gui sobre Grails
- Wizard de comandos en grails
- Corrección de varios bugs con respecto a la versión anterior
Además el documento menciona las mejoras de la version 2.3.3 M2 como no he encontrado dicha version disponible en la web pongo esas mejoras ya que tambien son novedades con respecto a la version 2.3.2
- Editor visual para Spring Integration
- Gestor de plugins para grails
- Corrección de varios bugs con respecto a la versión anterior
El instalador se encuentra disponible para los siguientes sistemas Operativos: Windows, Linux, Mac Os; en versiones tanto para 32 como para 64 bits
aqui una captura del instalador
Te ha pasado que instalas centos y no puedes navegar mas que por la web centos.org? eso me paso hoy en un centos 5.4 instalado sobre una maquina virtual rapidamente (realmente no tanto) note que el problema era que no tenia direcciones para un servidor DNS validas oh bueno esto es rapido pense basta agregarlos al archivo /etc/resolv.conf y listo!!! hecho eso reinicio los servicios de red y nada aun no puede hacer una simple busqueda en google...
revisando el archivo resolv.conf noto que este ya no tiene las direcciones que le agregue y un mensaje diciendo que este archivo es sobre escrito por el cliente dhcp (dhclient-script) el cual evitaba que mis cambios se hicieran permanentes
pues bien antes de hacer algun hack modificando el script en cuestion googleando encontre en la pagina de centos las siguientes indicaciones que copio aqui por si tienen algun problema
crear un archivo dhclient-enter-hooks en la carpeta /etc
y dentro colocaremos:
luego damos permisos de ejecucion de dicho archivo a todos los usuarios
chmod a+x /etc/dhclient-enter-hooks
con eso el archivo resolv.conf ya no sera sobre escrito al reiniciar y podremos navegar y resolver nombres de internet tranquilamente, (de hecho el post lo escribo desde la maquina virtual recien creada)
Este video lo vi en la web de microsiervos y me quedado con la boca abierta de lo bien que esta hecho y definitivamente me quedo con este comparado con la ultima pelicula de transformers lo curioso es el rumor de que podria ser un video viral muy bien hecho para telefonos, si los hacen asi pues que sigan regalandonos con cosas como estas!!
Hola a todos, he notado que cuando ves los posts desde algun lector de feeds o desde google buzz si el post incluye codigo de programacion, no queda visible, hace un tiempo
habilite un modulo de java Script llamado
syntaxhighlighter este script añade algunas funcionalidades como el poder copiar al portapapeles, imprimir y una vista del codigo fuente como texto sin formato, estas funcionalidades me parecen utiles y provechosas lamentablemente dependen de un script que al no estar disponible desde los lectores de feed hace que no se pueda ver el codigo, la unica manera hasta el momento de poder verlo es dirigiendose a la pagina ,en la web original lamento las molestias pero despues de evaluar las opciones, un click me parece un esfuerzo razonable versus quitar las funcionalidades que da el script.
Esta vez tocaremos el tema de declaracion de interfaces, si deseas revisar los otros temas puedes ir al
indicesi estas leyendo desde un lector de feeds como google reader o google buzz y te preguntas donde esta el código la respuesta esta
aqui
Declarando Interfaces
Empezaremos por definir una interface como un contrato o compromiso de lo que una clase puede hacer, mas no de como lo hará, por ejemplo definimos la interfaz volador que se compone de los métodos despegar(), aterrizar(), definida en código seria algo asi:
entonces, cualquier clase que implemente esta interfaz esta obligada a implementar los métodos despegar y aterrizar.
Ademas las interfaces pueden implementarse por cualquier clase, sin importar de quien herede, permitiendo que clases que no comparten el mismo árbol de herencia puedan compartir un comportamiento determinado, en este caso el comportamiento de un objeto que puede volar, y que esta definido por los métodos declarados en la interface ejemplo:
Digamos que tenemos dos clases la clase Ave y Avion ambas comparten el comportamiento volador definido por el tener una forma de despegar y de aterrizar (aunque cada una lo implementa de manera diferente) y todo esto a pesar de que no comparten el mismo arbol de herencia, Ave extiende de la clase Animal y Avion extiende de la clase Vehiculo sin embargo ambas pueden tratarse como "Objetos que pueden Volar" y que para java seria algo como "Objetos que pueden invocar los metodos despegar y aterrizar"
Las interfaces pueden tomarse como clases 100% abstractas ya que como vimos anteriormente las clases abstracta no pueden ser instanciadas, sin embargo a diferencia de una clase abstracta que puede tener metodos abstractos y no abstractos; una interfaz solo puede tener métodos abstractos, además de tener reglas mucho mas estrictas con respecto a su declaración
- Todos los métodos de una interfaz son implícitamente públicos y abstractos(modificador public y abstract) por lo que no es necesario que incluyas los modificadores public y/o abstract en su declaración
- Una interfaz puede declarar atributos pero estos serán públicos estáticos y finales (modificadores public, static y final) es decir, solo pueden ser constantes.
- Los métodos de una interfaz no pueden ser estáticos (modificador static)
- Como sus métodos son abstractos no se les puede poner los modificadores final, strictfp o native
- Una interfaz puede extender una o mas interfaces
- Una interfaz no puede extender nada mas que interfaces
- Una interfaz no puede implementar ninguna interfaz
- Debe declararse con la palabra reservada interface
- Las interfaces pueden usarse de manera polimorfa
despues de estas definiciones veamos un ejemplo de declaración de una interfaz:
como mencione antes, una interfaz puede tomarse como una clase 100% abstracta, por lo que el modificador abstract no es necesario. por ello las siguientes declaraciones son legales
el modificador public es necesario a menos que queramos que sea de acceso de paquete o por defecto.
ahora pasemos a los métodos:
todos los métodos en una interfaz son publicos y abstractos (modificadores public y abstract) por lo que usar estos modificadores es redundante, cualquiera de las siguientes declaraciones son iguales y legales para un metodo en la interfaz:
como contraparte cualquier otro modificador agregado a un método en una interfaz provocara un error en tiempo de compilación, por ejemplo
Declarando Constantes en la interfaz
Esta permitido colocar atributos en una interfaz , sin embargo se debe tener en cuenta que el mismo valor debe estar disponible para cualquier clase que implemente la interfaz, por ello solo se permite declarar constantes. Recordemos que una constante se logra aplicando los modificadores public, static y final sin embargo esto ya esta implicito en una interfaz por lo que no es necesario colocar dichos modificadores en sus atributos, esto puede llevar a confusiones por lo que tiene que tenerse mucha atencion en si el atributo es declarado en una interfaz (lo que lo convierte en una constante y a tener los modificadores public, static y final de manera implicita) o si el atributo se declara en una clase lo que lo convierte en una variable de instancia y no necesariamente una constante.
tomemos como ejemplo la declaracion de un atributo dentro de una interfaz, todas las declaraciones son identicas:
Todas estas declaraciones dentro de una interfaz son equivalentes a:
si una clase que implementa la interfaz intentara modificar el valor de la constante altitudMaxima provocaria un error en tiempo de compilación.
Hola esta vez quiero mostrar el ultimo trailer del juego Deus Ex: Human Revolution tercera parte de la mas que venerada saga Deus Ex. esta tercera parte es desarrollada por Eidos aunque la cinematica corre por cuenta de Square Enix asi que podemos esperar calidad al menos en esta parte, el juego estará disponible a principios del 2011, no digo mas y los dejo con el trailer
A menudo el proceso de despliegue de software pasa por una lenta etapa de integracion, pruebas de aceptacion, pase a produccion Martin Fowler y Paulo Caroli comentan en esta entrevista (20 minutos en ingles y con el texto debajo de la misma) su experiencia sobre testing, integracion continua y entrega de aplicaciones me quedo con una frase de Martin Fowler "Tan pronto como sea posible, pero siempre con la máxima calidad "
InfoQ: Martin Fowler and Paulo Caroli on Continuous Integration and DeploymentHola a todos vuelvo después de un tiempo debido a obligaciones en el trabajo, y darme un tiempo para mi, hoy quiero hablar sobre algunas cosas que he estado haciendo, compartirlas y animarlos a involucrarse un poco.
Hace poco tuve una entrevista y entre los temas de los que hablamos salio wikipedia, mencione que casi siempre busco contenidos en la edición inglesa debido al mayor contenido que puedes encontrar, que salvo honrosas excepciones es superior a la edición española, llegamos a la conclusión que hay mucho conocimiento por difundir si alguien se diera el trabajo de poder traducir dicha información, pues bien con esa idea en la cabeza me fui a casa y luego de leer
esta excelente tira cómica me llamo mucho la atención sobre si el adorable animalito podría ser realmente tan peligroso, asi que busqué en wikipedia (que como ellos mismos dicen no es una fuente primaria pero para salir de dudas suele bastar y sobrar) , y encontré que si era verdad pero la
version española del articulo era muy corta comparada con la
version en ingles, en ese momento recordé lo comentado en la entrevista: que a veces solo falta querer dar ese poco de tiempo y decidí que a mi si me daba la gana de enriquecer un poquito la versión española traduciendo el articulo que encontré, ademas de que empezar con un articulo sobre el animal mas venenoso del mundo y mas si era una pequeña ranita de 5 cm como tamaño máximo pero con un veneno tan potente que un gramo basta para matar 15 000 personas me parecía lo suficientemente friki como para mi, aquí la pueden ver
despues de aproxi
madamente 3 o 4 horas tenia la version traducida, con algo de ayuda del usuario Technopat que muy amablemente realizo las revisiones y (muchas correcciones) gramaticales y de estilo tenemos la nueva version final del articulo . la sensación es de mucha satisfacción. Pues bien ahora estoy en un par de proyectos para acercar un poco mas los contenidos de webs (uno de ellos sobre metodologías ágiles) en otros idiomas al idioma de Cervantes, difundir un poco mas de conocimiento y ganarme algo de buen karma que creo que lo necesito. Y Uds no se animan a hacer algo parecido? no tiene que ser una labor sacrificada, yo escogí el articulo por que me gusto el tema, me divertía, practique mi ingles y apoye a la comunidad. no se animan a hacer travesuras? de esas que mejoran un poco mas el mundo?
Hola a todos:
Hoy traigo un pequeño tutorial sobre netbeans en el trabajo en el que estoy actualmente hemos decidido usarlo como ide y estoy acostumbrado a la funcion de autocompletar de xmls basados en el esquema (xsd) entonces estuve dando un par de vueltas para ver como poder configurar el autocompletar, pues este no trae los esquemas xml de spring 3.0 precargados algo a lo que me habia acostumbrado del ide de springsource.
aqui les dejo el procedimiento para registrar los xsd de forma local en caso de que por alguna razon no tengan salida a internet pues si es asi he visto que el ide se encarga de obtener el mismo el esquema.
En netbeans 6.8 ir al menu tools/DTD and Xml Schemas
se muestra una pantalla con un listado de los catalogos que estan precargados, hacer click derecho sobre el ultimo: User Catalog [read-write] se muestra un menu desplegable, escoger: "add local dtd or xml schema"
a continuacion debemos buscar el archivo xsd correspondiente en la tercera opcion "URI" click en el boton browse
previamente necesitamos tener el archivo xsd si bajaste el springframework con fuentes basta que vayas a la siguiente ruta:
[ruta donde hayas descomprimido el framework]\projects\org.
springframework.beans\src\
main\resources\org\
springframework\beans\factory\
xml\spring-beans-3.0.xsd
presionas ok y ahora netbeans podra autocompletar cuando estes editando un archivo que use como schema spring-beans-3.0.xsd en el editor de xml
este metodo funciona bien cuando no tenemos conexion a internet para que el ide obtenga por si mismo las definiciones o desarrollamos xsd's propios, la desventaja de este metodo como ya mencione es que necesitas tener los xsd, cargarlos uno a uno, y todos apareceran apiñados en el catalogo de usuario, seria mas ordenado si pudiese cargar todo el catalogo y tenerlos ordenados y agrupados
alguien sabe como lograrlo?
Hola a todos esta vez un post rapido para hacer difucion de una conferencia que va a darse organizada por la Región XXI Sur y Balneriarios, de la Asociación Scouts del Perú, con el apoyo de la Municipalidad de San Juan de Miraflores.si bien la conferencia esta organizada por la asociacion scout recomiendo a todos aquellos que quieran beneficiarse de la experiencia del expositor en lo referente a la gestion de recursos humanos asistan es en dia domingo y gratis, asi que no hay excusa para perdersela aqui unos datos mas sobre la misma:Datos de la conferencia:
Objetivos:
- La conferencia da una introducción a la Gestión del talento humano.
- Permite que el participante conozca las experiencias de otras organizaciones empresariales y sociales que manejen métodos productivos respecto al tema.
Justificación:
Las organizaciones, tienen entre sus miembros personas capaces con un talento probablemente que no lo desarrollan. Grandes empresas están aplicando los actuales esquemas de rendimiento, con diferentes metodologías, Las organizaciones no sólo deben adaptarse al hecho de que cada colaborador es diferente, sino que debe “aprovechar esas diferencias”. “Una organización que aprende, es una organización experta en crear, adquirir y transmitir conocimiento, y en modificar su conducta para adaptarse a esas nuevas ideas y conocimientos.(“David A. Garvin Harvard Business Review-July-August 1993)
Metodología:
Será una conferencia de 80 minutos aprox. de exposición teórica, y 50 minutos para que los participantes pregunten en relación a sus organizaciones, de como pueden manejar sus recursos humanos y 15 minutos de un break.
Expositor:
Mg. Jorge Alfaro Sacre, Ingeniero industrial – Universidad de Lima, Magister en Organización & Dirección de personas – ESAN.
Actualmente profesor de la Universidad Privada “Ricardo Palma” en la facultad de post grado de Recursos Humanos. Gerente de Recursos Humanos del Grupo Albis S.A, Ex Gerente de Tecnología de Coca-Cola Servicios del Perú.
Día:
Domingo 27/06/2010 Hora:9:30 am. (Se ruega puntualidad)
Costo:
INGRESO LIBRE
Lugar:
Plataforma Empresarial de la Municipalidad de San Juan de Miraflores
adjunto un mapa para llegar a la municipalidad de San Juan de Miraflores
Mapa

Estoy leyendo el libro The Web Application Hacker Handbook y encontré este punto sobre el que queria escribir (traducir) un poco pues me parece importante y que ha sido dejado de lado, como desarrollador web muchas veces me preocupo de que la plataforma sea la correcta, de la usabilidad y formas de acceder a la base de datos, tiempos de respuesta y muchas otras cosas pero muchas veces se deja de lado el apartado de la seguridad, aquí algunos de los factores claves de que hoy por hoy una aplicación web pueda tener poca seguridad (y no, no basta con decir: usamos ssl)Nociones inmaduras de seguridadEn el área de aplicaciones web existen nociones de seguridad menos maduras que en otras áreas establecidas hace ya algo de tiempo como son las áreas de redes o sistemas operativos; mientras que la mayoría de personas que trabajan en el sector de las TI tienen un conocimiento razonable de lo esencial en seguridad de redes y como proteger servidores, aun hay mucha confusión sobre conceptos clave involucrados en la seguridad de las aplicaciones web. Es común encontrar programadores web con mediana experiencia para quienes una explicación de los tipos básicos de fallas en seguridad se les presenta como una completa revelación.
Desarrollo In-HouseLa Mayoría de las aplicaciones web son desarrolladas In-House por el propio equipo de la empresa o por terceros. Incluso empleando componentes de terceros que son casi siempre customizados o rehechos usando código nuevo. En estas situaciones, cada aplicación es diferente y puede contener sus propios defectos. Como contraste tenemos que muchas de estas aplicaciones se despliegan en infraestructuras típicas de cualquier organización las cuales han sido compradas como la mejor de su clase e instaladas siguiendo las guías y estándares de la industria
Simplicidad engañosaCon las actuales plataformas de aplicación y herramientas de desarrollo web, es posible para un novato programar y crear poderosas aplicaciones empezando desde cero y en un corto periodo de tiempo. Pero hay una gran diferencia entre producir código que funcione y código seguro. Muchas aplicaciones web son creadas por individuos bien intencionados que simplemente carecen del conocimiento y la experiencia para identificar donde puede levantarse un problema de seguridad
Rápida evolución del perfil de las amenazasComo resultado de su relativa inmadurez, la investigación en ataques a aplicaciones web y las defensas asociadas a estas es un campo fértil en la que nuevos conceptos y amenazas son concebidas a un ritmo mas rápido que el que ahora tienen las tecnologías mas antiguas. Un equipo de desarrollo que empieza un proyecto con un completo conocimiento de las amenazas actuales puede haber perdido su estatus para el momento en que la aplicación esta completada y ya ha sido desplegada
Limitaciones de tiempo y recursosLa mayoría de los proyectos de desarrollo de aplicaciones web sufren estrictas limitaciones en tiempo y recursos, que llevan a desarrollo internos y desarrollos mas rápidos de lo que es recomendable. Usualmente no es posible emplear expertos dedicados en seguridad en los equipos de diseño o desarrollo, y se deja el testing de la seguridad por especialistas (cuando se lleva a cabo) hasta el final del ciclo de vida del proyecto, en el balance de las prioridades frente a una fecha limite; la necesidad de producir una aplicación funcional y estable normalmente sobrepasa unas menos tangibles consideraciones de seguridad. Una organización típica podría tener la buena voluntad de pagar unos cuantos días de consultoría para evaluar una nueva aplicación; pero un test rápido de penetración encontrara solamente las vulnerabilidades típicas y mas fáciles de hallar mientras que otras vulnerabilidades mas sutiles y que requieren de mas tiempo y paciencia para ser identificadas podrían ser (y de hecho son) pasadas por alto.
Tecnologías sobre utilizadasMuchas de las tecnologías centrales empleadas en aplicaciones web vinieron al mundo cuando el panorama de la world wide web era muy diferente, y han sido empleadas mas allá del propósito para el que fueron concebidas inicialmente, por ejemplo el uso de JavaScript como una forma de transmisión de datos en muchas aplicaciones basadas en AJAX. Como las expectativas colocadas en la funcionalidad de las aplicaciones web ha evolucionado rápidamente, las tecnologías usadas para implementarlas han quedado atras en la curva, y hoy tenemos viejas tecnologias siento estiradas y adaptadas para satisfacer los nuevos requerimientos. No es de sorprender que esto nos llevará a nuevas vulnerabilidades con efectos colaterales que aun no hayamos podido ver.
Tomado de The Web Application Hackers Handbook Pues eso, después de mi ultimo empleo decidí iniciar la aventura de la empresa propia me asocie y empezamos la lucha de mandar propuestas, armar demos, con muchos sueños esperanzas y trabajo, sin embargo un conjunto de factores (incluida la inexperiencia de su servidor) no permitió que se desarrollaran bien las cosas, por ello he decidido hacer un poco de reingenieria, asi es, volver a empezar, aun tengo pendiente terminar la tesis, cerrar el ultimo curso en la universidad y un trabajo a tiempo completo no me permite la holgura de hacerlo en el tiempo que quiero (abstenerse de decirme que si, solo es cuestión de esforzarse,cada persona es diferente y no quiero pasar las de cain sin sueño y sin vida para poder con un empleo a tiempo completo, cursos y tesis a la vez) así que buscare algo sencillo una practica o pasantía o trabajos de freelance que me permitan administrar mi tiempo de la mejor forma (que no le bajo el nivel a los trabajos de freelance, muchos requieren mas conocimientos y habilidades que un empleo dependiente común, solo que un freelance tiene mas libertad para getionar su tiempo, y por ello lo considero), aun tengo en la mira el poder lanzarme como freelance (este post es un boceto de anuncio de ello) así que a mis queridos lectores ala!! anuncio lanzado estoy libre y disponible para trabajo, pueden contactarme por email o mensaje directo al twitter un saludo y éxitos a todos me voy a almorzar!!!
Paso de hacer mas autobombo aqui si quieren ver mi cv pueden hacerlo en la web de LinkedIn en
este enlace Después de una larga pausa por motivos personales retomo la publicación de los apuntes de estudio para la certificación SCJP su deseas ver los capítulos anteriores o siguientes recuerda que puedes ir al indice que contiene la lista de todas las publicaciones de esta serie
AquíEn esta ocasión repasaremos la declaración de clases y los modificadores que podemos utilizar en ellas
El código que escribimos se estructura siempre en clases o interfaces (después hablaremos de paquetes) y dentro de ellas colocamos las variables y los métodos, la forma en la que declaremos cada uno de estos elementos afectará el comportamiento de nuestro código.
Por ejemplo cambiar un método de
public a
private hará que este desaparezca de la vista de todos los otros métodos que lo referenciaban salvo que se trate de métodos pertenecientes a la misma clase en la que fue declarado.
Reglas de Declaración de Archivos de Código:Solo puede haber una clase con el modificador
public por archivo
Los comentarios pueden estar al inicio o al fin de cualquier línea de código
Si en un archivo hay una clase pública el nombre del archivo debe ser el mismo que el de la clase, por ejemplo si en el archivo tenemos una clase:
el archivo debe llamarse
Cat.javael orden de las declaraciones es el siguiente:
- declaración de paquete
- sentencias de importación
- declaración de clase
ejemplo:
tanto las sentencias
package o
import podrian no estar presentes, pero siempre debe mantenerse el mismo orden, por ejemplo tomando como base el ejemplo anterior las siguientes combinaciones son válidas:
Las sentencias
package e
import se aplican a todas las clases dentro del mismo archivo de código y se declaran una única vez al inicio del archivo, ejemplo:
imaginemos el siguiente código dentro del archivo
Cat.javaUn archivo puede tener mas de una clase que no tenga el modificador
public pero en caso que no contenga una clase pública no necesita llamarse igual que alguna de las clases en su interiorDeclaración de Clases y ModificadoresPara declarar una clase basta con una sentencia
xclass el siguiente código es lo mínimo necesario para tener una clase válida:
Sin embargo podemos agregar modificadores antes de la sentencia
xclass para modificar el comportamiento de la misma, estos modificadores son de 2 tipos:
modificadores de acceso (
public, protected, private)
otros modificadores (
strictfp, final, abstract)
Modificadores de acceso:Existe algo interesante sobre los niveles de acceso (también llamados accesos de control o control access)y es que existen 4, pero solo hemos mencionado 3 modificadores de acceso el cuarto nivel de acceso de control es el acceso por defecto o de paquete, entonces la clase que declaramos antes:
tiene el nivel de acceso de control de paquete; en otras palabras: sea que coloquemos un modificador de acceso o no, toda clase método o atributo tiene ya un nivel de acceso asignado,
otro punto a tomar en cuenta es que aunque existen 4 niveles de acceso de control a una clase solo puede asignarsele 2 estos son:
- Acceso por defecto o de paquete (sin modificador)
- Acceso público (modificador public)
Decir que una clase A tiene acceso a una clase B significa que:
- A puede crear una instancia de B.
- A puede extender B (esto es: puede volverse una subclase de B).
- A puede acceder a ciertos metodos y variables dentro de B, dependiendo del tipo de control de acceso a dichos metodos y variables.
Cuando hablamos de acceso a clases hablamos también de visibilidad, el nivel de acceso que exista entre ellas tiene prioridad sobre el nivel de acceso que posean sus métodos o atributos, esto quiere decir que si la clase A no tiene acceso a la clase B, no importa el nivel de acceso de sus métodos o atributos, la clase A no podrá acceder a ningún método o atributo de B.
Acceso por Defecto o De PaqueteComo mencionamos este es el nivel de acceso que obtenemos si no añadimos ningún modificador a una clase, a este nivel también se le conoce como nivel de acceso de paquete debido a que una clase con nivel de acceso por defecto solo puede ser vista por las otras clases que estén dentro de su mismo paquete y a su mismo nivel (explicare esto en el ejemplo).
Ejemplos:
archivo1:
archivo2:
en este caso la clase
Carreta con un nivel de acceso de paquete esta en un paquete diferente que la clase Auto, y mientras que el archivo de la clase
Carreta compila perfectamente el archivo de clase
Auto nos indica que "
Auto cannot be resolved to type"
lo mismo obtenemos en el siguiente caso:
archivo1:
archivo2:
Esta vez la clase
Auto esta en el paquete
vehicle que es un subpaquete de
antiques, y sin embargo obtendremos el mismo error por lo que podemos deducir que el nivel de acceso del paquete es estricto, no importa si la clase que hereda esta en algún subpaquete.
Para lograr que el código funcione tenemos 2 opciones: Declarar la clase
Carreta como publica agregando el modificador
public o colocando ambas clases en el mismo paquete como en el siguiente ejemplo:
archivo1:
archivo2:
Este tercer caso es un acceso permitido a la clase Carreta desde la clase Auto pues ambos pertenecen al paquete
vehiclesAcceso PúblicoUna clase es de acceso público si agregamos antes de la sentencia
xclass la sentencia
public con esto estamos haciendo esta clase visible a todas las demás clases en todos los paquetes, sin embargo recordar que es necesario aun agregar la instrucción
import para acceder a la clase desde otros paquetes
ejemplo
tomando como base el ejemplo del punto anterior para que la sentencia sea valida usando acceso publico deberíamos cambiar la declaración de la clase
Carreta por
archivo1:
archivo2:
Otros Modificadores de ClaseAdemas de los modificadores de acceso que ya vimos existen los modificadores: s
trictfp, abstract y final, y pueden usarse junto con los modificadores de acceso excepto la combinación
abstract y
final.Modificador finalUna clase es final si agregamos a su declaración el modificador
final, una clase final no puede ser subclaseada, esto es que ninguna clase puede heredar de una clase final, si se intentara heredar de dicha clase se obtendría un mensaje de error en tiempo de compilación; las razones para hacer esto son diversas pero la principal suele ser garantizar que la implementación de una clase se mantiene sin cambios, generalmente por motivos de seguridad.
La mayoría de las clases que conforman el núcleo del sdk son declaradas como finales como por ejemplo la clase
StringSin embargo esto debe observarse mucho por ejemplo la siguiente situacion:
Imaginemos no tienes el código fuente de una clase que no ha sido declarada como final y necesitas hacerle modificaciones, solo necesitas heredarla, aplicar los cambios necesarios y reemplazar las llamadas a la clase antigua por la nueva clase que acabas de modificar, si la clase que necesitas cambiar hubiera sido declarada como final esto no seria posible y el cambio seria imposible de realizar
Ejemplo:
Continuando con el ejemplo anterior ahora declararemos la clase
Carreta como final y veremos el mensaje que se obtiene
archivo1:
archivo2:
si intentáramos ejecutar el código obtendríamos el mensaje:
The type Auto cannot subxclass the final xclass CarretaModificador abstractUna clase es abstracta si agregamos a su declaración el modificador
abstract, Una clase abstracta no puede ser implementada, por lo que su único propósito es ser subclaseada o heredada por otras clases esto puede ser debido a que esta clase servirá como padre de muchas clases o por que es un concepto demasiado vago como para poder ser estructurado, tomemos por ejemplo una clase llamada
Animal, es demasiado vaga pues representa a todos los animales posibles, cuantas patas tiene? cuantos ojos?, de que color es?... más aún. como se comportaría? como se mueve?, camina, vuela, nada?, de repente mas de uno a la vez, como nace,? de un huevo, de la madre, etc.
Sin embargo una vez que se declaran clases mas concretas estas preguntas pueden ser respondidas como Perro, Conejo, etc.
Otro hecho que debe notarse es que los métodos de una clase abstracta también pueden ser abstractos y por ello no estar implementados, tan solo declarados. Para esto debemos incluir en la declaración del método el modificador
abstract y en lugar de las llaves ({}) terminara en un punto y coma (;) un método abstracto tampoco tiene implementación, en este caso delegamos el implementarlo a quien herede la clase abstracta. Una clase abstracta puede tener tanto métodos abstractos como no abstractos, pero una clase no abstracta no puede tener métodos abstractos, en resumen: si una clase contiene al menos un método abstracto, la clase debe declararse como abstracta. Un ejemplo de metodos no abstractos que puede tener una clase abstracta son los getters y setters a sus atributos.
Ejemplo
El código anterior es correcto y compila sin problemas, sin embargo si intentamos instanciar la clase se obtendrá:
xclass Animal is an abstract xclass. it can't be instantiated.
Con esto terminamos el tema sobre declaración de clases y modificadores de acceso a las mismas, en el siguiente post trataremos sobre la declaracion de interfases.
zerakooll es un usuario de youtube que se ha dado el trabajo de colorear y subir en video algunos mangas de naruto el trabajo es bastante profesional incluyendo en los ultimos algunas animaciones para lograr efectos visuales (nieve, el viaje dimensional de madara) en verdad recomiendo mucho que lo vean disfrutaran mas de los episodios ademas de que usa escaneados del manga traducidos al español como muestra les dejo uno de sus trabajos
Al parecer hay un error cuando dejas un archivo seleccionado en el explorador de windows y tienes la vista previa activada, concretamente archivos de texto
hoy estaba haciendo unas pruebas con un archivo html lo deje seleccionado en el explorador de windows con la vista previa habilitada, despues de editarlo en el programa notepad++ y al intentar grabar los cambios me salio un popup indicandome que el archivo estaba ocupado por otro programa
mi sorpresa fue que el supuesto otro programa era la vista previa del explorador de windows
de momento solo lo he probado con archivos de texto plano (txt, html, css) alguno ha visto si esto sucede con algun otro tipo de archivo?