Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas

lunes, 10 de octubre de 2016

Euler #3

Seguimos resolviendo problemas del proyecto Euler, vamos con el tercero.

https://projecteuler.net/problem=3

En Java.

Implementaremos el método más sencillo, división por tentativa.
   1 
2 public class EulerSqrtRev_3 {
3
4 public static boolean isPrime(long number) {
5 if (number == 2) return true;
6 if (number < 2 || number % 2 == 0) return false;
7 double max = Math.sqrt(number);
8 for (long i = 3; i <= max; i +=2) {
9 if (number % i == 0) {
10 return false;
11 }
12 }
13 return true;
14 }
15
16 public static void main(String args[]) {
17 final long number = 600851475143L;
18 long max = number/2;
19 for (long i = 2; i < max; i++) {
20 if (number % i == 0 && isPrime(i)) {
21 System.out.println(i);
22 }
23 }
24 }
25
26 }


 

miércoles, 12 de noviembre de 2008

La próxima batalla de sistemas operativos

En los ordenadores personales podemos decir que hay un sistema operativo predominante (Windows) y algunos más con un porcentaje de usuarios sensiblemente más reducido (MacOSX, Linux, ...)

Según nuestras estadísticas más recientes, por poner un ejemplo, la web de Público la visitan (aproximadamente) un 91% de usuarios con Windows, un 4,8% de  usuarios con MacOSX, un 3,1% de usuarios con Linux y el resto, otros sistemas (algunos *BSD, iPhone, Symbian, Playstation, Wii, etc).

Son estos últimos sistemas los más interesantes: los sistemas operativos de dispositivos móviles. Parece que todos los analistas y gurús de la web están de acuerdo: los dispositivos móviles van a tener cada vez más importancia en la web.

En este segmento no está tan claro que haya un sistema operativo predominante. Tenemos Symbian (Nokia y Ericsson, principalmente), Windows Mobile, BlackBerry, iPhone, el recién llegado Android, ...

En este mercado no hay una predominancia tan clara de un sistema frente a otro. Los Symbian acaparan la mayor parte de ventas, pero la diferencia no es tan abismal como ocurre con los sistemas operativos de escritorio.










































































Company

2Q08
Sales

2Q08 Market Share (%)

2Q07
Sales

2Q07 Market Share (%)

2Q08- 2Q07 Growth (%)

Symbian

18,405,057

57.1

18,273,255

65.6

0.7

Research In Motion

5,594,159

17.4

2,471,200

8.9

126.4

Microsoft Windows Mobile

3,873,622

12.0

3,212,222

11.5

20.6

Linux

2,359,245

7.3

2,816,490

10.1

-16.2

Mac OS X

892,503

2.8

270,000

1.0

230.6

Palm OS

743,910

2.3

461,918

1.7

61.0

Others

352,679

1.1

349,501

1.3

0.9

Total

32,221,175

100.0

27,854,586

100.0

15.7

Fuente: Gartner

En esta tabla no tenemos datos de Android, pero es previsible que a lo largo de este año se comercialicen más terminales que lo incorporen como sistema operativo.

Queda un último contendiente que mencionar. Aunque no es un sistema operativo como tal, considero importante reseñarlo: Java para móviles (J2ME).

Java es un lenguaje de programación (desarrollado por Sun Microsystems) que funciona en muchos entornos diferentes utilizando unas especificaciones adecuadas para cada sistema (servidores, ordenadores personales, dispositivos móviles).
La característica más notable es que los programas Java se ejecutan en una "máquina virtual", con lo que el mismo programa puede correr en distintos dispositivos siempre que tengan instalada la máquina virtual apropiada.

En el caso de los teléfonos móviles, casi todos los modelos incorporan una máquina virtual o intérprete de Java, con lo que el desarrollo de programas para móviles usando este lenguaje se simplifica mucho al poder desarrollar un sólo programa que puede ejecutarse en muchos modelos de teléfono diferentes (en la práctica esta supuesta compatibilidad no lo es tanto).

Resumiendo: sin ser realmente un sistema operativo, el Java para móviles es el sistema que más penetración en el mercado ha tenido. Una buena jugada comercial y técnica, ¿no creen?

lunes, 10 de noviembre de 2008

Programando para teléfonos móviles con J2ME

Pese a la gran disparidad de sistemas operativos, modelos y capacidades que encontramos en los teléfonos móviles hay un denominador común a la hora de desarrollar software para estos dispositivos: muchos modelos pueden ejecutar Java.

La máquina virtual que implementan es muy sencilla y tiene algunas limitaciones, pero ofrece muchas características. Las aplicaciones para móvil básicamente se pueden desarrollar en torno a dos aproximaciones:

  • Utilizando elementos gráficos de alto nivel, como botones, etiquetas, formularios, etc.

  • Utilizando un "canvas" donde "pintamos" los elementos que necesita nuestra aplicación.

El simulador que viene con NetbeansPor otra parte, el desarrollo de aplicaciones es bastante sencillo porque casi todos los entornos de desarrollo proveen un simulador de teléfono muy útil en el que podemos ir probando el programa sin necesidad de instalarlo en el móvil hasta que no está terminado.

Uno de los IDEs que más me ha gustado ha sido NetBeans. Tiene un plugin para J2ME muy bueno y sencillo de utilizar.

No todo es de color rosa. La gran disparidad de dispositivos y sus capacidades complican bastante el desarrollo: las aplicaciones J2ME se desarrollan alrededor de diferentes configuraciones (CDC y CLDC -esta última engloba los móviles, PDAs y dispositivos similares-) y perfiles (dentro de la configuración CLDC, el perfil MIDP es el que se adecúa a los teléfonos móvies, pero existen diferentes versiones).
En el capítulo 1 del libro "Java a Tope: J2ME" viene perfectamente explicado. Por cierto, un libro que puede descargarse gratuitamente y está muy bien.

Como siempre, la mejor forma de aprender algo es poniéndose con ello: he hecho un pequeño programita para móvil que se llama MMU (Music Mobile Utilities) con la ayuda de NetBeans y la verdad es que me ha quedado bastante apañado, sobre todo para no tener ni idea del tema ;-)