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