Download Leer fichero con la clase Scanner y Java,¿Problemas de
Document related concepts
no text concepts found
Transcript
Leer fichero con la clase Scanner y Java Para nuestro articulo de hoy utilizaremos la maravillosa clase de la API de Java Scanner, con la cual podemos realizar lecturas de flujos de texto tanto por entrada estándar como desde un fichero. A continuación tenemos el ejercicio realizado con Scanner: import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; class Main { public static void main(String[] args) throws FileNotFoundException{ Scanner sc = new Scanner(new File("input")); while(sc.hasNextLine()) { System.out.println(sc.nextLine()); } sc.close(); } } Además, esta clase permite leer cualquier otro tipo de datos como int, float, etcétera. Tan solo debemos utilizar las funciones de las que dispone. A continuación podemos ver como podríamos leer números enteros desde la entrada estándar y esta clase ya se encargará de convertirlos a dicho tipo. import java.util.Scanner; class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int numero1 = sc.nextInt(); int numero2 = sc.nextInt(); System.out.println(numero1 + numero2); } } Esta vez, al constructor le pasamos un objeto de tipo InputStream que obtenemos de System.in, y tan solo debemos llamar al método nextInt() el cual se encargará de leer por entrada estándar el número entero y devolver un tipo primitivo int, con el que podremos hacer operaciones posteriores. www.asociacionaepi.es ¿Problemas de almacenamiento en tu móvil con Android? Cassini te ayuda Las tendencias del sector de la telefonía móvil, con smartphones equipados con 16, 32 ó 64 gigas de almacenamiento interno – aunque ya os hemos hablado de algún que otro que alcanza los 128 gigas – nos hacen olvidar que hasta hace cuatro días la falta de almacenamiento interno era uno de los mayores quebraderos de cabeza a los que nos teníamos que enfrentar muchos de los usuarios de teléfonos conAndroid. Aún así no son pocos los dispositivos de la gama básica o algo más antiguos que los que estamos acostumbrados a ver en Android Ayuda, que siguen teniendo limitaciones en lo referente a la capacidad de almacenamiento. Así que vamos a intentar echaros una mano gracias aCassini. La solución que os proponemos – y que nos llega de parte de los expertos de xdadevelopers -, se llama Cassini y, si bien no se trata del ‘Bálsamo de Fierabrás’ que acabará de una vez por todas con vuestros problemas de almacenamiento, sí que conseguirá aliviar la situación en cierto modo y os ofrecerá un poco más de espacio disponible en vuestro dispositivo. ¿Qué es y cómo funciona Cassini? Cassini es una herramienta basada en PC, que os permitirá minimizar el espacio que ocupan las aplicaciones instaladas en el smartphone mediante la compresión de los archivos de imagen de dichas apps. De este modo, habrá menos almacenamiento ocupado por las aplicaciones y más capacidad disponible para nuestras fotos, música, vídeos, etcétera. Según sus desarrolladores, Cassini funciona con todas las aplicaciones de sistema a excepción de LatinIME.apk, del mismo modo que también hace su trabajo a la perfección con una considerable lista de aplicaciones que encontraréis en Google Play como Solid Explorer o ZPlayer. Desgraciadamente, está comprobado que no funciona con Whatsapp y con la inmensa mayoría de juegos con los que se ha probado, así que tenedlo en cuenta. ¿Cómo se instala y cómo se usa? Antes de poder dedicarnos a ganar almacenamiento interno en nuestro smartphone con Cassini, tendremos que llevar a cabo un proceso de configuración en el que la parte más complicada será la de instalar y poner a punto Java 7. El primer paso, después de descargar e instalar en nuestro ordenador Java SE Run-time Enviroment 7, será desplazarnos a la pestaña Advanced dentro del menú System Properties. Una vez allí, nos adentraremos en Environment Variables y crearemos una nueva variable del sistema, que llevará por nombre ‘JAVA_HOME’ y que en el apartado de Variable value tendrá la ruta del directorio en el que hayamos instalado Java 7. El siguiente paso es posiblemente el más complicado, ya que tras la creación de la variable de sistema anteriormente descrita, tendremos que buscar en el listado la variable llamada Path. Una vez localizada, la seleccionaremos y pulsaremos ‘Editar’ para poder buscar al final de su Variable value un punto y coma – ‘;’ sin las comillas -, tras el que tendremos que añadir la ruta de la carpeta ‘bin’ del Java 7. Una vez hecho lo anterior, tan sólo tendremos que darle a ‘Ok’ y ya estaremos preparados para el siguiente paso, que nos llevará a descargar Cassini e instalarlo siguiendo las instrucciones del asistente. La utilización de Cassini es mucho más sencilla que su instalación, ya que tan sólo tendremos que copiar los archivos apk que queramos comprimir en la carpeta indicada dentro del directorio bautizado con el nombre de la herramienta. Con las aplicaciones ya copiadas, abriremos Cassini y pulsaremos Intro para proceder a la compresión. Cuando el proceso haya finalizado los archivos apk estarán disponibles para su uso, con la sorpresa añadida de que ocuparán mucho menos espacio que antes. Descarga Cassini v 1.1 y consulta en xda-developers toda la información www.asociacionaepi.es Limit de MySQL en SQL, solución. En MySQL, cuando queremos limitar el rango de registros devueltos por una sentencia SELECT tenemos la opción de utilizar LIMIT: Select * FROM tabla LIMIT 10,5 Esta sentencia nos permite devolver 5 registros a partir del décimo. El ejemplo sería aplicable por ejemplo a un listado paginado con 5 registros por página y estuviésemos mostrando la tercera de ellas. El problema es que SQL no tiene la opción de usar LIMIT. En ocasiones podemos solventarlo rápidamente utilizando TOP, con el que podemos devolver un cierto número de registros, pero solo desde el primero de la sentencia. La solución para esto se puede ver en el siguiente código: SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS row FROM tabla ) ASalias WHERE row > 10 AND row <= 14 ROW_NUMBER() nos devuelve el número de línea de la consulta empezando por 1. Con este número de secuencia renombrado como row, ya podemos decirle con un simple where que nos lo limite en un cierto intervalo. Ciertamente es una solución en SQL un tanto enrevesada frente a la sencillez del LIMIT ofrecido por MySQL. INNER JOIN EN PHP: Consulta Mysql para Unir Tablas Relacionadas Supongamos que tenemos una Tabla Mysql llamada “Empresas” y otra tabla “Servicios”. Y nos interesa mostrar en pantalla los servicios que brinda cada empresa, considerando que cada fila de la tabla “Servicios” tiene un valor asociado a la empresa que pertenece. ¿Cómo listar todas las empresas y sus servicios correspondiente? Lo hacemos utilizando INNER JOIN mediante la siguiente Consulta Mysql: “select Empresas.Nombre,Servicios.Servicio from Empresas inner join Servicios on Servicios.IdEmpresa=Empresas.Id”; Si quisiéramos listar todas las empresas, independientemente que tengan servicios o no, debemos utilizar la Consulta Mysql LEFT JOIN ¿Cómo se interpreta las tablas Mysql y consulta que hicimos arriba Observemos que hay una columna llamada donde se especifica el identificador servicio en cuestión. Por ejemplo, el IdEmpresa=2, por lo tanto pertenece a la “IdEmpresa” en la tabla “Servicios” en de la empresa a la cual pertenece el servicio “Registro de dominios” tiene empresa Solo10.com. Para comprender esta consulta mysql, te conviene leerla de la siguiente manera. Imaginemos que estamos conversando con el motor de base de datos mysql y le decimos: Tráeme todas las filas de la tabla mysql llamada “Empresa” (ver línea número 2: “from Empresas”) A cada fila, agrégale las columnas de la tabla mysql “Servicios” (únicamente las columnas de aquellas filas en donde IdEmpresa sea igual al Id de la empresa correspondiente a la fila actual en la tabla Empresas) (ver línea número 3: “inner join Servicios on Servicios.IdEmpresa=Empresas.Id”) De todo ese conjunto de columnas, dame únicamente la columna “Nombre” de la tabla Mysql “Empresas” y “Servicio” de la tabla mysql “Servicios”. (ver línea número 1: select Empresas.Nombre,Servicios.Servicio) Nuestro código fuente php quedaría completo de la siguiente manera: // Conexión con la base de datos Mysql $conexion=mysql_connect('localhost','Tu-UsuarioMysql','Contraseña-de-tu-Usuari-Mysql'); mysql_select_db('Nombre-de-tu-Base-de-datos-Mysql',$conexion); // Consulta Mysql donde aplicamos INNER JOIN $consulta_mysql="select Empresas.Nombre,Servicios.Servicio from Empresas inner join Servicios on Empresas.Id=Servicios.IdEmpresa"; $resultado_consulta_mysql=mysql_query($consulta_mysql,$conexion); // Navegamos cada fila que devuelve la consulta mysql y la imprimimos en pantalla while($fila=mysql_fetch_array($resultado_consulta_mysql)){ echo "El servicio ".$fila['Servicio']." es ofrecido por la empresa ".$fila['Nombre']; } Las últimas líneas del código, tal como hemos visto hace un tiempo, son para leer e imprimir en pantalla los resultados de una consulta Mysql. Si te resultan complicadas estas extensas consultas mysql, seguramente podría interesarte comenzar a trabajar con el Framework PHP CodeIgniter. CodeIgniter permite hacer consultas mysql, por ejemplo el INNER JOIN, utilizando sentencias más compactas y comprensibles. Espero que este post te sea de utilidad y nos vemos pronto. www.asociacionaepi.es Sharepoint 2010 – Consideraciones para la configuración del servicio de búsqueda El proceso de configuración del servicio de búsqueda en Sharepoint involucra los siguientes pasos generales: 1. Crear una cuenta de usuario, dominio o local, que tenga privilegios de acceso sobre todo el contenido de Sharepoint que se va a incluir en el proceso de indexación y búsqueda. 2. Con la cuenta de usuario creada, registrarla como cuenta administrada de Sharepoint. 3. Crear una aplicación de servicio de búsqueda, Search Service Application, en donde se crean las bases de datos respectivas y adicionalmente se registra la cuenta de servicio respectiva que debe ser la misma de los puntos anteriores. 4. Configurar las fuentes de contenido, content sources, de acuerdo a la configuración de los sitios de Sharepoint. 5. Ejecutar una tarea de “full crawling” sobre el contenido y verificar que la base de datos se ha alimentado con los registros encontrados. Ahora bien, cuando el sitio web es configurado con soporte para autenticación Windows (NTLM) y FBA, y adicional a esto fue configurado con un nombre diferente al configurado por defecto, por ejemplo intranet.midominio.com, el proceso varía. Me encontré con las siguientes novedades: – Por defecto cuando se configura la aplicación del servicio de búsqueda se agrega como fuente de contenido al URL que se encuenta configurada en la zona AAM como por defecto, en nuestro caso sería intranet.midominio.com. – Al intentar ejecutar la tarea de “full crawling” sobre esta configuración se puede presentar el siguiente error: “The SharePoint server was moved to a different location. ( Error from SharePointsite: HttpStatusCode Found The request failed with the error message: — <html><head><title>Object moved</title></head><body> <h2>Object moved to<a href=“%2f_LAYOUTS%2fSharePoint.POC%2fLogin.aspx%3fReturnUrl%3d%252f_vti_bin%252fs itedata.asmx”>here</a>.</h2> </body></html> –. )“ De acuerdo a algunos blogs revisados, para solucionar este problema se debería crear una regla de “crawl” que especifique la página personalizada de inicio de sesión (FBA) y adicionalmente las credenciales de acceso. En mi caso este proceso no funcionó. – Como alternativa adicional, en otros sitios, proponía extender el sitio con autenticación FBA + NTLM a un sitio que solo soporte NTLM, en mi caso por ejemplo intranet.midominio.com:555 sería el sitio extendido con soporte únicamente para autenticación -NTLM. – En la configuración de fuentes de contenido especificar este nuevo sitio, intranet.midominio.com:555. Al configurar estas opciones en efecto la tarea de “crawling” finalizó exitosamente y se indexaron todos los items del sitio, sin embargo, al probar el cuadro de búsqueda que se encuentra en la barra de navegación (superior derecha) y colocar una palabra para buscarla, la página de resultados no mostró resultado alguno. Para identificar el error procedí a habilitar los logs del servicio de búsqueda en nivel “verbose” y adicionalmente descargar la herramienta ULS Viewer (http://archive.msdn.microsoft.com/ULSViewer). Al revisar los archivos de log, posterior a hacer algunas pruebas de búsqueda para identificar el error, encontré el siguiente mensaje: Esto implica que aparentemente no existen “Query Processors” habilitados en la granja de Sharepoint para atender las búsquedas enviadas. En específico un Query Processor dentro de la granja de Sharepoint se habilita iniciando el servicio de “Search Query and Site Settings Service” en la sección “Services on Server”. Adicionalmente se debe habiliar la característica de colección de sitios “Elementos web de Search Server” en: Acciones del Sitio > Configuración del sitio > Administración de la colección de sitios > Características de la colección de sitios. Posterior a configurar estas opciones no hubo cambios, el cuadro de búsqueda no presentaba ningún resultado. Finalmente, en la página de administración de la aplicación del servicio de búsqueda, en la barra lateral izquierda, se encuentra la opción “Server name mappings” (http://altfo.wordpress.com/2010/07/08/this-site-this-list-sharepoint-search-notworking-or-returns-nothing/). En esta opción agregué un item con las siguientes opciones: – Address for indexing: http://intranet.midominio.com:555 – Address for display in search results: http://intranet.midominio.com Ejecuté una nueva tarea de “full crwaling” y finalmente funcionó el cuadro de búsqueda y resultados. Fuente: msmvps.com www.asociacionaepi.es